From bb767c7e338414beee132af3e96829c1448e214b Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 15 Jul 2012 00:14:28 +0100 Subject: [PATCH] Move things round a bit. --- COPYING | 340 +++++++ ChangeLog | 90 ++ Doxyfile | 1716 ++++++++++++++++++++++++++++++++ README | 82 ++ TODO | 108 ++ doc/mainpage.txt | 37 + dvdomatic.desktop.in | 10 + icons/128x128/dvdomatic.png | Bin 0 -> 18365 bytes icons/22x22/dvdomatic.png | Bin 0 -> 994 bytes icons/32x32/dvdomatic.png | Bin 0 -> 1747 bytes icons/48x48/dvdomatic.png | Bin 0 -> 3407 bytes icons/64x64/dvdomatic.png | Bin 0 -> 5421 bytes icons/finish-trace.svg | 139 +++ icons/finish.jpg | Bin 0 -> 770512 bytes icons/finish2.jpg | Bin 0 -> 108222 bytes icons/finish3.jpg | Bin 0 -> 190419 bytes run/alignomatic | 10 + run/dvdomatic | 10 + run/fixlengths | 10 + run/long-tests | 10 + run/makedcp | 10 + run/playomatic | 10 + run/servomatic | 10 + run/servomatictest | 12 + run/short-tests | 11 + splitchapters | 30 + src/gtk/alignment.cc | 167 ++++ src/gtk/alignment.h | 35 + src/gtk/config_dialog.cc | 369 +++++++ src/gtk/config_dialog.h | 113 +++ src/gtk/dcp_range_dialog.cc | 117 +++ src/gtk/dcp_range_dialog.h | 46 + src/gtk/film_editor.cc | 572 +++++++++++ src/gtk/film_editor.h | 125 +++ src/gtk/film_list.cc | 65 ++ src/gtk/film_list.h | 41 + src/gtk/film_player.cc | 310 ++++++ src/gtk/film_player.h | 63 ++ src/gtk/film_viewer.cc | 224 +++++ src/gtk/film_viewer.h | 63 ++ src/gtk/filter_dialog.cc | 47 + src/gtk/filter_dialog.h | 43 + src/gtk/filter_view.cc | 72 ++ src/gtk/filter_view.h | 47 + src/gtk/gpl.cc | 370 +++++++ src/gtk/gpl.h | 24 + src/gtk/gtk_util.cc | 45 + src/gtk/gtk_util.h | 27 + src/gtk/job_manager_view.cc | 134 +++ src/gtk/job_manager_view.h | 83 ++ src/gtk/job_wrapper.cc | 50 + src/gtk/job_wrapper.h | 27 + src/gtk/wscript | 22 + src/lib/ab_transcode_job.cc | 69 ++ src/lib/ab_transcode_job.h | 47 + src/lib/ab_transcoder.cc | 127 +++ src/lib/ab_transcoder.h | 69 ++ src/lib/config.cc | 139 +++ src/lib/config.h | 207 ++++ src/lib/copy_from_dvd_job.cc | 103 ++ src/lib/copy_from_dvd_job.h | 36 + src/lib/dcp_content_type.cc | 91 ++ src/lib/dcp_content_type.h | 58 ++ src/lib/dcp_video_frame.cc | 433 ++++++++ src/lib/dcp_video_frame.h | 143 +++ src/lib/decoder.cc | 300 ++++++ src/lib/decoder.h | 136 +++ src/lib/decoder_factory.cc | 48 + src/lib/decoder_factory.h | 32 + src/lib/delay_line.cc | 110 ++ src/lib/delay_line.h | 36 + src/lib/dvd.cc | 78 ++ src/lib/dvd.h | 21 + src/lib/encoder.cc | 71 ++ src/lib/encoder.h | 87 ++ src/lib/encoder_factory.cc | 40 + src/lib/encoder_factory.h | 30 + src/lib/examine_content_job.cc | 69 ++ src/lib/examine_content_job.h | 45 + src/lib/exceptions.h | 215 ++++ src/lib/ffmpeg_decoder.cc | 256 +++++ src/lib/ffmpeg_decoder.h | 90 ++ src/lib/film.cc | 631 ++++++++++++ src/lib/film.h | 275 +++++ src/lib/film_state.cc | 254 +++++ src/lib/film_state.h | 155 +++ src/lib/filter.cc | 131 +++ src/lib/filter.h | 78 ++ src/lib/format.cc | 189 ++++ src/lib/format.h | 101 ++ src/lib/image.cc | 392 ++++++++ src/lib/image.h | 164 +++ src/lib/imagemagick_decoder.cc | 55 + src/lib/imagemagick_decoder.h | 63 ++ src/lib/j2k_still_encoder.cc | 73 ++ src/lib/j2k_still_encoder.h | 43 + src/lib/j2k_wav_encoder.cc | 289 ++++++ src/lib/j2k_wav_encoder.h | 65 ++ src/lib/job.cc | 242 +++++ src/lib/job.h | 115 +++ src/lib/job_manager.cc | 101 ++ src/lib/job_manager.h | 54 + src/lib/log.cc | 63 ++ src/lib/log.h | 55 + src/lib/lut.h | 51 + src/lib/make_dcp_job.cc | 94 ++ src/lib/make_dcp_job.h | 37 + src/lib/make_mxf_job.cc | 81 ++ src/lib/make_mxf_job.h | 48 + src/lib/options.h | 109 ++ src/lib/player.cc | 227 +++++ src/lib/player.h | 70 ++ src/lib/player_manager.cc | 137 +++ src/lib/player_manager.h | 59 ++ src/lib/scaler.cc | 117 +++ src/lib/scaler.h | 78 ++ src/lib/scp_dcp_job.cc | 242 +++++ src/lib/scp_dcp_job.h | 40 + src/lib/screen.cc | 104 ++ src/lib/screen.h | 68 ++ src/lib/server.cc | 58 ++ src/lib/server.h | 60 ++ src/lib/shell_command_job.cc | 71 ++ src/lib/shell_command_job.h | 46 + src/lib/thumbs_job.cc | 68 ++ src/lib/thumbs_job.h | 37 + src/lib/tiff_decoder.cc | 224 +++++ src/lib/tiff_decoder.h | 69 ++ src/lib/tiff_encoder.cc | 77 ++ src/lib/tiff_encoder.h | 43 + src/lib/timer.cc | 89 ++ src/lib/timer.h | 78 ++ src/lib/transcode_job.cc | 100 ++ src/lib/transcode_job.h | 43 + src/lib/transcoder.cc | 72 ++ src/lib/transcoder.h | 59 ++ src/lib/trim_action.h | 28 + src/lib/util.cc | 496 +++++++++ src/lib/util.h | 121 +++ src/lib/wscript | 52 + src/tools/alignomatic.cc | 317 ++++++ src/tools/dvdomatic.cc | 328 ++++++ src/tools/fixlengths.cc | 209 ++++ src/tools/makedcp.cc | 138 +++ src/tools/playomatic.cc | 67 ++ src/tools/run_film_editor | 4 + src/tools/servomatic.cc | 238 +++++ src/tools/servomatictest.cc | 159 +++ src/tools/test.cc | 15 + src/tools/wscript | 17 + src/wscript | 5 + test/dvd/VIDEO_TS/VIDEO_TS.BUP | 0 test/dvd/VIDEO_TS/VIDEO_TS.IFO | 0 test/dvd/VIDEO_TS/VIDEO_TS.VOB | 0 test/dvd/VIDEO_TS/VST_01_1.VOB | 1 + test/dvd/VIDEO_TS/VTS_01_0.IFO | 0 test/dvd/VIDEO_TS/VTS_01_0.VOB | 0 test/dvd/VIDEO_TS/VTS_01_1.VOB | 0 test/dvd/VIDEO_TS/VTS_02_0.VOB | 1 + test/dvd/VIDEO_TS/VTS_02_1.VOB | 1 + test/dvd/VIDEO_TS/VTS_02_2.VOB | 1 + test/dvd/VIDEO_TS/VTS_02_3.VOB | 1 + test/dvd/VIDEO_TS/VTS_02_4.VOB | 1 + test/dvd/VIDEO_TS/VTS_03_0.IFO | 1 + test/dvd/VIDEO_TS/VTS_03_0.VOB | 1 + test/dvd/VIDEO_TS/VTS_03_1.VOB | 1 + test/film/log | 3 + test/film/metadata | 18 + test/long.cc | 156 +++ test/metadata.ref | 24 + test/short.cc | 220 ++++ test/wscript | 16 + waf | Bin 0 -> 87683 bytes wscript | 91 ++ 174 files changed, 18207 insertions(+) create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 Doxyfile create mode 100644 README create mode 100644 TODO create mode 100644 doc/mainpage.txt create mode 100644 dvdomatic.desktop.in create mode 100644 icons/128x128/dvdomatic.png create mode 100644 icons/22x22/dvdomatic.png create mode 100644 icons/32x32/dvdomatic.png create mode 100644 icons/48x48/dvdomatic.png create mode 100644 icons/64x64/dvdomatic.png create mode 100644 icons/finish-trace.svg create mode 100644 icons/finish.jpg create mode 100644 icons/finish2.jpg create mode 100644 icons/finish3.jpg create mode 100755 run/alignomatic create mode 100755 run/dvdomatic create mode 100755 run/fixlengths create mode 100755 run/long-tests create mode 100755 run/makedcp create mode 100755 run/playomatic create mode 100755 run/servomatic create mode 100755 run/servomatictest create mode 100755 run/short-tests create mode 100755 splitchapters create mode 100644 src/gtk/alignment.cc create mode 100644 src/gtk/alignment.h create mode 100644 src/gtk/config_dialog.cc create mode 100644 src/gtk/config_dialog.h create mode 100644 src/gtk/dcp_range_dialog.cc create mode 100644 src/gtk/dcp_range_dialog.h create mode 100644 src/gtk/film_editor.cc create mode 100644 src/gtk/film_editor.h create mode 100644 src/gtk/film_list.cc create mode 100644 src/gtk/film_list.h create mode 100644 src/gtk/film_player.cc create mode 100644 src/gtk/film_player.h create mode 100644 src/gtk/film_viewer.cc create mode 100644 src/gtk/film_viewer.h create mode 100644 src/gtk/filter_dialog.cc create mode 100644 src/gtk/filter_dialog.h create mode 100644 src/gtk/filter_view.cc create mode 100644 src/gtk/filter_view.h create mode 100644 src/gtk/gpl.cc create mode 100644 src/gtk/gpl.h create mode 100644 src/gtk/gtk_util.cc create mode 100644 src/gtk/gtk_util.h create mode 100644 src/gtk/job_manager_view.cc create mode 100644 src/gtk/job_manager_view.h create mode 100644 src/gtk/job_wrapper.cc create mode 100644 src/gtk/job_wrapper.h create mode 100644 src/gtk/wscript create mode 100644 src/lib/ab_transcode_job.cc create mode 100644 src/lib/ab_transcode_job.h create mode 100644 src/lib/ab_transcoder.cc create mode 100644 src/lib/ab_transcoder.h create mode 100644 src/lib/config.cc create mode 100644 src/lib/config.h create mode 100644 src/lib/copy_from_dvd_job.cc create mode 100644 src/lib/copy_from_dvd_job.h create mode 100644 src/lib/dcp_content_type.cc create mode 100644 src/lib/dcp_content_type.h create mode 100644 src/lib/dcp_video_frame.cc create mode 100644 src/lib/dcp_video_frame.h create mode 100644 src/lib/decoder.cc create mode 100644 src/lib/decoder.h create mode 100644 src/lib/decoder_factory.cc create mode 100644 src/lib/decoder_factory.h create mode 100644 src/lib/delay_line.cc create mode 100644 src/lib/delay_line.h create mode 100644 src/lib/dvd.cc create mode 100644 src/lib/dvd.h create mode 100644 src/lib/encoder.cc create mode 100644 src/lib/encoder.h create mode 100644 src/lib/encoder_factory.cc create mode 100644 src/lib/encoder_factory.h create mode 100644 src/lib/examine_content_job.cc create mode 100644 src/lib/examine_content_job.h create mode 100644 src/lib/exceptions.h create mode 100644 src/lib/ffmpeg_decoder.cc create mode 100644 src/lib/ffmpeg_decoder.h create mode 100644 src/lib/film.cc create mode 100644 src/lib/film.h create mode 100644 src/lib/film_state.cc create mode 100644 src/lib/film_state.h create mode 100644 src/lib/filter.cc create mode 100644 src/lib/filter.h create mode 100644 src/lib/format.cc create mode 100644 src/lib/format.h create mode 100644 src/lib/image.cc create mode 100644 src/lib/image.h create mode 100644 src/lib/imagemagick_decoder.cc create mode 100644 src/lib/imagemagick_decoder.h create mode 100644 src/lib/j2k_still_encoder.cc create mode 100644 src/lib/j2k_still_encoder.h create mode 100644 src/lib/j2k_wav_encoder.cc create mode 100644 src/lib/j2k_wav_encoder.h create mode 100644 src/lib/job.cc create mode 100644 src/lib/job.h create mode 100644 src/lib/job_manager.cc create mode 100644 src/lib/job_manager.h create mode 100644 src/lib/log.cc create mode 100644 src/lib/log.h create mode 100644 src/lib/lut.h create mode 100644 src/lib/make_dcp_job.cc create mode 100644 src/lib/make_dcp_job.h create mode 100644 src/lib/make_mxf_job.cc create mode 100644 src/lib/make_mxf_job.h create mode 100644 src/lib/options.h create mode 100644 src/lib/player.cc create mode 100644 src/lib/player.h create mode 100644 src/lib/player_manager.cc create mode 100644 src/lib/player_manager.h create mode 100644 src/lib/scaler.cc create mode 100644 src/lib/scaler.h create mode 100644 src/lib/scp_dcp_job.cc create mode 100644 src/lib/scp_dcp_job.h create mode 100644 src/lib/screen.cc create mode 100644 src/lib/screen.h create mode 100644 src/lib/server.cc create mode 100644 src/lib/server.h create mode 100644 src/lib/shell_command_job.cc create mode 100644 src/lib/shell_command_job.h create mode 100644 src/lib/thumbs_job.cc create mode 100644 src/lib/thumbs_job.h create mode 100644 src/lib/tiff_decoder.cc create mode 100644 src/lib/tiff_decoder.h create mode 100644 src/lib/tiff_encoder.cc create mode 100644 src/lib/tiff_encoder.h create mode 100644 src/lib/timer.cc create mode 100644 src/lib/timer.h create mode 100644 src/lib/transcode_job.cc create mode 100644 src/lib/transcode_job.h create mode 100644 src/lib/transcoder.cc create mode 100644 src/lib/transcoder.h create mode 100644 src/lib/trim_action.h create mode 100644 src/lib/util.cc create mode 100644 src/lib/util.h create mode 100644 src/lib/wscript create mode 100644 src/tools/alignomatic.cc create mode 100644 src/tools/dvdomatic.cc create mode 100644 src/tools/fixlengths.cc create mode 100644 src/tools/makedcp.cc create mode 100644 src/tools/playomatic.cc create mode 100755 src/tools/run_film_editor create mode 100644 src/tools/servomatic.cc create mode 100644 src/tools/servomatictest.cc create mode 100644 src/tools/test.cc create mode 100644 src/tools/wscript create mode 100644 src/wscript create mode 100644 test/dvd/VIDEO_TS/VIDEO_TS.BUP create mode 100644 test/dvd/VIDEO_TS/VIDEO_TS.IFO create mode 100644 test/dvd/VIDEO_TS/VIDEO_TS.VOB create mode 100644 test/dvd/VIDEO_TS/VST_01_1.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_01_0.IFO create mode 100644 test/dvd/VIDEO_TS/VTS_01_0.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_01_1.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_02_0.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_02_1.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_02_2.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_02_3.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_02_4.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_03_0.IFO create mode 100644 test/dvd/VIDEO_TS/VTS_03_0.VOB create mode 100644 test/dvd/VIDEO_TS/VTS_03_1.VOB create mode 100644 test/film/log create mode 100644 test/film/metadata create mode 100644 test/long.cc create mode 100644 test/metadata.ref create mode 100644 test/short.cc create mode 100644 test/wscript create mode 100755 waf create mode 100644 wscript diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..d60c31a97 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..d864d8af1 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,90 @@ +2012-07-15 Carl Hetherington + + * Remove code to use `standard' format DCP long names, + as in the wild their use seems to be decreasing, and it + makes the GUI simpler. + + * Fix some bugs with sending to servomatic introduced + in the adjustments to padding. + +2012-07-14 Carl Hetherington + + * Version 0.25 released. + +2012-07-14 Carl Hetherington + + * Various GUI cleanups. + + * Remove player from the GUI for now. + + * Fix hash down the left-hand side of encoded DCPs. + + * Add option to black-out the end of an encode, in order + to remove unwanted frames of video whilst keeping sound. + + * Fixes to copy-to-server. + + * Fix name of 16:9 format. + +2012-07-08 Carl Hetherington + + * Version 0.24 released. + +2012-07-08 Carl Hetherington + + * Add support for generating static DCPs from single + image files. + + * Add option to copy DCP to a remote server (e.g. a TMS) + via SCP. + + * Auto-update thumbs when content changes. + +2012-06-10 Carl Hetherington + + * Fix up bad padding setup when there isn't any. + + * Restore sound to playomatic; add assert for bad format. + +2012-05-26 Carl Hetherington + + * Fix crash on attempting to use a non-existant filter. + + * src/lib/filter.cc: Fix typo in filter name. + + * Allow configuration of the reference scalers and filters in A/B mode. + + * Fix identification of formats in metadata. + +2012-05-26 Carl Hetherington + + * Version 0.23 released. + +2012-05-28 Carl Hetherington + + * src/lib/player_manager.cc: possible fix to crash when stopping + playback. + + * Fix crash in A/B mode. + +2012-05-26 Carl Hetherington + + * Version 0.21 released. + +2012-05-25 Carl Hetherington + + * Add option to delay audio with respect to video. + + * src/tools/fixlengths.cc: add a few more options. + +2012-05-22 Carl Hetherington + + * src/tools/dvdomatic.cc: fix website address. + + * test: fix up a few test bits. + + * README: very brief introduction to a few things. + +2012-05-22 Carl Hetherington + + * Version 0.20 released. diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 000000000..8efb70662 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,1716 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = DVD-o-matic + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = build/doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src doc/mainpage.txt + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/README b/README new file mode 100644 index 000000000..26b857be1 --- /dev/null +++ b/README @@ -0,0 +1,82 @@ +dvd-o-matic +----------- + +Hello! + + +Building +-------- + +./waf configure +./waf +sudo ./waf install + + +Dependencies +------------ + +You will need these libraries: + + FFmpeg + libtiff + boost thread and filesystem + libopenjpeg + +and also the command line tools: + + opendcp_mxf and opendcp_xml (from OpenDCP http://code.google.com/p/opendcp/) + vobcopy (if you want to rip DVDs straight into DVD-o-matic) + + +In a nutshell +------------- + +The `dvdomatic' program is a GTK front-end which is probably easiest +to use. It will create a directory for a particular project, and write +its data to that directory. The basic approach is: + +"File->New"; specify a directory. +Choose "Jobs->Copy from DVD" to read a DVD from your drive, if you have one. +Fill in the fields in the window (most importantly the `content' field: + specify your video, and the `Name' field: give your project [and hence DCP] + a name.) +Move the slider to see thumbnails; adjust crop if necessary. +Click "Make DCP" and go and make a really strong cup of tea. +The DCP will be written to the project's directory; copy this to your + media server and ingest. + +The `Format' field dictates what size your image will be: + +- 4:3 within Flat: 1.33:1 images inside a flat (1.85:1) frame; play + back using the DCI 1.85 / DCI Flat preset on your projector. +- Academy: 1.37:1; play using DCI 1.37 if you have such a thing. +- 16:9 within Flat: 1.78:1 images inside a 1.85:1 frame. +- Flat: 1.85:1 images to the DCI spec. +- Scope: 2.39:1 images to the DCI spec. + + + +Server/client +------------- + +Running the `servomatic' program on a remote machine will make it +listen on port 6192 (by default) and process requests from a dvdomatic +instance. This has been written with no thought to security, so don't +do it over the public internet! The connection will probably need to +be 1 Gb/s to make it worthwhile. + +To tell the client about available servers you will need to go to +Edit->Preferences and add the server's IP address and the number of +parallel threads that the server should execute (make it equal to the +number of CPUs or cores). + + + +Problems +-------- + +Email me at cth@carlh.net in the first instance. + + +Carl Hetherington +July 2012 diff --git a/TODO b/TODO new file mode 100644 index 000000000..042b761f8 --- /dev/null +++ b/TODO @@ -0,0 +1,108 @@ +Don't start without opendcp tools on path +Sort out fight between Job::status and overridden versions; a bit ugly +Format name in ~/.dvdomatic screws up with spaces; use ID or something +Thumbnails are poorly named +x-thread signaller +Restartable jobs somehow +More logging +Nice error when trying to thumbnail with no content. +Destroy _buffer_src_context / _buffer_sink_context +Don't start later jobs when one breaks. +Compute time remaining based on more recent information. +Start frame later than ... error? +Use lexical_cast more +Do deps better + +options summary + +1: L +2: R +3: C +4: Lfe +5: Ls +6: Rs + +City Screen + +Screen 1: "1.37" masking preset, projector only has DCI 133 preset. + +With 1480x1080 alignment in DCI 133: bottom you see purple, yellow; top purple; left and right no lines +With 1480x1080 alignment in DCI Flat: outside masks, but you see bottom purple, yellow; left/right all; top purple + + +Screen 2: no real masking preset, projector has DCI 133 and DCI 137 + +1480x1080, DCI 133 +L yellow purple +R none +B purple +T none +1480x1080, DCI 137 +L all +R all but blue +T purple +B purple + + +Screen 3: projector has DCI 1.38 + +1480x1080 +L, R, T none +B purple + yellow + + +films-0.6: Dolby Countdown looks as though it's 3D. THX Terminator 2 fucked +(these on default settings) +fq/gradfun --- no obvious effect +hqdn3d --- pretty good denoising +ow --- no obvious effect +tn --- interesting; much noise reduction, bad artefacts on movement, colour tint even in black +unsharp --- worse + +Benchmark SWS options: lanczos ? +hqdn3d=0:0:6 ? (turn off chroma/luma blurring) + +Lanczos; no visible effect on Ghostbusters. + + +THX_Monster with master Intel Core 2 Duo E4600 (2.4GHz), slave Intel Core i3 M350 (2.27GHz) +1920 x 1080 original -> DCI Flat +240 frames + +[Gbit: gigabit ethernet rather than 100Mbit] +[im-mod: after modification to memcpy RGB data then to RGB -> XYZ in the encode thread +[hack1]: after modification to pass YUV and to swscale in the encode thread (includes im-mod) +[hack2]: modified hack1 + Time Seconds FPS Speedup relative to 1 local +1 local: 20m57 1257 0.19 x 1 +2 local: 11m24 684 0.35 x 1.84 +2 local [im-mod]: 13m13 +2 local + 1 slave: 6m34 394 0.61 x 3.19 +2 local + 2 slave: 5m13 313 0.77 x 4.02 +2 local + 4 slave: 5m05 303 0.79 x 4.15 +2 local + 4 slave [Gbit]: 2m50 170 1.41 x 7.39 +2 local + 4 slave [Gbit,im-mod]:2m33 +2 local + 4 slave [Gbit,hack1]: 3m20 +2 local + 4 slave [Gbit,hack2]: 2m22 +1 local + 8 slave [Gbit]: 2m28 148 1.62 x 8.49 +2 local + 8 slave [Gbit]: 2m41 161 1.49 x 7.81 +2 local + 8 slave [Gbit,im-mod]:2m35 + + + +Just encode 52s +Encode + Image create 1m27 +Encode + Image create (memcpy, not convert) 53s. + +THX_Monster with master Intel Core i3 M350 (2.27GHz), slave Intel Core 2 Duo E4600 (2.4GHz) +1920 x 1080 original -> DCI Flat +240 frames + + +4 local: 2m45 +4 local [im-mod]: 2m53 +4 local + 2 slave [Gbit]: 2m22 +4 local + 4 slave [Gbit]: 2m21 +4 local + 4 slave [Gbit,in-mod]:2m21 + + diff --git a/doc/mainpage.txt b/doc/mainpage.txt new file mode 100644 index 000000000..a944238bf --- /dev/null +++ b/doc/mainpage.txt @@ -0,0 +1,37 @@ +/** @mainpage DVD-o-matic + * + * DVD-o-matic is a tool to create digital cinema packages (DCPs) from + * video files, or from sets of TIFF image files. It is written in C++ + * and distributed under the GPL. + * + * Video files are decoded using FFmpeg (http://ffmpeg.org), so any video + * supported by FFmpeg should be usable with DVD-o-matic. Most testing has, however, + * happened with files from DVD. DVD-o-matic's output has been tested on Christie + * digital projectors with Doremi servers. + * + * DVD-o-matic allows you to crop black borders from movies, scale them to the correct + * aspect ratio and apply FFmpeg filters. The time-consuming encoding of JPEG2000 files + * can be parallelised amongst any number of processors on the local host and any number + * of servers over a network. + * + * Portions of DVD-o-matic are based on OpenDCP (http://code.google.com/p/opendcp), + * written by Terrence Meiczinger, and two of OpenDCP's command-line tools are called + * by DVD-o-matic. + * + * DVD-o-matic uses libopenjpeg (http://code.google.com/p/openjpeg/) for JPEG2000 encoding + * and libsndfile (http://www.mega-nerd.com/libsndfile/) for WAV file manipulation. It + * also makes heavy use of the boost libraries (http://www.boost.org/). libtiff + * (http://www.libtiff.org/) is used for TIFF encoding and decoding, and the GUI is + * built using GTK (http://www.gtk.org/) and GTKMM (http://www.gtkmm.org). It also uses libmhash (http://mhash.sourceforge.net/) + * for debugging purposes. + * + * Thanks are due to the authors and communities of all DVD-o-matic's dependencies. + * + * DVD-o-matic is distributed in the hope that there are still cinemas with projectionists + * who might want to use it. As Mark Kermode says, "if it doesn't have a projectionist + * it's not a cinema - it's a sweetshop with a video-screen." + * + * Email correspondance is welcome to cth@carlh.net + * + * More details can be found at http://carlh.net/dvdomatic + */ diff --git a/dvdomatic.desktop.in b/dvdomatic.desktop.in new file mode 100644 index 000000000..65067eb3b --- /dev/null +++ b/dvdomatic.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Exec=@PREFIX@/bin/dvdomatic +Name=DVD-o-matic +Icon=dvdomatic +Comment=DCP generator +Categories=AudioVideo;Video diff --git a/icons/128x128/dvdomatic.png b/icons/128x128/dvdomatic.png new file mode 100644 index 0000000000000000000000000000000000000000..9936b39af56fe8675d42b2c4184b81dc95ce726f GIT binary patch literal 18365 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 AegFUf literal 0 HcmV?d00001 diff --git a/icons/22x22/dvdomatic.png b/icons/22x22/dvdomatic.png new file mode 100644 index 0000000000000000000000000000000000000000..dddb86298a32be485e5927fbad36f2f5b4f99543 GIT binary patch literal 994 zcmV<810DQ{P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye| z0Shq=TZ)PR00Ux4L_t(I%k7oVj#On3#eemE-@UiHZ}%WW)59Q9z@V80B#`(g>cR)` zolIP~@&SATpTG@^F^-@nVj_Yeiu`E?We|puVH)~&-><4%^duS*7w$QWN-C+G#i?_u z;05*}pMLz2*D)j7@X2SNb9d`L;DG#V?D_sV5{ZOzh4;>$;90D>{9r;t0<&quWOthf z4|i~6!LumOk^cugpyq6R_bo^uuDn80Zz&>FRis~6%ywIjkNT_(2lTof%A%kw3Ze*4 zn+DZ@2uzz9E`jMRbM@{s3>XeacoH55CqY7DNw+^>G(60s-95V9#D^cePfQge;4Zi; zMuEGb?wAXv%5?7BI)9bP4;XK50?;W-)Evx!2m#b1 zW*KoX0#3jI^^AmwDXd@E0D&+(MskD@BC#we%fz%*QVgbP_-+I&=@N@an54xN_|mvI}m)l^b`se)A4bn;Da4&Qh-;t1_F- zDO16uX;|v_P*#D&+vnaTcL!YjZHt5%^XZh`C-=F1dklct!d~LWbT+3*ks!kF4|iEz zt{La~+x`srs{onxjPKY9ejIJz<-g-Di& zVsUkJ|+oDZl+8oj~I`~hzq6*-w)~@g5WinMhpiR z6h%#N7v^oID7HZ}8{e$sZiMAkl1M<@5gaqe#F@8wv1!k^l#A4bOz?JFPlx&ZsKcKrN#x%(FAu z+eLtLXWpV59OldGH%KCoXDvH_?QmPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye| z0S6VG?IBkH00vV@L_t(o!|j*Lk`>1hhQG|J>h5!9h8Y;dB|yS}9b;q*WD6;@BK&9$ zFZ>#Q0B^Lj!-^oJFkwq!1+tKkEO8lOKmrB^X3m*&>8{H3qK~nJByYVix$3T{&dR?s z|NOJzx&6PJ{Ps7$_BD0t3W8_;eEBne_xranb3`1F@A>S9*1u<`gNQ;n$l)XFT=>OL z&}JX++Aa@f+-5%h`AfvSrJL_-^34s`e)s+FV z0C;F$;_!hrmWCCBxp-wcfPud6@QvX(SSKUDin(10-}lmRtkbVtw}>rQOv=tU5{7t+M7N%()6od>n2$fc@+|_F0*>JQMzR@AT{D@rq!hV+cbn74 z)=*W}_pdUZv>Z8fgumZ-06-}q?%=}i&SNh9?Is}jU>~x!j;a~K9WRFEOxMj9SrUW* z=HQA1A;!RE;t2urB0F4FCJrO{3R;FkB+RdGbyMjg7fbCm&sjA9bs4ryHkit zUxeaR^%6&qt|AIwPg}ZB5zU=kGJ|GF3d-4^zrx#pxeU^Gf{N45#$@ZbcI`TWK=uMST?SmxplqBx4g{74%ecRQc~4pBd0)&qynYA-URZ}* zoF|h^OgrGlcxRVCz57R00$sfZs|Sc73Z9+Pc33;&{{64XUY_b%&OMLaBO?9{E^A+0 z60rV;3EGF_zNjH7=r_8ml|pXkeV?&HsEueYL=n^tv`31AFFIk@c8FWwWXy4?K&^Ko z1_V?cb3?`nHTy+z=ddrMM&BQCum-DaDx1GQ|pru)MO$g>$blTwdn=TaWnXlSjm$ z2}ChEyc9}SP@o9QP2m2{gsay#sjAfLx&~qdH&BgqrA0((yE*QGwshpKV6M#D%%pSL zy&-L9L>nRR2Xe)cJt_By8u1g_oQLbOnd;|NwVxi~pz za_L2%`)LKBSudxeB0 zmRD9ezp+8xG<_VO pvkt0eiBLl*@%ewrbNk=hzW^<$j&%mtq*4F?002ovPDHLkV1hc4HSqud literal 0 HcmV?d00001 diff --git a/icons/48x48/dvdomatic.png b/icons/48x48/dvdomatic.png new file mode 100644 index 0000000000000000000000000000000000000000..07bf2d10bc07fae74df0d078d76697aa0f381ea1 GIT binary patch literal 3407 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 literal 0 HcmV?d00001 diff --git a/icons/64x64/dvdomatic.png b/icons/64x64/dvdomatic.png new file mode 100644 index 0000000000000000000000000000000000000000..35564a8a24805130a56b29569f1a673091654c64 GIT binary patch literal 5421 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 + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/finish.jpg b/icons/finish.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bfc27ab41d01a7ee0c6aa2c501673acdd3eb2af GIT binary patch literal 770512 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�QH1aVFQ64=2Ia-py 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

=@9x##q9|>tSf4^i_ETqk!PB^|lU0 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

K%3lhrGF!gG$SX_tfh~?viUriC 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⁣hc`uMBHGs#+al$?!B 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�Ka7}jHQm-oNZ; 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

r9CZN#29NU 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

m*2a1UL1SX&iO!KI?ocQHaD-LPi6b0 z+~ix7@6Pf>HGmL6;B((L6|Dc3;S!cOfi->al<2Ebioc@7Xcz2bVg<_tQQmkZW%ylB zpcGGgOBRcK_>}K4^xOPBFA>nxAnwZiL{hg&0t`K$eG+zcj6$*OV?1Qvn z=5Q`;0RL(e@55#(xbvIa;7|zjDFV1uglP&ixx|6=_q;wPApD}>_2bFm`RI8P`@IT) z<2lFiiK8x-MI$;V>ACj8=6C_hh)6Qd^h?C&oy_|CCUnXCm&tTT(@o=dA-gV0B-|ru z=udB)(Xq;WCIXb7)X*2Y1AS80El4%@>ATkrna0eJ4yT%>8*qubc)AoLRhOC1(;A&c z`!$UIN~v9ldf0u`1#)ekFE?1Y@F$_{Rgmtq3Z%7qcOjQnQfhWl9@5SAWLQhNEI7OA zzcy|bDdj&1KQMF^df>OSP1_SS4}b26`*bZJvYpc&eT8whgh!P@uVft2(ExN5%)!01|9|HR9hc z370x|>Zso1t#Fl*olBS5`h*Y5NiyM0&zow^O$^tmTJYDfW~X!BK`LZRk6MReP&UN? z0^NZrUPbMFe(c*9GOg)5f3HohFZe$z$bKs9so}bEd2K$&`4jX-ELML@M}u7l1oQ`v zA36A=f42$Rd@$i*I@zAd*Xp)VdpED1Xu*&-E3Ur)!LjXwW618tE1u) z@hvj+bqpL+MRKh-3$Wfuq`B8ko8Y%LLnbX>H&SZeDr*%?gER$Prv%xL2CZ*)zo!H z_}N?dTFzjB++<nul^}n+|yi-3%j9lpz4VU4YPjK+u z^!qJ4ZgOJ4G^~BF`f8bEdm7Wmu9w&jv57x&3lZ*__D+9TFIcHosCcLIzTGXX!Ne_ICOZL!XsIpXm@BU`a{We6z?@u~D?|2@;8 z!}W|699sI8{^;5);bY#y?E?p%lJJKw5(h_vfOyArq!{BX2}gC_P$kNP8efdIc%(xAG^y4rTEK^n=31QJ6jU)WJtERXq<1H^&O=C<7XRuC!SKpLlzCL zfg!uAd?c6DqDI8<X_SHVi%IUIlz zxyFyW`xGL0TCVX$FqGGuUSBluCz_{LcgDBtw46lK)KVsjtdbjo->&gPGI{j}m!)CA zbp%#&h~=K7?*hFiB(uqng3!I2sR~ElvX<@s(^0kU*h(&KRte1-@DOkH#WTx%!m3X6 zkGjku(M)tSb$72=JWsWGGoYOIo^JS>{Q?b_?%O@C?kK^x)?joembI$ap$=7z9fl90 zHf1o$M$0ie8*t2rW)OwGI;wn_b!WMQC$Zv|_fGkGXOyu#lLbI-Gkr&U_lWaHP_MX5 z+&V*yV0U?zUS_{cwfx6ph3Ykik}8--f@zejMC@h(N_}KqcVBITI9e$0YNRSz>S6wj z8nb76xTM-)^wd)=$?bl2YF?cBTB9uI0aKSXu%NGWkQyO-pzQ-1^6|kk*;ue(xp-CB+WCMb&9;FzTEA?MvUxxP!>(!t>wcnNdmb`5+5B2D} zqC%y^n^#G*L_EV{L#jh>%uiWOY$aY7H@c)m`*axSSNTS<&k49QHZ(ZJ_MsiRzc~}5 z2v;6PxTp_vF*^QMe^yv9N{S2U9q8XA+nU((sDk}v^-TTLcTd#BF*~l~lu}hBS_yMzy5z=9k1`wCP>|V}u#6v@LDFFe8*)dh$Pj zod6M6B~lr#qa!IxhQ4!dL~c@3e^1`W0~VN!5niq6M8_|49`UGkY!CKg%2!s7iXn6b zl3C?AZ+^+~7O;`CyWaAv*BSlr^nI^yXgt;TOp4abft5+h4lvIZ{Cl%Ls;7>d3h<|h z=1FdK{14DRfi+}L{rwTo(ORA>#&JoxS>YJF6|gheaY;Oh69m{yEO-uUzR8~Ez|y_I z_C9U#`<2W-O{(Z&;hko0|E88aHrFsl!@-P?ejUOi}xJ_TOA02YvU)mhe7Pt)HNX-GtfPZk*O%{QYLka#SaY*Uz{Ws3LhJ(<-CF7 zRiE|MsN;u?@1m+=8B)&@dmmLP#pQ^r5$Kq&rCgaOoIqIV=(1_D#4hzZ!6L5{>6|gG z+(iuKVd+H5po;wjk-$2@w>NATydl|U%RijID#;cca9oz9HmbWYk>&e|-rqB3;5?Dc z7p>LLR`qmX&oCh3xfulk3vM!!x}dOj+^<}-wiE~1V{C|As|IB!?WucTCgU99k!UW zXk_(lxcjZ;d=!?`hs`Rbp#4LH!a^F|qxT5hq;gg&0ZAd*=caA&+!zohz}R1aHBiYY z4kKk*213TQEB0AV#x<~;na9Ex1k0}OGd=q-GyK{G?Zrm3dtvzpOw+^Ky#pY)*w)(g9Yu`8tx-jUi}Fp-lG{R>+Gm z)%A&*rmyZqis!fA9}VfQL`~Fje2O>Xi+CU+=WX`j^2RS3tJkLLycz<7^?iSabwN|F))pW5FA`ewykJL<(88|;{i*CLk(0unF4L`C(Vqn_dMXN?^ z9NV3789d-h4ZM~aESD1YtNipW8k7&a;zJ+M7b;wt(SCeQGDFtB zLKL>;3EEu)F=dw?HAbH&qcEvWnJJjr^Q%Ti(mAIvyO4y9CLw6Sf410GS0UXAgpRmF z34znZOUGGqh`@}osSTmzoa!TV)!qRkTTV-LWZ$yG$@M8~`3M~j4n4U2^Tu}gTubSy z9Gt7o9ln?7Hgk&-0NhexiW84u@S$yZzC7d9>6skoU@ z!(K^QpZ!m!hn%lA5ErH!{G&^pjcTJ^(i9ZlZ?VTEm|?0<$twNQLVyxmnvwB;D4WIH zbxRsENU7^JwZQf<=UW$N#82a|2hd}dMhQ%kbmd`*$1$9|uL1&q-E)Ghm?6!!F3#Rq zIHbdQ@XX<*?@gX7O5*-KceQ#s2Vd*;()&P|(bn z5l;rJrm`lrfKNx%^}C7ucWtLT?HJNuf+w<1qguv(UVR}eqwLOHr&2);|ITa_E~T_! z|L3c4mB7eLOva6l;%DT$vj~R6~Y|yzd2P@XUd)AK(f6WGR zaq*?kP%-{6IgXZ3T3JawFyaQLQQy$Ci1JpQC5Apy11+-MI{!}O*X>h;<`wWOb@oKF z=yeQHxdXlN=+d}h@T~eOv)Mr^ZA!UJ23(|1q;SWoZ>01a+{|>MM!~R6wYTF6|E|ZH z2d<@?zM6v%ajbzz+FzkjttHHw`xYOiJ@#axJ3d^&p-tshyYFg1FcGR_-B*OT_V4rpfb1 z6J##Q+tSxY$pT1#xv2U^9j8LZJJO$20(&6cx7bv_<6mDHc-3`|>!}tDn)dDBt)xy) zHExAImx7HTm)vzv?rS^NO9X0YNDT=iFtZWl9*vLg_wtdc>EGpKlo+O{i@oIveIKINQD2HM z>h6n4?rmeP(>gGOX$6sG`_OpQ0U;@N?8avt;)$zTVC6Tpr;rn#kdz@@IwkV> zL)n`!8}geJ4bGAVOnBWJM?@D(8N)3;n(V%c*TY`F7XxfV8b+Fs-XAZcmh1s5N!~x3 z#KeozR$vqf{1Tn%qsW&>H!O9k)hN#d{8O&@WmPv=n*Fln9HT0745CjKOa9Nzx$^= z^``=|Pw~z(viRKfL1W+OW1^q@f)czbyjz^@c)je%0oZSIqJD4yPrP*)OVKsvnaEFB zRjJ#Be{?4?p_4@cDEL_gPR2tG^!di+PN#L|u18YnKZik{NuMw^qH;E|qc{V9IE-H_ z-CX@)&-rt$8(#ashtDsnL%MeKHaQ-++|_@>Y#wTqJ3z*?F)WRP8Y#4mHL)`xcr{91 z!3hVg50=&cgca)0On6!*7tGFHWR48^-p$d&&#e5Ftphg7n{sOTP`ndpmY(4J4C#3Z z^k{8oyj*A~58#5uSbQp+p(2i7A-*m0F1Jp{ud;1meBAMqS1)hCq!{mJn-=AT99K%X zbmQs6h!Yt(!^jbu%a|u)=9sTGtjQV1S9kXlH|psoqfwDAzMWS?W8E7h*sI)>SdkPAF?v@L$Pc6GbTeC@BYRC$ zX{Y&dMMxZwvSEg`mnaG!uc1Y1s`~WJI@9Y!#AM%E`F~ACyd%;Rqtx{-wcQgv) z{VCvD!{NstoJwC+l>PkeE4p;;NyRtytc)883Q3rwa5xK|72ajF}&kyn4>>ZEgr!$AFM}23@Bv4vK4w7@$T#A0Nn+JGU(d2mT7Po@Bn%GjOn@=RdX5v6BuL zpJlq9YVEw&QeQY2oK-tkk5pht?h1J&vT)=sn6)sptAG!iOjqz!4_|%6`?@8(ZYF!F zq`uE~mIk-@&Gz`Bd-Z$h>J3~YASIZy*oF;qZyGqUWhpBf;I1}Yc&ey!?MYrRJ+m@e zu7W|qnUuT2t4fv@a{I2Q{b9LgbL4%*yA|FAJ{;uz%1FljvHgH8{g2G6hWAs4CDq=@ zhq^TfygI~t6pgn|a^!7#Kj;VuwKUf&K8A4j5-0nzb!qTId^Uw=9{f&TI;EwSoLEl# zr)W7(?k?iTKU+?EE4`w{=V9xFuedi@Mwx;py6?JVY3ed=nhs_4jBO^B(7H|+cLzhl z<)=5x36!g!kR_|jVpxIcTc&h&hOR{S^f_h6G5C`RgiS2}gSW<^Pjc||tOw}`sd^`Y zXl+I)A?r$N4zKd;{{T4!yKxhnx7X)7`6xmb{)!{*2di}BuadUXQ?PUw)emkD_omo4 zz6yJtEknAiZB!OV51{-oZ= z{s~V0I)iGha--|nR#Jze`mi5Q{snr65AIZDz8?rv@WJfrl{d_eP#3y%T9RpKpA6$4 z$K~fyRgX3!q*-vtv$3vgWlh&k73KKtBL>TiBtPOaxAf)LrfHP7fLAmd zy293Mi)Ck5|MA%!!}*US94&@Ab93>$d4eZ4+>1{YzMT8A@SrHa&~U#C?yGHKg0I?k zBPTePIRAbc61`-`_u{<`pz9?NLqIUh1ZajP|$9vhymr^Xo-cD zuZ#7!FA+{Wpye8OxX#Q4%d;h?RMaV2`FJKzI#jpD#K%X3(P3j?m#s#UFOF@nMp!_s zN1vV+5HP^@BmmCJWIh+R1Hop-;`gF%N}Wn{J^G}+FzqM1;}&dwi*I(Vnx8ftc(jQg zghb~VyH1`JtF!sTz*Q5N%#Ae1*)m92X=*Ti9^@{FTW=fc@hye<=0ZioVkrreZ)cZ* zT*6eylHmyjLXL0>n2eVyILf`mgmis|LP@b!u z3?H=W@z*x5Q;HAI>{0$PY}--5<<@T=iO59oFTnwLe6MIDs1sEGI$@aSQf zutaJI1B`EniWW6{F-=oE$C^7FMsd9h%}>!4-A6q`-jpegjKAwc;rXBx{Er*GZW?t% zMFMPiM>j1>&4uejnMF6A=uXzpf?04osgOn)PH5~wqiZS|HG_!>j#Q?&$3WCY z+bdwkg__BzWmQpU>98dl;Smz+?lSyb$ zc@|>_%qO5&SXW+krS3Ln6twD|pTp;r{Xf8urOf$jvcsBCa0IkAT6}cT@|OjIwIN9B zrwKu*iXVbGsj84xtwnV)+685%62iuLJ`q=d?K?<&N#H6z(kPLVjc~qdrq_~h*gEY> z_rj%Ab_+fiL+ED?I^h*glVSoa5p4urxw+>vDJqIsC!c`~%oQVRF^5||)=BiCh3$J* ziN5dB+xX~nh5&#_TQHON?8~zv{meCCTPw|~J*!;8gGjgwG(*TG(lza=@|w?@!&-#5 zNEfM#SuDb+r66Pnb@QEzZPFWUw3R|@)CRcA%QAb=@?=D{PI}O5z)|RORQD=-Aaj?J z7XjsjpNM-b3{y@~t+$V!;3LyIQefuhFR2ch%$N;uwHk}j@_+J6xT!LTZpLyEvm5sK(6#5IrZ>Onj1s^HM| zw)?3Bnmq0kXH4l~6k}uTH;`uxYg#;5Z$P_Bi#p75R>zxFn;loS0cI6>A&zfPyE0a_ zEd>?%*ugQ8CKYbX;AG>s?+tSCqt%2_3MjKXh!zuJi{fITlb-eX!$K@>-~b_h*IynB zZK#*E$F9Bjv(SvhtcHd4KYsj1LDo)H!rv`Sp$h!2p9Rhs!F5<3Z;#)_<0rQ*mzT8AFkNj1T!Ff>x@uniiVzlEdES;Psj=+552 z$4pzy?^u7QLA*EAdybFGQE*&JVvMo1nb?n}^MdfwDHPulsZ^pI-6$iU_)&`7&qOVr zFy4PR$STI9^I!)>Gv^&1>i?YMHT#es@%*#uI5*!NK{RuS1mw!tZ#Ju1yi(iaquA+5 z@8RdHgD2|S=z~j2*A$P&JevbW{(h;EGDA2Axvv1E>BciG8xkzk!O#v?RR;nsUlt3_ zWp~KjnySx_dp$q6=%mf`LUD$bX7uwFELQ;FiCu7JNh8t9|1d!9o{LgrOUvgNS&7P+TOyMvnoD06srWENQzfY z&9~vII=MJMBa>^u*p%aXMXs9)D}q^{rKKOyzywgTv;;FP!L?XoX7$AwYdeRyZo#yA zvFgv&WrxOzoN9BTKNuWlX(sA3d%LhZ)IOb$KqK^Sg<)5~f!q9cPYU>~r_zvO?#V-T zxu?@+am15_11paoNyML-J0>J6q?Asq$!-SVp$|Lbzko5_wD0D$3ZI9217_66#v6r@ zAk@iZ&RGs>-b*FvM#F&&p=Xto=Sgae67v=!M=t~@Rmv}c?%KHD_ICQ=`JY;=S)cXu#!zG94*Qh$M%rXUC z)Q0eZtIj06bk$E*$ok{gAawt>`qitfoe-P$GWnnJ0ccQoH}PLUZNUpRrm$5jshD7< z)j)5^BWyfspYlff+IUV!Gh^hku^+znZWMFXh^^}psBOhgY*ue@=|^O%eL6mX!q2l> zV3(ni(K(Oc6XfAuEW=n_UZQ=q?~K{hbz-*VHPS8ju?n%Nj)Nlx4;#jVnnZ>3Qh_2R zAwkdq29i|&_w4h2KsB|vVE_`wN$AWc!e$j){|O5PN*T>({aR=Q%;7M5s zUs_7FdBsV6NUIuJxa@ni5M?;x_bu-j8&Q@DhNBFry#W@TO`XDOdSC-5mk==}cDAKe z$Eno~R`7+lo;l~R;gh>?yxyA5xVgFG+r9T9nkh<))zo2&@HrbnBaP2U%PgyuRnpz7*?fg3q zwriFM0sXZQAas?Zt7@zDH&>k~^xL2tv%4u|b>(O6JfX$t^lj6Px!B9Mk2r#o;x zD2+CVTO=TQ7+>g=S!cP+>Qg_cjZBm)qAMN;QMwo(Xg?JpR`wvaOY)n7FKId$+1{4- z_PbP%-c{WoX>aBAW71Pv>f0{q#1u=xZ#z#G7}1Fep70H=8AX=IfD2xO`wX(~od}pl z@<0#r?=VXME6aql(%_VG^pYA(9o*;$HDVhsQ2f#;>8~*AI8K`)UEN7~<$e`7u#h?1 zLc_bvMz)stdk;_@6^SdA?i1rRjeOlJTZ^^#nZTi3-qj8n>Kkt!SIipc_?q(enBP}j z3g}bU!2)jHKkn^9g?W~RC{h3^+R%y_paFl@<+w*WUDdkNmTl>KmW=LD*|B4?e<&vt z#(tRQ`+*#|Qk^n1Xe~P3xk+nI-E$|=EfjkX2G8Y9#|H$deR)X4r`67qL*>o}ib+ok-?(tax7 ze}KnR9U~w_mK4Hv|8a@cVDc~ieP&*YC_w3-+m4|abu2h-{p%+^VHZ9!@O zcM2fM;2n*UPD_}-AO8*hiuO`>%`I&2GmpNJ)sLIX1sMyDf4rtXa?6TGb(|CXxFDZ% z-(Ws9jJKb@DDneo_W^^u=tP%HLD@Wx0P?T^BwxCkIRPX?skA4l)PHPz;}o~bd0eaO z#}qN@{lYWEU52OXCM~X$JBJHnpE~??b=$zX>1N?P$svGj+})3If*te3=zM<(fUOgU z`FytyoG-Q{9A|`bs$amhJ|hqzq>XH{+(ZmxQ!oI6GzzIl+<}Lm9=l3D0p)3 zrLmBYV5nP#jSKniONEUsv-ZWG^UnVbL3;qvcub6@m4fGzuZ70axX#_6)z|f56Cw+j zHFGbA<>w8_jhXmA*87=lfg1&*L9vTvwu5y^?$b+<>78avQ@AOwtx3Dne>e;QC#&cM zP(-I*Ba9aA9JIqR>3HCtdE6^2yiP*?_8+)RP-sw@n-Gwn@1zo8bS5{rnV7W!)-Bgz z=uXkbpxB4|2A5JW@Zu~;Y|#Ux==JJG)u{uFooNTd4|8OOVUO#(y`7}!XffN+qyYTg zDEGmW>OhcH68Gl?b{d4buv9D7oQ6O_0sf+sa#4CI$YUYAjN9+u37AI43CL zdKWy-_q?59GHjrSPdtr#HA-E)2|e?t4XS9x^F~kTjOPR=u(un5&K0VEx>EHjx*w&+ zN#O2u9^^ir_j22{iTJkaMOVV7K5y>m$C^2R29~-Tv8DlQ-K4dIn6HyvZ$a;9?GWyt2D`0Tjia%W!KWxysg&lgW9 ziIpn(t-MSu2-z#!3fJ=2j@b4pmC#HX4mzpc5geqW%HO6+VNtl2l;R|NOY=NG)p}t{ z?p+joUmM*oDkRYLOv;r(jv4iV*d+g?YqYp>W6il>-m#7e*}g@oQ(k4Sod2}=0tlz$ zzz32U()6qZ7F&`tK093Xddy@y$VW?fw!(Sv;Qu$3T}gg@bS3rv@!ralVT8~Rz4B_k z_a;8}CNI|MIjx0kQmT1v*f&UFHvF1xr`m>6LqiqXnm}tgTg+iw<&TP|3tI>Ys`+3G z%|bypuyWhc;cVYcVWRx8_~b3WlJ&3#ugS|jJwgGzBFRZi%e{5-M)qq<82yA#(jdCA z-&09)TPAK9zMAq<4%vU9wI5HHaHtmp-EM3o$?$jxR=Wll|9967-;gSR;6N7l1K6|&Rf?3Q3=g+3=O@=QRDW=)>$LdH#=X(GKU3!EX~+NR z5&pECg@^~neiiNVE_iI{>QqO84g&o+mC_NQNatcA`x*Jg4--LV8Ubj3Zzv_P%Uy-3 z&L5lcnQcX}DZOXYP(Hb$-ZMEG!)9dT*h*QYQ^tybb^k{GJ@r+VA}p&`^L>V8OL}y!N(2u}~&v2?m12t0XgJ z#2d@@^ild2yp6rG!*8~i(XBK`Vb&G?0p@LQwQ#?On#McGdL)T;U_^}1>`zH%aHpWI zm6KSaGYu=lu@e1vzid(~Eu@>)6Bx>Sj@7-LR@vgZf6UX$`^{e<^y*xzIuZ*99gm2X z_cQZbPNqzzw+qZ&OwcV;%ry?aU_$Nzo!CKeYL;X+P_`vkd6nP z)DPjN2K}&RTU7-0-Ux4~0PzvtdW}gh>gkCJt2v>0s?*w7`m?w4YwbpZY$^*+O}2HK z@l^hj@6uFS^VFTirIG2^Q}{i*?mp#f^Tysd5c`!(l&nv>j{YNwbV{h=by8`avL^IW z>NsH#!WlYYm9)vZ7iINL^|l6%RCH?vK9Zu)C$di=8)TOrfi#Y0bE?jb!CN)rbb}jP zD2B!b60^2cYmi`N5SICMsCAom>ep5yE-HfOv>OCs69{wC1yulIQ~R@C(FQxUYN17; z1OYF8s-|`9=lba4ABr8_Ol7((3@Il}>(rpa(k^oW4?ii41^M%~T4cgvQb(?u^%&c6 zA&1cySt9VhZ;8T@O@QE+tyx7sU7ejPW9&(5Sws!5CuTF=)Qm4dZ+<9NygF8KQ$L?Y zvHlaQZhV!b!T?J7Q1{XH4e{?|Mk~eOq{+?Cb*zpuyq8AnP(vbs4F;MBW4)xuVwxJp z4MiOOKn!Sa%gq;L$KQ3xkdV=E;hKuU{O7%7ed!u5VSs`(+f9y9lqO4#M#z}FP8o=qQBMI2t3%Wk4PfzQ3&nKT8_dS}SY03PJ za69%rk{xU)u1INy71eoCML74{2*fod0bk(SUJ7&|zBxmWeAl$yE#$aL!@cg|9;{`p z>!r8dq)#HB^$`Ys#d!2{C+8PX-&zqH)8`Rpm{=2RxlYr!!&`1@AK6GuCvK1mx3Hql zD?2D%WJ*M{o)C$Prsz-~l06KTzRO{F6g_Jqzd@Q*yk-HPOPLe}f4c?#MP`3!x4Ig@ z)JAw)cW2Jj%ca+KN$_~@z4@i|>E+Vg4K{o903<0-FZ~5oyVFh{{f)r0Hu#?f%f)4; zv9QTpF+&Y-C(3s2YsLLAyQE;>S2(p|1xo@up!hN?=xPcSFt0@X$Fn&v zh?q6jTO`lwoMEjRS?}$#o}0g}gAa6UWx&|cIS^9RMr9wfM(zL@1$@U>Wd$ca@X z!BbQyHs2>Tjr>D3MW;m*(D&jmv_8hjo*{bvMimk?-*p#M2M_T2++T~@&44p2<9nDH zqQCMS-V7d?9_SfG`ZPu!hyoiaq3;7(wB?+>4P%8i7-B*n)uTW9Idje*@0cCYidJ~V z)cyqDm5CIyJ22nJ`^qPiXh13BTB7M>w85KG5X}lKlaQLP+PBxwt-0$Cd-pxlX&DsVS4c%ZP>R&? z5sXWUPdhIN=GOFV_EWG6d;PJ6RC{kN(n>9QG3#OUKTv2O54No2up-kO(`v4Xv%k*q zWD-5+`ilQ^%o51|S$_<>7wcN%FE)new#4zgi&CjG2ktq!Na$hxhYc3k-Y0{RuPd~5jRo% zd$NF4=U08m3=*+xk{Ptl@mlz$%Ph~uhtl+BVTttd^fi}@3@#TbH7vf=Q*R^xi?tbc zaiB)i8JjBG8!1BkQx2i+E=ZI3kBW^n;-aCC75xy zRi^DqseU+T&IhnL0n(VQ^*pRwJ0OwDE{uR%L$HPX%?uM;*}kb27WU5Ei-jy}2jwW} zIc8_E2$UDe=RQkBcJ%m`g;_aM<>q3)IHVZK;_1@6$wEi%M`qzy4mQmLy;-QZ;iFD9?s^m%_*zfA=xu*VbA4##UvIA@11_z`4W8*q zcd3PQ9`!|5ZKZRI?~?6hL)oVWv9-FY3*Eo-p95xm+*6_^lU_<4Q9l!{_7$r5mi}cG zm_(NC6X9*r0nETUvqK#w{gkrxlJmRKn_WMxwCH%6FVk%@Iwg}9km%x`BgkBG`%;RO z0yb7&pkcv)4)wAEMIsrp<1;PS{p34Z0sg{6$gs@)9+)5<5% z6F@GLZnCjLc)|75tV-YpY=FX>qqP+_;+=#x%g~6)wfx#fW}`3J*Vd2~9U&RXKdp>Q z8rHqfY`taEQ4zH80=?VEW?J@I{Q}Cfr|CdU|79I>{yJ`#c9`cfQTV$1H9i~FB=5I4 zavb(OZeO6K_wgrt2m)i2D43;6KW@O;=OEw13-V3;OTT*k>R+l~dH8sCtw*AVx9Ck( z?8kBV5~J%^t&|hF?jZwTJBhU0{rSI=n+cGg4p1XRt8`9zwlQdKN-@|UrqfcTy0%z+ znTb!0Pes5i$3oBQx)y$&q}wacKZ}|8&++sxackyG{Y&i}Z(jP(jLTf8EKy%0x8fx% z%Yo79Q^Y2%wBH@H8bibM9StI-982;o&B|qz&Yzz<%k%SB4%e^C)5hBr?@a#bmGx1w zOr1z{a(vkDq>)L#$mOq%MI8d{*=EnbTM%wT{W{7^2aJbM<~Vcf4*eoR$cPFjUAmFm zt~XENJ;+P5K8HMyhZd!2nzZ~f)UM~IQ|14| z!ZV6FC@IEBNJP62_^%QY!u~2K3b8Gnk9|y=7|FJO*F1k3skezvADDK&Tuh3aC}aCb zPYX&F1Q_Yf9IsT>Wo2bI%1$KBRhsFXr9P?Z{?{rqod#^rq={k`0F461{+bh{dx!q* z4B-{v>hsxqJ>`pd#vY@GmV+zeBr%J!4Mq7?n(0+o_yV=8j1ot{q#3T zl9umi^4~huLN&qR#F|3^>C7uqNaE@`$OQ`Ku^bLPoX>8`u6aWJ%~=m=pq~F_!#8IH1M_~VTSbyDdSxUGO_DEVUvKSfv3N3yt!woYuFz~nw-v6 zlJDmKccMw1<6m${E~8_ebx3ur^`K&(A@lF;q!}?+RxXNJKyJ&6GF2^uOpCE zITFOs33{zM2{(;LU3UW%T}#wy*PEmt2np?<)~q^@=kD12-Gl2<*W6=T?|u{78>He$ zCy@9Iix9R@+5pW=o!<)J{h5l*u$y1ch%g14&4f_2pVvF?KOr_k{@CBGG+W>BUTMYV zRNkpzV+Bi-p@uL$P~eTu4&vwRhdt^N>G@$-iK-|r$1tXEL+LwaS&EYC-P(OVtA($R zUOY~Axk9lXX$mwsu~ zjznQ;s+!<(uFe*t?pdu3S(bmiMN~K%5_q}?pOGg0ha@lwOrO!m578_1Xnkp$Nf~KU z)y%0tUh<$D;1yb+UjJF1+lJo*#1_?gmW`eJPP(g8aYc11y$S<+R+o2K0Fu8gTcg-Q z|4QP<&`y@*7n`&Ie=q+QN?=qlD^4f$__WmaK-t9pD$B^Iw^ff*3T`&twwcQG^py!e zR|RtR_u(+NXZ%ZUBPOQD&PAE9m8mA5yxbK&<~kp~Z(b}|mJMEv-<;PYv54WCJcJwF z(C`p9LQs1Q;tddx>Fx4Xm77g$$E*cQxpy;(a@) ziy^up3!~ibF-)OJD2hT9O#*iz}cyz)~K5~Tr4qxEX_U6lNT=Tgg4`7CfHpDA_lc zeW_rQ+d~m)X{m6V!yRV+p0Y@fSplXxejWdshGNkvtdSTMUu#Vq3JTS#TQe%fgRb6V z$GV8)D6l@<+sBRg>Zslhzb~I1V}5~k{|8Wit=L?dvElSTK>D_&o#S=iHM)Ml04S+w z#7A!4*Ug(H&9zNVo26=5*L?VueJc(bR{z?%N>5ww<<+BG!07xm^$@0I4NFLYy@XEe zR9f+e>~6s_yE+Xty2D~$B{dsyi{e6Kbn1S(CB0|n^`Sv%V@IFa0^UC{DflI;l>fhA z6T)z&xVD?7AcumD3EX0SwcLqc7rRhl zhJ{*deL#kUr<_-H0QmvYb6qB{y1FpFmSW57C7CqOn+M`xc7&8R=o9%|PYUqsx zH9j0ttr67rg>8HTK>sdaL|OAA3~5W}Bug{&!Ul6Mvp~40FNY9nuTY-@Q_V>!WFCO&ssXviD92_^K?tp-tezOx3%-F>E^&z=abYLa}ArHWZ>Yn^)w zKEIE@Z>vsQe%FSmGa7pXZvmg`96vfsY-%IpI*`PIM9ckngqjfrkWS0H`Br64oK(id z%=9yNNy{sODlhF#z0P-T^Yk8UNk9lMs-Jtk1jzxIiTPITIcYjs-xVMi?Z>=@U)7Wx zvzF_grXN=LsnY^UQGf?jLeWz`KpWDh_O8(wg83%$=G)fLr2W&&Lw7m5l`b}qlIjHn zy1a~~0G5<4xl1{o0)SU45&g^Ay?Gzs`Sss+ycU$Hv)Ia3Wympjyi9_-j;dE%VUzQf zTeIW3MXzLQ`A2MPm1yGHR}RT{pZnQY9+R)64+1={o{%-_H6Wg);wNrPB7cIFXCQKs z#7A8MKRUn~)-MzI*wyz^ckF{9d+p@?=@-57Y+;_eR^(D@CMZzMqCC-;oc?kC>mU;onF`e+{(}QZr5!^LfI~Sd`~C#g#7QEfc0c+oN=_uwZKJcufN~X3Q5X_5I%=Rd`Q^-}?z~*!p4M~p;pY9J)mJypI^c?f@3p8iq*^eB|7n|LYa%X(q&GMF1T)vUp zOpgF&JdL|7M&66xvgkYL23eLntiHV9N^Z~K!5r_U_jEF>j?Ec2g*-xSoe}{cF08gx zwc5=PZPu=Z?7mAmkOly^=J9gVzK5N@d@!)P&V(q4;1kud6YGt4|HjneU7r8uc}od3 z*iNSN@Nx3ws#uC)(Ay5KBBFae2gb1_H$8<8TvMOvh|(YuH2D=37SboQp?TV&e{3@F zZ+^615zARSH?OKcsUBPP;?z44FSTb(Rd=MtpKl_)7~UXOrfqR5VJTm~JcnDDYfZde zA|2<-%}`mvTfn1KB=4?i^!!o3ab@`dm3D)`Wcq6}^F*x~g;@qa<`DDME07?W!AAKG zwxKocw7udk8q*2u6APC6xZ4Mix{CiZP7&tsUK(=(0$i;6%Mu39Ben}7=sNcWUHQPY z#F;+lZc5kYw8DhWaeShwhsE4ui+gE5G)Z5ibnMHeWPFb=&^<3!8V?Lre;2Rq4&wTm z;JhMg>Q=_#);7L;v<=L6F29H!wNBH@ZQo7UAANT)ZX`4z#o?nsrMAEHaEs80|2vo0 z$Pn-}Pq%3vaM{JoaYY}$ zjkXDAN5va8e+9~#qb98?2pZ957LB2=XM)ymJd9Ptn00(mc*{s#yK)_Z%n zj>#=^@!n>-#KO!ylorgDU8XSpU_Vfjp6dKVwrJXy?9Tsd@|FyZ<4fq zOX~ayAzr-$3;dz&MTpd81&57QQxhwOG>=tEr{-tn$3FmDqi6)2@=p06(;p#&dsZa` z3qEYv~sd(jH(9+c4Hlr|RQ?Xd5h#4GMo<&D4RhgPNeZTGfH+V;%r-v1A2 z^lafG@gUUBs^C9myM*!2UfS3Sl8qqx2$5)YRVdPC`b=ccrel*q>@vch&nmW4^r7w3J*lvL?=|Vi5ijO2PpN#zt6`I2|6JN< zNKao;IhEQ2`_Y&V^LxGd==(jslkz2QA+8S)6` zAC>spVqb>X^voSAryBlX0PwPrhFv%nHT9;X8M!>v>AJ!gug^pe;`9#kd|7$^qFlPl zjmibqt_c*oK0MX)T5rGr*wgQ?h-Par-H2YykG#(eIVIDT`v_jfMUU4MA{J+__?6!N zivPiSlVH+C9x%nEL`W8$N$S5gM;$kG^lTTOp47SuES4d?XOnx_u^p7qO#g?}-Xgul zf^{YN`-{ije^>@ZgF{UUY$X~p-jos$$qNcSr3yY$M6PcSF3nDdqQr;>iaCFE5FDyt3Jf zM#&yt#8!ZCR&V3Ltk&PgvmrJMEg->M-p{O{d>TNK4Z-O>An00S$X4DnU%&GUA;;YrVF%tj!a^#A|an7V0?p zV(+aU2>0oVb=*#+&*#fyH3ZxYy%{1Sz-Uf3X%%KzP19r>S4`&Q_S2VONLYtV4^#nFHDrE!H6nSh;tD=<8?Ae|DmnifKgEf(vYY=b>(E{O zKfrAm_-|Fe$bSJ@+Il>v$t3dU^zK#o)tTqn5l*V^icPIafol=`t*m!NE330XRq%y;|}oCnQs@a@;kfON%`x7(RFRG)plCVWA39* zHt_YqcR@uz$@ar9(A3zc;l!Y`@&R4Dp)~0S z*jt2s^~08Wdav+X&OBJfs(2U; zW>OJb1ah{bfyOmYpx?xSnLg9?XTyp#WXE#*VGkk&Lp8i3dR+kc)?TVtD3zsqrCgIu zcTeU{bOKeu>e?`cqcu06PwFyRG-w}n)Q2-(ey9Ae4f8nQ!mj>~|o; z^?lUaKGkpeHSw6@2+vTtT!-IQ$Q3zq4wa+nm6X{k{y%(f)HDT1T1!4H7H#oFz z!w=$)*;SaTMk?O_EneX3)$`Iv;ORULS-LU*F;O(yRDU%NYY-$DL#msOje4rRMa>UF zaHTgEH_EV_H{!>p9eT7tk3`B+)*Rj_+P^nGDKj*q&QL=D;{o5FDRwwzchNBu$)8+S zXyI_hbm31yBk*V&7y0{$f#Y)1tA+J_(JLz4{v~8G;gi*RD1%-)>vo~S6lpCl^5M5l zI&zzCl=$BTbM1IW!*_AOPM|WRT4iY9U26wVdP28l+n8rMq1Sf>oNLqMEBz^JuZsy@ z{|_OK5O?%CGy$Fy}t zFE8L9&pU1>$W^K&$6<1CJqHF!;S?pODH7|#?yTH&^ut|lA2aM}3i=7t}fywC~^{C$IJ zQ$mE#Ud~Zf{daVep_Wj?yLUd{+ddU# zqpW{o1X(EryF7DfL%?q{tZQJK(OH;W0PT2iM^qj z>%*(2HLAAvD?zWLIynQJi7(4c(vo`x@1=65SQ`JvWmh(8*hpjf)w6|0n&6KY)R@(E z@J_4|Sd>n9?jsm=T-`4=ZIdyK3aPo8h3BSY_-%s?U#bYlet272(h}G>qDc;L*_O0; zzsQ08>LThvHyB4|J5)wBDvl6A9 zs-X>V*q6lV;$!MO=K8^mKGbL|ML(rfoBY*1D9pWe&MbxC5f+ zT-M!$*P-9r23+YBVd3u>`hC?vVb)%2BJb`@k??!wwK=NES>ySuu+>OM5oNvPXRS!%0Hg9yAWM;Xnp=J$*|v2WMp-@&vze=Rn^ z|CI}Oa;NT&eRQXsQMijMh{@lZv9Q8h+iJ8y^)v$Bn=Tov_0#|P?m%bA$8Hxl=W~7S zc=vglR`$|;J@Jym!ji;Gzc2ZBt)7(Tb48R8xvH^;F74;OkVg?_LQ{98Q}Q~GrwaS? z@5pJ*f=$047wpk(tIrI4|1CQDK}NLQ%!ikNc+gt1o?m@8Ft!^(pY^A0WA)eEq^I2r>@(VhKID#kari+u1V0tS zjr;yo1_fsF;Q<^->a0VnKJK$_))@Njj4MC_St#mj+5ZFFqQH(xJmQw$xJd4y{V1dw!oDrDE;5Q&@VrtMz3(1&cYKkjBQUtdM zfztH&xxHJF$~a5TEWXQ%-}Rne`&vz9Vq~v@pVr>x78`xipL7*1I>30A^jToKwsQiYHB(_UODMvBJjW-S zT`Q4wcZX(&S=2bCVgO^4jn1(KW5X~wLa@w%Srd*j;j^&*-kF4({K$5@FT3)Uh#TnN zWduC|>94WADV%4N4uR$h%`)~`iE#A(w!CcWnd3DtcMuSZ|6vJvsdOj#>U5_D=@syI zr#=bwkTKmcdP3M{@+L?va>CCjyij8AUTkh~#bCc4hMl;|B4w)}v}sF-(l z?*j%C&^g$ne(FH|W&RR*dnRAgbf0=bHGis{rB^-}q3GFK{@$^y-L`c(H?{rXgz=;} z+k|%hH$#i~_6HDWT7xwc)1_pr-nU3_kb+;PB(9NO4Lq5tI_NWZVM{07b4Hv1O!|;i z^wnnZKK*RNz?IA!58Ar7qvJ9B#q?Y=)3J(w{)-z2nB}uv2sGnnmyMRn^N1za!2|dW zv;H+@?!#P@5!Rtrz&Ruu?Fs+A^r_7>{>I(~F;3-F#NlI5YBWZL-5HjT(sQUyC2&cyrh(yLNC^F5lJb#v1TKyRo%@k z{AD*6twdVL0sP6FD_b z_O%SkvSG}*#r{%vxlouG?|jF;_a#2P{mf_@wCt55RXa7xSas$%zIVGuZd8G-fyj2Y zRb*<~^m=i(?5F_zSiNBS{%f&+rwW19?O222ddSU}J7(~s_GZJ5hXFQfWC>~rxoq7} znhWO=2r~1&%oTukGi%%in0yOtFS;{YtaYKo9+0xHg-?lFl%bFd%o#JrXw=sA?%xYS zF{Jn2H`@h1n>M&|nm7pC5N-~;mkr=v4v{z9pudD>emn;pb|2cTNTUooGrATiT!Z^L zn(a{Hi}%XrUsnlA!CB$^DoHr9Tg<*Bd$5b$!4Ls{M%Ei^ASzv7-$9#hNznh+PytzS=6iBE9x9bvtjfa3E9J7bM)ym|q&r)H(TVr^sgL>!5Qa#r(;tgDqLT*JHm zE0%v`kxa{ZEM|%ifX*wh6PA~C{|C6uj6EN4)?2RZ54jc;_4=sI0+O<8U{{eSmx>QJ z+uC??u)6dhHr;qgCi;`wjyCJpWL&_&u(~Sd5hKd%u=@N|fpAF6qHty&8AF92t0^QOnUnTvl9ApbZN}TSq z0%T6hU4^_3-B)S;P(tAAJR1HzU^)$^G*a!9*;#ACV$o2gIRKd|Mt~UU2U^Km5&gG9 zjdzVx(i}q^Xsw{Oo)%Ned=x?8(UUfLf-v-p@sKAMJC*=AG;%kg)mGzXUgu3(vy-IqSp#Kp|a^eXwQy-HQYKE=`5DK0Pqx#!bIM?Ks zc5E?qFvOVml|BE}dj7v&ykSM+mXa#waq=mA&d-iXBz^&eeJS%_BcG?}nj8aFV4Gu!Sr?`>^vM z(sOVXd_2B`OkWJtle4v1aZ#LDF4)LjuP<4M8~nAEZs&X$Fdc6)4Gh*gs;;oyr5APZ>;WNL2g_hy%zdfu04Oq zvc?jg_&#mPSck*uDxj(0M6 zbc2LuPLuLJC&?2qA?U&OdD^*(Gf>}aqJDZiukLDM6CYm4`M=#A`~Lx+%ezW|KBtbW zIu(^*LZSoSO}M`Z7Uzql6~a3&8Ptb<@}`TO=FL#N#6#AezxMU^{>O@a)${%Me$ReO z@1W35dKCyy9NhU3bygMS>#$Hcd{vND*v5>Tkq-uGau(}D_Fe0LgvEFm4-*0~EP(EQ z>2M2zx{m`mkyApeT8LSRfr_mn)*Mm&tR^2zGzu%JR!c7ddYNFrYP)2K)Kns(?`|jq zG^W7pby8oeu0pXGl5RORic5<_vhSG%RQyKmenMt|7R&GACW-E3rFDf45`S5v(SEH{ z(Ne2M)Bz;bbkLAJa*E5&GCw0ai?;NY(B{0HJ2UfQ#O{~futr}uqp%G(CAp#oaZzvi zfY0nGVAr(bR;UECkvEH&y7zMItX+h(;OYqj(UZ+55R2ayF|RNuXKi~5cN;wrKtOSG zL7U;1-+=K4^MEp%3;SLuQ-k>H>#4IEYcXuXoiiadY12uCiV=%!nvX@c69Z`FqKh!# zT&^AQSsg<@%0F3@c^&WeLIE~3Ff1-(@gw;H8cbi9eF;LB80pm=xedSgkgm0}CAa-Q zz$cUGisg6wLw77k!rSf(Y?&Awn#>QW{wdqFe0-BNO4xIJ-NL8N?<(k~?M<9pyEq1Y z?Qmwz7iFblq;@IJ4dC$PeR>_ZkkMJ_eR{s5@IfXxmBMKGOe5PswTz}u!r%qk)%Zsh z9Jdi;thBU{rI0m+0xKiSIqHQ06UEWkfYiSdwuT|C9&<%XgHe%dx>6cFva8rWIZwD_ z#wi)qY9a8wxCNJxs=HJ@&}R9VGI*{gb_}2fq{QO^<}{~hX;j~QjdC!f1@gYs$EH)k ztxe4V+P)ZC&2K;4qz|N?l_yJmjEero0TJm^3lBGY)6gI#em3!{P{100JT9+O%RdO2 z=7YL`GZ>pBnI2PF#shYA%)<#M=Xz12vB_L^6Vb5;Fm|-^v`OuoHoZd)V^joz5e_5% z6x>CqsJpjHR;#=$X?)>7l*1xnn3BxJpdgVj6e#o8^OBx9=d<8(-0Z`U&R6a4d%eCq z=NdBh%4YtE{ijm#-*6x&_OwJ;nmg>URL$SSyqx>v!7)H1Igfjz<+v1;%*lbeiX4zQpT7@ zGmsf)%9frK`Cfm0!~;YKdbTUEXMq13Z$c~X`_N#i%;r~o67n?EkVO`07TKtMnZeCK z7IvTpZn|zGiqbMc199j6I5dS4ZRv7jo=PNo97!Gw8EOR)dM^V60c9WGwL1gOewoew z6xrUQ%~J7O8p~+`hZYC@JO531ao=*GYiduu2bQ69pO&N9BC6~DiaEf6uz9lt3$c|x zm8HR_0<~vbe(@K-glbT26`ISopSR-q9i4Idx{8Bwtf<*h+Xk$>{yU5q}PudX{3>JXJuuIqH18(G`@e zxs~cgj0dQ?#ixXPz}zeZIg4E2oXbnofNVWUW@cBes~<8HmPNUDt8SB*l?Y zUUzaD3Wj~v|L%O0*>vIRPf155Yvul$iD;hXh*Dwe$zJ?T*jFf?NTVcW`XL3s@dPR+ z6cf|7taO2gE~g|}RtO+E2{%haJH8NfQaViJR1=f1klt`OFL_ziM%kG-CttSzWz0 zr={SxJXe{^k?`NY>vwLBC|k(ER|7ti^hWFZr56s(iul-!Z^wJHM|_LU`ez}Zmio>G zNs_$Iz$Zwj-WjKs$KdzCb}>m>nT8_m!02B~4v13oR+8WJC34=t%SuzTHJx5z*ifrE?FEnz}QI%6o(z?3A z#6XFQyf@zlEzyG-pWnfVzyRH5m!O0WJbpUQ;(G`YD6gX^<6HO~&S!CBMu9rpdbDt$ zVBI(miQCP&e{%rMaw_OK&wV)bXLO87SNV!jcVIX@Zf2##+1pEK{}fy?6oQ~~8GEIa zxM>~nebM0OA3QH@Xww~IlIq#qz}Ht5-+yo69d>Y!(6n@IFIuVWcA|gNbyw4rI5=gi z&}>tMvxJrrPfG2dP7dSUR3s0#g;#USm;ke$I1;_oV#nA6%K|lE^8X^-wriu4FARQ^{_w4i|#>X(`A=4)KblQh-BOtw}Z+(|VU+H~&) z$kxg7hWvd7ju#MefQfuxiG}8;BZV8>n;T__Z|~C<=)}`E%0$@Bwkprk{|6XseZQ21 zXLJ|=4)=?@KlazRJK{epi}+|@$3Y|F*o34f8UR6~;>%K@IG)+}xBHPD&H=06`5%*X z=9i+o21JXFmFO!e571sF*Q|ejiF`LZkaK6*=9 zZzLo%BEnsOhZ6f^p=x?wpyqaDQaW;Q{DH?Ep)U2Ehfhv^4$5&*qtB!H4u8)aoVRtA zyy@(x%_xk1Uu;#~NRJoGyHtYOi9!3OjVMiU1D-p_nU;WV_@WYS8s?KyJ$-IA$;lSd zyg8`KJdUFCv<32GXa=UrDEO*S5L%2TpV0W18)SA9zRN4=-FlogZ%~l&AZ-=!(jc(# z6%>b|S2teagKtbFeWn|91r3t<^^_W@aZ(mo6pI_@Gfp_9Q(@UTIny+C-UKUI1OF?h zL67{5usEsM+|1jo6HNulSTEbZZ3k_W;C6rt+*4&UHp)>wQ#<&q^jV@HtoTCYn;;;{vW{W?-gQXgJA;JgK)(!76cToI#uSBu+ ztJC>hJnQVno!&!h%|aC@sPB#IG`ma42a?p8lVY+(JB^n#0HU~={0{9do46S2@#j~i zGYz?xY3h@Cm4CtKmP?=9^I;)Pk?Ce$x-{2F{+R&ogaL2%)flg^8`MIJW?E)sr8@D~ zeOU!+e4zTd-%Q2N0S(|i+)P6ulO~9vNn7M-*wLTmkEf=Q=-Ta*NS%uZ`c6y6G$xXP z`IlDSNgu)VXz(fH^j1`v76=LE^hT2BCtLe$*0Wgp|IQ=&<@zLqtlU?2eqvPV4Ssfs zobb-4anB^7y_Nk#noc2WRzgEH=qbb4F`UVpf6hr+LMNw83(f0l39{CUaxtsNM9KRw zK_7M3x&#r(Er8!=8;`|2&h@VnI@~%*tudYnY%k9lV!Vmw4<*tv$|B~l+5*F7tz3`Z zbm|N@{-MU;W{!#q^j3e(uz#caZJ4)GhQ2AwzFWQ_*DM+oGteTxz)xU>kD`7^@+e*I zL@KZ^Kvx09#qPCVOsK`X7rgm$AXbUb9W(@2)UK)G>Vfq>Wqrrkw_Wd;IKWGhr43$* z&wg1Vk2_B_@<K0e((bbl1&^xq1YFdt~{B5ye&A%5XGl#eD!3Lm&B z%SU*#rpTaf(W3Mmb>yXSn-D^`k_ty@w!{n9r5EF!7<_Ka4)sRWo~%0tDdJu)DE?+_ z&UwJmn1y=*%r1<=eon4sdTKMh5@1{`fkEEqdwI-!i6>G*mPL=z_YyjdcL@JzH|Lrx zGuQ3Jt!6KiM$ANytyh13I^3UkMplZ})Sv!iab2@B5FmI_R^yCOzqcB+ud@zg&eXmw zICT6D+AWhYU;*Oey^xXF*A=qP zxq54?T{Z;xFne^@0f!czfMb=N&9#lm5Xg8Z;QiR77(^N1OCU#V3u9%LrdQq#v-I3@ zW-~ZYnUi}~>k`~es=rxX$dD3!XvNVHdb?$t0l`d)5zfxMZd|Tvp8V0|xJ8IqO41`` zD%a1Eu2AEoe{F^!CIj`M)HUN)OvctlT}v+(X84iYQHX zIxpfopyhSEL4>n(vQGcNwo7luS=_AF$&ZWWOIr6%Z5bg|^wM@`l z4R@Fv4p)CBdj3c|zdcF^cfJ!}7;>%Q`M{x?TIG|ic@>vB;h}~*vxZU9oo{!n#9KV{ zl;Z<;f^t4w+S*72k}yu#T&eKc-R|E#tud?vGZxHvc7lJ~PR`y&>H;Kt(2dTi^ER|D*5J3DRXo{(h9DL}8^7K{6e&o)Go4^|!A<1+=1=yr{Q`Mcoi zX<|@`7*4df7N)sUbH|qzqopY*;jzKL>JFy&l4rB^emoY0`VV%!etel%cgVJy-S0j} z<70%XWdgpSq5OfqUC!v`3fH%-MCFspU%_zr?}hDZche7Ui_|GjCH==m>fZy^jd44- zpKLi_)K9f_@-+`c0Zi?AeTF`WGjgGhUD7Ow+a#lJ!(Q6y7?$On{OeX8&{An5O@1m1 z)CCKxzE|-dTdV}|$t*tA-%DK3bD$VVCHM+Ug@JZ3vF!qS0&1S@I(J6#!fRxJb0+%*GdkklYyq206}-K$Yp{&9l^Qe(;=KCQ3I*v;`_v#j3|x>v%7$r6Jj1 zEjkQyX^MGES5*;Xy^h1&mOvf!ad(=`sNj&W$JLf+HI;Y+e7- ziQf*r8A3j5b=kkP^@o}VIHt+|55T9;Fx(Fc8YDlvu-)33z*+RO$xNi}y^Ozn0Tr6( zlPGcsi-pvPy$XYYBzGsKp()6rKP7m#!U2NO;<=c=@6z?PWm(Ad~{Nn=|*j_BYLnYZU}#@*0ZZjBj3D< zRc*;2Z?b!0tXK-p4tGqSbIfqU%lVlZKFv>g83ms6`nLANZzpBH%WK?#BY>N`qv9W> zMOMR2NcXeo{s*8ZUGvrZ8}}qC_Q{qVO`Z%*%7l28(D3OQiP+fIbI}GfFBHi;p7B zy2IA4bm=IXGHw&0lYYyJp^&*;&-Uyaj4G%e$a$4F#h2;1+>-o4N_K0%8tcA}7acU^ zv??RX-p}&KMEa{Pz^V|J{B9iB;ft=WkTRZ6l@mAdKR{>qqcnyI@K)k|{bpdT*O(Z@dr=b1sXV4oWdRz(IvgVZ+<|)d~V&St`Ka!J^(r$6&Oa*{h|q! z0|PY#WyQuo%}Ldc;)cY@kh(J)f+`e@7e?czt=JZx{Q2VXTH^kXE*dnOfVAUNsCvZp zSo(wHjD>|Z=`%ig|b#&bN^i&r5^FuAk z`zuBFN|y5m{7jQI2RE*PBKn6TTDSS`5VC+Gsbg|R5*15H%L=(9-qVDSzwFuBL--IP z|M*k@dm1Jsoc*-SK$Jfa=dsum6&P+=ar?cuheAa=bFWTJTWQ8&V%nLd550K%3{O>{ zq(boW8OPa8yEIs#dR{sGcHnbK;#xk4ZCOud#?0OdS`5&?cOsu=*%1G}1orN7o%yhw z^yz6q-Uz=aa4xHl;X}nan@+sfX8GVX5EhgW> zrEoK@DEu8bs2ofaH>C+7nNzf+`-4()6K4s&hBc*zj`4$_`{9Xy%SV25v7u>^6u~z? zy9a_$G*B2WP|lLt)J8g}>Y^;8zfgaf>5t5t#ZrGwo0{W^bf@w){n7@jLOoNZZ#Ejf z4*2!H4=j_w(IpzAoD;hERv+(nm)>}^`ls!5>p8w=EwHB!yjE#|+UGf$WP4WL#gLkV z`P@kj|25^e1aeS3D2o<}pb2bvzwik^#rBPC>`~_F^2o7sMd{DHr)zmR$uOFi!5_Su zn}ix8%h^=gzrcWQvT$-D4V7myVkV z7s~9306spc7O3ulKx!3|!ZNHVK)wWoT9&Qh+pIY$Q1%P$&r@wGJ3v3<2rJV{ zsXpg!Snj8r!M!8vSh|{TGEG%MMyKM37F5)aZ{l%B@YTm#`68z2z*=q7lqgn2UkG$B z@S$xKO`^asG3~PPmui+52w0t*MBYxFsyR?8@LT5vTUnd{6@t>m>10sWfH6*A_lh2RS9_+EX5pUbcI{upKL=XzKzk5`HK zS>|0Scnap5Q;fukNo@9ZeQ&= z&MaQ+>Gw+Svbm_l@RRfM>8*m4NZT=H_MbzkxYO8hpzTE7fYt{lm2!5+7J~)@!)mxab(Y>Z8n@u}`eKPc= zv?jc7;>)X_hXWUD8h8voCx7iw#FIf%#;hRbIv+n*ysFRr8;4d>1@=XUK|8UyxGerT6G*M^k0P zwfYTLY>e{8R2=AAX|A*2dxsuEX^OM8UYFdz>BnVhVa>Xg*Sj7)(c?PTy_FKCL9iu0 z&%0Ljs3YZK>y`Onn|3>GgtKbO==W8*V2}K!Npl$zXXSl6H5{Srq;8_**^a>ZcNhIwK=t85! zpbMck@MN~OW2vsKs+n79-$fN~?g4tfrfzC15lI>6m0Cp={YCEUVDhLfdl=u_mrKOy z234mncXLi%j!iYz;cj>5O z&}Rv+5?+Y7H%SnByd2-owBU^8ZYOlCC!usj!Nh-mCE-RxmIi)mNCN~z$c>crWFEN# z+G_iSzf)kr##-s`5i7*MrU1WRyG~&~qTJ0JzNQqlV@&16>yPV#p=HGsb=!!NK=I#0 z>U4`Lsiyq)ORY=3fwAfQi_!}_25fD+jfq7iD}2up;}IBH_Vvwkg^FdpPdp8iDbHOa zDjdU)Ddjx6nJO=Ug(Vgb-w^dl5ZOvGHl+|szc=&tsHcpYeHHssXc7zt%)#Mf*iHmJ zxf=!o04kyS8wv)GQGFG2o!r?QZC5ja=6*ngzDF z!Kr-BAd6Wtv5Egyd&3i-A78~)JhBZfT<)>qfBl|j3?1YjJT1Juu>rts%Wtb>dYVM; z+&$n3FQ+ETZlb*&O8atrm5?3^XiuG(i0^Cu_aMFE+-KwTW{g2Yn}{Np8-F=t!cZ~* zNZ`;J+?N@4uA?VT@|pfUXdCCt)0?YMNm%GaiUwLibI*jDSW=eC%o#4sUjNys)li<| z^IP{gFoFlcMs6N7zj)85?H|_9!LSW=b|6{l^+vdtotIy7_3vfKsd$|ou5wuR(CHPw zn|%inN$!s?$nP*X@Eq>-AtT15jS&7(vSoq^+~;-{%>scT6WrZH1TLRc4GTJ&&L=#W zccEypjm=QW*vsp!PU}G!Ssc1?AXd6Qa(9>=s2aPHYam(2(b-xSeQN~Sbylvoz^4)P z)7&1qBw^#FH#8h|RRmjpDTaJ$y81fZWhS>}VrXgJklvS1t)mh@4+u_=+ay6`v#kDPfHM=qY0fxkUsqWx>_Ii z5JcB%TkRW}kFo7O(%wVq#gh`cg>p;j+L`V0KFNE+bs~@9r27_>+bPj~@PR7STPtR# z>c&;h>=G(OC1@O@N%BlH%+x;Ss@8kvn3b?xCuaHxD>~bxDPQ?F=0<_8!M+q!?qjycD>M()ZYg|6 zf+Lx93awIp&KzE*eozt&y64dSb70+8_p_e<#{)WxF1V^me0OsVpS~KR#O;PsXX}Jg-wZ@HvB_TXEz`o$;=T%3 z-T%`SXs4;`^ppTx+onbBLIP0ms`-+o_PfeUaV<_Xi^S27_?Kggcd|<>U933`R2tMm z3$u**@h)_<(WqE7qRx5nq|8M{2_U^vl-W%h@!5P=SIuhmAaqn&!%}xCX*}Mf*z3#d z^(JU##t@-|Q*NrlETN{Uj^O+IW86aCC=Ci5r&aFiWUz0{eqTmpm{V4Q$q8@87!@8r zo!uHZ^lg3feXZ%xzQ}S5kYvQe1kU|SlPig-lc$QUSoztugRp9qFw9}bJ+$iNBv*RY zV5orp@;N#71C(AZPHt%Fn8%hn)ogF;O^a}Znwb}s)XaYg?&w~VoOiCZ(XjqNbI3+| z#ut_dydisq`aatL|DL=WUg;f#RPi_$kh%1SmO7cbc$gLZReZ!EdG)epA&S7P92j7u zAG~<#_LOJVD~dj#YY{h9@JjP$U|1LZ^CeMZh#Fumw_b4;LhdwHg}yN!AG}jadVGEU zD2#Ef)KxD*kpKV{0M7s}2Yve6F1{2-Ts#G-cI!4Sft!9`eC!~bxzu8j_Sy~`_hQES z0yaYS4NT)#*FS)&p$Ane&8Hw$uLc!%mR|vS_8i=ME4KNyz#{*fs7~#)N@Q055NGY!aoK!O zUnSBr!KX_5Pi5jo;iY0e1_*ywRVh{87?W3(PSKIP@e0Zxv{YB-h%X*mCFJ!h3w!03 zbJPBN0+MjAES~wiiLVK_xCs-u7Z7&_cCmD&Ws15T*Ud@dn!ocANZBdsTD6}QKK zc=+s>HSk%_#2%^Zg~yuS8B#1)3D5Upxz#KC{NWVI($*vDQrG@sgG zgW%Fbj@*1lYu`#23YPoG1^y_Le`#Vy#y44cwHzq4R#m1-0KkeMU5+n0k&&TRhOJM?s+L@Buzp#@DMOJ@BuM z^XD&s9+Ia!=vxodAb$%D^AtS&%$scR?Dt=G*%7Ij*ykcO$OG{u3oC(`)X(zumB5Xd z`O_Wb?`rv%NKT!_>@m4nT}`ROHzHD@V_v30TT~4y{GpfOOT&KaRl4r(LtTTQ#d{(3 z0EpXkRL^_mnQRI4fn2`|8@m^`CS1f{95@u#v)f8GSQRed4ZLW8^00CXEZbEsd0%((nta&Ob^GN;OInUmTM=!W(+=LRkve z%FVkSyHB^;%awdj5P5MJ{$@RaX3qx1;9$3W0*C?oC3V8>O^de_+U6O-hOM`7jO)<@ zubV3a0t}p683y0O!M~>@_duqD>#1{Zt;!{B=D^Nm=~crz@Q?YEatpyMF%?bPrJQ1y z%n*LfWXwE}q_SP@?N(C~=jL-?%l>2Y$1YjmGJ-m|#U!p*cfBD-2P6 zQ|J|y>=yse+G4q-a4b@yz0e&JBSQ%4yLZr)*HQRYJc--9i$SQd%^f6}ZFDNzPeUn}onW)KVvpS$_po%34{Iml)pgM(5GdNdT&Qh{}6i0x9)sD*NR z{TTzfiI^oAz=!p6?Z)T-e4sa}$7f|I~RMILdCz z$d1Xa2Q5~vR9y9>IuA;;e(hvc^PGrTLM61(2;Wz?0KQ{tM(UO(tqduD7n^fzSWDF9 z-EP^olov7jZkz&s=s36+@U}<69zlOZqgQ@4TtA@9G}QA8b$T1#V^Kl!{KgdZ5WO4tp*aWD#2@fBk>(HxU3X%vgP%sQ@;#9!llk16UFn%{Zqoun!N zTjzB5q1UkhnoKsEDqUOOdH@-N#@*vYsyC_d{9HsO_7~X69@02s!=mOjbdV3#jw8jQ ziz<19`3!MRwkz-*Gi5~oD*efLwYEUSizwx-B!w=4H-dG_=H9m_9xhJ==U+E5gTWaw zSD|O?Qwd$$A<$nYY#q*z%myB$=U7~?LQRcws+b>aPb0|Et{6?Kevs+Fhv9+YWPi1t z>4pmKnc%akr8m!Wn#C6X>9p}&Hemdf^XPkOeroxsblt)cldz4+H|1JbqRK47NZp_^ zhg?lzg^B@OLVzTc`Mc=kUK$>n&PqiCSf~K?E6eUTo~w}hw#;4|QeZGHJUmacV)@G% z5sVJ#K;5GX_8tB3kH5@~(2B-x=JM1AJ;-C=(McIS)5rZT!9I!BZrCyTGO5m%k<;JX z&~JSLsj|Su!uT|Fds>0tAIT3tG)&6E9{@XLN=;jx6%rPa)>3%~s&P&lG%Ju>O4i;* zz-fu>b(6j}!2}ft+6eRDW4R&OBpzw!TrLJ@OvKG}J;F1s6(9d;p^INVT_ZS*it^$k zy(-LtXV>6E=P%D*6+~R2a&=0gAb|Z_k?m$We#~py*mH8@%Yr{WL_kI426ubi`3bL6W7Nc>qfSI~+P_-|Gjtl?c$Cd|I~aTb`GN-ehhz4vF9xR7zA+CI3>fnt zq!nX-H*yAlE1b=X>Z4jxks(aj@I_UHy6IUdp)Uak6r3pSvV%WY}g;fx;&1 zztVVAQ0K%MsjCq4Ze3XVw6qK%fd=rAYCY}pd?@jMUI69e@vE5>{xMys%gaIVdQGH9 zyxBw@!%ABE>Fc`bD@axVJ=;2n<|TD===d)mDQczt z9*Pye%1-;Fn$q&$h4T2Nu|WRB(!3_?7yu(@_Uh!wS{nvtf$c|fzpP~H;T|@NcG1#` z{ltrpKJmtQd4(XT4g6RJMYv@R0lHL*Bm96feF2TwN#!cb2g`_57X{qiP#+wGDbXFKp&6DBaRkUB8 zoMEFuHoLU3*PCOn^q0t@hcXr{fN%v-B_Yk_Z=QUYudk=j9?~Js3H}P=a-ZSsw>`z0 z7d*wPC#q(1GJou5cxbXuS(9d(kdYqT!l9L9*mF4JB#)Ey@FQd7bNbI3B4sEoD_GmO8?OI)V@Gn^ZQWPSYTB5Udj?&L!8MLn56j ztA|j?^-`NeE56gpZ2^>xJ8IWk{tHfI*=EE!rN4b!vvx=T?$_8ek_*Ga zS8;4!$zlA1JE##7=sPVn_y%M2&;fHV3p*gxHO(p#@q&>UWGX4R00H|WOOaAPj-vCc zjY5huH_Y1S>+lx(Ai+SKTS{Jbq5$BuVqf~wFcSmbEsd8!e0ZHP+#;y2@Aj)no{=Hv zFM$E$QX>FakxLdr)?+VV$kzTiK! z6wPuBq&io-+clK#)je1j+yxm?majezyhKrd4F4wU&2#2o_-^&r>{8n+#zbQcNzQ)} zWp?h=YcDZ4%41Puo$T03;}6haaDd(NG_kch(lnkBlw@ihRChPzgV(7T#!LCYpOW0X z9!ooiBv9;rj%B#84c~_Ty;t3xs-W>rk%PrJ?z zEuje!{cd;f)Oaa&15&0htfZzQ2DHw7Qg7T^c{qGbHCn(xxW>3&vm$Zfu4uOj^6l5x(G*CKZo9`(&)!z|1k18R7Lv#nTDTb7d%uF5J`n&#@cAD zG5!`lety-2-rPv>P5U5XzTIIgJF>rS{K6QCJsDP(d$BYL_7(6aOjk`*Dr!#=RzaMuKpT~xtM#g!veO-^GAkH%+enuaDZGMEt3Y>&1DsE*L_f3d+Yw8V<>rYFRbq2(d`wpED!{m=x#kKg!%$jN(-c+a`%I%BT{Rojb*KZC9{9 zX|(~P-s8ZVAJT6X_DGq~{XO);GQjCxs&4-gORfV33=U{7zKsuFY>s`TC92gbp$W+~ zZO|&Ivw$_J!sw#c+jtdKi-M--nqq^H6ngJMfw->>9Hm55Ln7NWL%q?wNNOq?1_24b z@Olk?6Z|E6 zLw2aAw$uwtr>Aszep~+8%XBTkKub%fj&&yVF$ARM8K_j<#CJh*t^4up8;hFw-tSO2 z|5qc;8HU!_KRY8K^xbar-YuRPQCjtMch9x=0oIt!nR8z#lL83ggAEU z!gb|0hT5n8vVi(0Ds$Zvm8aJo_z#$#o}eYhl$8ej*1tO{tSv&Z>mxGzzdQb}iLV5taBj57ag>au#3#DaSb(lRCP5UI)0Da!WzxPdgbtI8`u$j==c!B&`K92BaU5 z9u$VBS`Ehi51`1Z3EBkr8x;$I!Y9%PZhBz=*I%&1_DpfQe}OH>zq;RAvvBkV%71Gw z0hFde-Atj?E@Avmo&!|j>#zZWq3!x?g4E|o$SG01R;IhtYKdd5c=*}wYoOa88*uS! zwXuLs8RhE~PX4ny8PTDGVw5jH`UOOmakCkfm+RG68Id9aUk(9`qKpNEgJhFLxVTVAKdTqomKM}<4JD+`iP4C~&nYEDU+`JDPMem0^4d7- z>QX|&)S3~k_bLrouA2wOBEw79(LsN=hbRuLVc#9fm~fq>m0hU&$Oy3nh~L1)f0i9c z&A#xcmSzygB@xK*1@wTZa>;Q?ZvT&0{9Red{EcE zDF1pckBQ=eI1qFF4ar5`aW3Zu?mz6U1KP>jstWuz4goA+aUDrA+)4D-U$1}bt^t^* zlYbo9(A|YJ`DSKZI{u&#m305JduIviK=y2uSjM?^oFPlZGCwZutzNQY8Dm3 zv2WHAG{Vb_zJYfVOU?T3iUp_+HSj(|dy`pezVh{lmd2+7{tx~OlN1x$G`mrZtYB-# zN%Qz|4UM3jQjG^F4>ml{N|Fo1*0=61 z^L;1orf*m}DvA8G!t8QRs{fKZ?k&HR4>3Qy`2y4j-?k4hd8_rHnR{>JiAUFVjlfQ8 zs+$7yR`8dMbaO`)PvJGxEsN&2ld0Kp@;%HS+8{EQE=pU|BM+*MH!wiGnAo?=3eQTO z|4!*C7VJoH^8H#$Ax1I!P`a^jz&ecV7mWkzuzn0)BTM1(!|4^kU1hv?%XP%IJ9Jow zg&F$+Vbu{v3xiAU9X~2>xx!TPsf4&8N9OjbQV#ClNIo54ooak?j(H?P%CZ~ku*gC# z?}pgjA>N(H&upWe?R(~lX4TFvb(R>od`F2K+_Byk1sMyxIWji=aNpZLduJDccp0JfgrLSN)u#~E?+PB z{@>I2p4Y(%76gYo^-)RFZS7)dY#?{{wZBI&|1S>IwIKCe8z6OR*E#X)X3EFXz^g0L zO4IssZ>!@Yy$G8VpZMH&emdd&wfkzee+JCKkES^}-ds1+P+t&1T7RoupoasShIyVL z>h7WVOx2}kKs;%yp!Uy*1-O6RO#N#ht=h4HN3kRjQgQEVhy9Ys=jZNg^}nLZ>W2`q zI@IB19+blHi#JEhB;kQpCeoE+PRHs%gFmT1A;_l(EH|rzA4)1 z2Fw`k&+|lCe3ig8Gr|(JYhxVucRGFhTOsNW5dBqR1FTKOrW^qUw>3mbA{58$RBWu{LY7bCm}KGcI~>Co=4$Ko2< zE_DH3*SSv72=0w!7zR1^Jq127tMG0Mde8dOle2VCBz%mIu1e5;0%4BYu=#E;fA|O& zy+b?*qb}=Hn=>#zZuGw3848=^l#~>q+<1Y?6ILe~rF9{3H0Jvw`f_XG<(u5KVyXR1 z^Aq30PA8fh``)~x4ELN!wcYly)_=bGa)y}EwT59q)c_R+`?#nY!BeiIgrcE5RO+R7 zI=h0VqUBJ#V#3umsfHubL1Vkaa91x_<9~pppvP6gCDs{j%UvW7YsYQAwrdCJ(py__ z3|Q-IX4jMg%=fz4fAdJk9=w;IyPpX4L*`auXVR-VGoU{K2UarC{t5p?1|eky`1^qT z_&v+E6lTYbr%MjBSO;f*`!=?9kXqd8cB8z$q!rd$YPlG`aZx%fBv+=voPp2FYqRH4 zu6_-0$lspG)#z9dk6G8SF;?)Q<326Pcua=3Da6nAn5AK!iLsp#boxxwRIqzy3|el{ zfk?v@JhHodv*D>{*z){T7PC=v@Y%vnVi_-Mh!N7&KIik8RXaMox^M7JG7ryrB_Y`4 zArggnqHj6y01IH-vF15$fAbT5TJHP2#bWeCFfN_$K2yuu87IifssS^<=p1(MtuD_v zxmqf=LN1jpmRGKcs_2e)h-9yEibVw^ngf3}C?&TY4p&~Y0wVZNOtZQAA)3gapoW)i zYwX5nrO`8+kBlT&iwrg1wNCRqbjb`Ep%+jbC^;@mvv7XYddS@KciqxNJ@`>!7TM$( z;Qc{JRr$~<#Lh0BwP*Ex#<+~DPm402+ap%l$gK*EqP`!?+r%p04@(WHvS#Y+re7Hc z!um<6b|ti?-@B-$US;!dXKcsYZMd={mr|r1=zREi8mp@9JGl9rKC`XX9eKzW7twVF z*dImcu~1_)EAIScjbV(VTRkmJ;%=cnx(Fv4$f}3$MTc8^?2`| zV>d9T2w0S=1;5QN2pHA0%0Q;j5xk1|4iFJ-i3@gOf*Dem#*(#L?+tt;c{oL$ zQ?jg%0SCn=Ofwi0-U@}2X0C-TPbNYoKE`|N12qIQP>Xs~>xc1su$wszgBCVTQybrS zQ_((PiKh42k~}w)^<5j$n|Jt(#Te~J6f+s{rR!A@w-WRGil^~YhNlij!H}Cce>g-M zed74rHKme%y;FU9>X*udISqUWSFI@%ihK|l@Yd`28UL;PEj;ub=jgNNSQQ>OkC5}L zKu*x{!xLwD#me@rtyfK#xC}P<1vPi3OgYp4PLtMVH5~H9kB2u>Q*)UHWpu@%8py@^ zO@Ga$yPXfrnmVk$G$Cixmuu}U4J{xCj(uy=v;+UYHU8Vk1yFU{?trZLi5KNf%_`sA zexj*fcVuk@cJ=Ok)cKyCOcg%8_-tTZ^zq*egGSTi{IOY;Kj)9;lJ)!qqu$M5oj5*R zREHfRdxaKt3t#Q+Ih#+~ihpw;-{KsnnCYlbJch zccvueYB#8Ae7IRONJ~03O}?>iQ28C_Pg`b3_?%Mzi~@8Od}Q`O(aq~ZO%ypyW@MC0 zWUK5`#5-y)Mj$iEE35@&_#ascftX5C$cnNc_{oMx zy1xiQKS;p0Q1+K|)<~{ZqyXgzh8ZBLX(kd?)ACd^B!F?Zm}<-N#@U{+a`K8h7<}Zc zpKA?06;Zyu|5RF?y)_UsuT%rtMl%ZH8b^|x3PlRJe;WDQ&U6oWJlh5FyROV8>=qn8 zeJACoz+DYIHdSEBra``|kVbAjLcwSA7ju2$v4;Ulx#3M;mA8>aCg=?xz?CJP`rGx^ zYLupzB7e(vhvr#``ESYRo|@7|vH{icZKf-a!E1jyE{PEd>5Qk<-i@E+FE0htE2=Au zxx#eMDm9Bu%$%U@P6hY!jk!S`Wn^G&jA2xygGO#w^i2S?t3)0wRotR(~~g z2vc)N57JgBw6b{ls&7gzVq;E8Ifjc$04!Mr_W$mnez|wxtn%&4*}Xg?Bq1UL3ShiC z$9H$j=v+B~mA$*P{1~FlL<9E5EG#z7d~1SC%*2Dn-X1f=Ac#}x^1&|(kV#cRu1DSd z4`IlF@;ZtwW;Zfw0QPInr4Ky^XBvehRV)@9S3KMlTQ>F z10Q8>Etg&2&7r5A9xR`Fv|`Tjk;yXYR3V!3uK&%Z^g-RD%GRCG@dMOosvX;nWozRs zPn47D%O3aS+3YFMpUQQC-@VAusz*9Zd*5=sa?63#O*eL#m@}7q%oin|`r8(MzMA|L z|H_+eLJhv_Xq1|Nv1k1vkQu_L**@zxr$(91g0gwoy93M5Ww83 zRJRwYUns}kLBo*m8hpWd)~==qX6kxaMV)@VvR7b+43{KxJ07}G7iLFd_1+znUbZ>@ z#A7$rIeeBn!14??Q>T^31R{YwF_D&`>z`zwX(l;uGCso`_ArLXoCj_zSi&o>$!9@FM5O6sJBvF`Vi^(25a?PG&L?n%n z^Q~mq|NA)aKk`n4F!SFAJ3&s-J zx3N4*k1_R5pO)7d*AOg}dFN=Lb(iY<16O?838S0_&M&EkhZeaXV4wRWy)&S=+UWua zklha*y|-vox*WBKHVa9y&1VRigY~B@h+-PkV1sv_OcuQTH&d#*39+Kt~+b?uFc?sdYd z9qTxeC7HvPlMB9K7AVZiC;Z{3%DgKygR%-Va39wmRw&;qKNovOfGl0q*I8J8>oo3- zxwCKRa6}8XU3hA=l<^M{x84C?cRBvpc#_(CKX+Z76$(DeUC=dn5EmXPfcK>RYR~p#5s)_m%MYS7ZHP7 zAA^aHt-lufuV(N??)Z9x5}i4ZB>m_{$Jd?eDIwfE2R5eH&6F>At4B|mk-g#KK1HL^ zKNKz#qaTgR1v46k0K@hn2eT<;lQmW^tOeT=Pm^p>1?<}3kF@3%+#=uI2OuW5 zsd=HMxo>YnDD%s8G(4-kE@n5e(fK;5dCu+`01Ajb*A)z+T|ioqPW;;n03vD1qMt)8Vd(L{sqy-Nt9 zc0%O6*9x2=78d3+KmG|kx5!`f(Fm>a`Smp?_Qt@Eth*h1^Q(8;KYnb?0;VneAh6Q} zzr>swPPDU~Ffum=J?2Xms1Qn075|`YQYTG*=84`a*6G()(cL>R^GW$EMx!zPY6NF) z0o%@4j>0ERZ|bGi$^s;{<&}Qvg7+}3cw1NZX021iXu;|N2h4R)-Ct~C&HNzm*O8Hcbj zm0RtCIpqk~+cIEj^wWyKPLHTVx<LiFa-I`tLXJUQ}N(qNP=ZrLKh zq0!;lOPnC3)NgCBkrIiXEhf!8RDZUblgdgaw@CGA>JOBk|FnDYCcNScs{$TH^n>9=w#<K13W&;2}$| zc&=;%G4j~_&|c#%_jS=mVVxMS^8>s6X@~hL!7PD>Oq+a)MO+U!89c7!@}0GnNAy^U z_FF!);^?j7D33wt2iD{?KH>?daI)WJc7j%cZ}`RbY6^P5P|Lb?s|4g1*^6}1^?s7) zpJIeEOg`Mkk;BPN&)ao+wI6j+ubr2c(Fi33TePLJ|J%XPZuBV{-|)Jd@AV6Aa_7^N zjKG@Du=_T(8*9wE%FnYBCp3B;))-L;zwdoKwakVQC24NtjN~b&h~>}EJ>)v=&d{J- z`oIsFerlS2Sa!{jQFLGS8<%adwdki96GloT=1iHdfNvlyJ$NFHfcP zbDakMZ8jAfSd0M=D05b+yWAHKvgWOdyEAwOF4KCjFwhO|Lrp)tFlDhel*f=N?f^^x z7LS~J%z_?E6Y6eh{pfC^APeG)gJI}Gm|6Cq06aez$@EzT0Uso!5bYCT@zxo?2XZ^+}@^A%nE5}58<@B^{knumdkbdXV z{;a4#iN)o&7MVt(yOB1_{On&D$&3oJzVB{}HHco7GK2+II=u3C%}sT}-F>+6wZ)Hf z0!Vj}dwr=$}>Z7Z;F?5TmF&uhLL4HK+ctF0Hb33{F$<}S^R z#@_TPwg;lImaiG`DMl?v4`fx$trUaWcRYNv4e{&nquj)hF*&@*QLfI-GIv<~{KRB^ z%Su5@WyV2E)(>HN5e6+iI^hfAYjUWX&1|(i-go%cY`XWqWlcIgb zdU!^et%J^8UO&+FluvEOuHt>0naCfaMmddEcP=fG+HETwclbD`KjA~#LXvdFO%Qq$ z5%rfz(LID1%=dY=;0Cyhr+ZuJ$M7dvRl!ycLo-RP3yjuwd&}F_@X(ukN3ilC#Mh=s zK@$EFO-F=CE z+_C%AtC7M&7b^Uq;=~gJsEoLC2qCyoULW*%>p+7ozx@Xs69>{QRva=Mm+p7f=t#xURXnxvC(_Yr<%_U$Pa? zE-g$KkBj?Y$L_D9c$)L96_B_P@l8&7iQN|YM=m% zKZ*u)V^@88BiU!Q51yMy`|jSS6vc_F87ThJ#)T>oz9qQ90}+el4a6#D+0os+vKbat zQM!M^^5h<3AFRRiHLk7V>E?Num7%BBZ>XSdGij{@!260$EMWh z=LpwXdx+7O65HecEskDmv7Pq02?j5P%Nh~yO>=IR691?9h&TnsxTt_{3FgnpR)eLC zd3II1)SJJIc#f=P3@ph@Rd9cmC~L9If=7tFHMA9$(Gz=Vow$ujt{Msp-bt;ek%`2F z^bTH9b8V74HA6QRNWvc>8G)_E#S{i*klko{(+-Y zA79ocs2DCAa(rB`lH_Usc66(8aFX7>dn59<75B(Xsld?n*>rWm))k{{R!Z9xlxLNz zH>bM1v}DxRH}ZzxUfKPW0=C+I@9L9dIU&|QNa*yIq)zn7E|sGVQJYoCsQw=S;Ow@d zyDrOPNX3?*by}%)|MN}(|gT{Ji1KGL;p1p{yv)qdTB{SU6wr#kW8FNbPc4yXfCQyV_!jGv!DQzDjQ zH2o#jz3#?0b1ZGUyfu0NOVfH-Z9y;+3Hqe6#Sgb$ZW4;^7Anx+eYwxcv0P zTYFMG%9O0(9`nQAcZvv!*!MT|7DKy}c!CZ`h`u|yV-|UXqe&U@UkhXIOzU1t3s^hDz>>-sv*%3Nert!DO2gR5#6`d4TaZ!JPrDIl6 z=oLas+JT)r{x)Sri$`Kt?9!7eGZlCY?ctYlr9v$M^GFJFjpgbuFcp%}_M21@Mi$c< zy^(l8rT{a@&)kGDi1Q}cRulebFWOs`!&4KTZPREGc-0cXA7q30EO2!5MM>gST*1R{A^ z1}_S=x=2qXxLNV=9nHbMZWga#vL4i(rDu|S>Ly+0ibJe`!n=NIBwQNRjf66>L5VlV{K)% znRco|Jb{Xb^XQNx>+rXr2dBOC5E%wNa+z;}HQwNYgCuBq!62t<_h z+s?C1{%~D;>{aU^Som*1aHwiY6EFe`4Jno-?rQpfggx(`NJb@<03d62$PiWjW?`$* zp*-Jr3u)t8(94g_)gT_?vW^h29~K8C38k-#V(kbdJEMxH64gw*t81r86CXzotEqD| z_q5g{U(x*DH)DBj!q5E4-Il#hIE~r3!hhT**KF5&rHsci;?Tg_o1bxQ9a51cLvc4B zb6NhVwM%lb3GJJ z$lorG7;oKs)nCLY=2#?Jw{X0{;@^u}e5#mQ{jv%|dQO%=6zYmP_-mzq1 zPGLKUj_$zTMIB+eoq;lyI@e4(frt_W1vPSh`W>ir%!vDHcIq8w11cM*sF2o`PgZFy zq~@Q@DXq2wSZ^FzuxD5@O9P3<4K5*OzxK!j^} zyq1`mMVB6xRXur8FLPV{WA~_^Y?GZ{oftWi()Vg1jutTUv(hO>g#Hm}u29_1^;D$p z*`9(>9^7izOk*#p`PKTK?QHi@7K0)tJu065l{Hi&fm3$zL_jcMvhr|DC`@hRw*~L7 zP?;O9zsH^9uQg+q0f6%o0o743TWaD~SmIVKFkDu)-pYikCD~d32OZNV+=q%6KHy6` z7J(hZYz44rey-^3Qk=zx>D5NkUnDW)VdibS{&*s94$Mbupg`K$?Q*jRk<8A89$!aNk(K@N zfpP(Kk$fOmr+;-Xve}KC$~?fEC*Ay8Zp&T`l>{rz&3dskW&=fqeX#d)O*YP`s+nN9 zaCrL@3%7>!nT`#+tD>s1wx?r2E^G0ooUl3`eo~LApRS}Z88LMKvCVM`i=KgPE3kb4 z`g3KVuVgR9F)ec1uwn+ z8Y)ooQIYJD_nYpbeYDcICI^N+sYAK(RlhY|ZUqJE<>K?x_KjKzYM&DOsn;;CO8yNm za7%J))|m#$)D7rKJy|vHF)^u^FKq{2V*Kj;4YY##;rtt?=Qs%p)ZIMSl53RFFIHRGDj3`pwE`lBL zSB*E_&$M48EOr-!#H(fRMxUR1PXBQUEVso{gj6B=41i{o*-gcfVKmixl9W>QkL>hI)i? z^Bf=cD^vc$YRX^(2*iz_QpvXIznED%oPwkSYBhv(P5!1^2HUB>-O5sOYa%KC2RnXf ztoumh?%9tVK?0c-8sAOV=oTfFdRz_kn*P+t&2z!oP>%G!5OJFYYQ4V>sY+8%G$fT! zWeOKgHE=OYABYdcKfT zh@*2RMRB~^2DSXaUh}-$VCD`zD>iX8Q}TY->SZ0_D)4K64X8hy66^;ZaHoqo??Se(YTC+aoWAez@3Et;YIAAdm3#4h6s0hR5UP(fKy# zlX(q}i*S2+-b4Fzxv}U*$t5ock0xXsMp9!l8=)VsV*A+}D;^!VzGr53ctz#*IP!sd z**2tC@c@%!=%JNS^%rCH??}M!MP1C3?AsF6?B_3TfBE>>t2r3LY$2fO_bw7tjX>fu zDs$z{(3Y9Knx~pw2mG_JO1JNi(Yg`x&$sFJ^dAi53=W=FDHgS{v^`s!>O^;&C>(cY zIGeaQ61hl20j~jnMv(nV(-HTC*@*&lsOczy9OwqW^$XA1H&i`BV;?MX7T)%%M&^_p zKG;UG0>%`rj8OZ_IIh*kt;zYKFLeU+#n(6D7$j+P{iQwfWvadNn#P$UN>_h>*@g#4 zo>!?%4Jk^wK2BANW1f1M>@032>6cU5)Szg;YpDPo_aJ{kpD!aUP^754-2n9OOIr&( z20(o>TTw9Rt7U(t*f}W?{aZlMc+NndQ%rldfiUTc#*pz7SNg$y)2UZ8dZ-7tIDGg{ zzHA>wHzX^{UtjBxkI&etW#PMmDj1L=K^>wFLqAn6Y;1a^gY=!6Z3#y-&ejPEt z$#0KtgB;5DKXguN7?it#UJF6)xfo?a1Kyv(`n<5sIZKr9)56?`ETW}dcf7N|b6@?o zG$Ax?G7<%bX53heu|AR6BRuH^3#CnKC!@igDFZDGr?XcvSa z-T2BScP2<(c;8ylvN1NPc6cI`$XknLc4)mXtAI2EscSJk2rz`Vgb-Vg?7U+DI&_dd zyYZ1rD~+~P#+v8TEr9QD#{I3sYE~|doC8>ms7?-?+k5UCoN-Af=XA#9VB0lF$tR4b zr42S`6f^U3;0_fwrmV2rXTiXM3r9htjs7RV(9ey9ARf;cF!^w>)q3=JuKGX!lR&oo4cui7M?-$US_=50 zM*mk|y{OkPTPoD4q>ZqmkCP1l?cP?E0<5w$sy)nSuj+5q=gs2Y7A@mA z)Bh-1Le6dFBI>VSordY(H`~ly4rj4}-c(^$Y{R2v62pT>h)bQps70ax)zh?y4M>0#JOPR<~DpIO!-DgJv(tzfCl(TWQdZl zBe>A0cI84S<`YXhRKk|MqTd_@*1t^pl*z4OgYS}VB)ezEoK;KKH!bHaRlc7jTUm?6 z2O~2C3(8)zQ{iY7Y@eA==-S}YcN$M5tJ=~I*~{kTUS5=LB)u|>x-8;&(>H}oe4bZZ z-v7JGZjto1xh^%j>Qh_@jcucN^|MR(x5XO&yT>UUIC!d4?SQjqyXa~o8jB(3*!-9j zSk0%yqM5VzoaK_r;^gR_zy>CJ1`^eNLSJ9n`@I0tY*=25>L4+-3*Pd};)!$8 zTTIYP_S|E928?68#hxenVy zlC9H+&$jHMoR==KV|4!E1GF}xA!EQ&unaNLCMi!3JFYYXz01d$y+#Z5?%MZzUq_R; zhK^0djy`BtA?u{{_)GtPOygA}MyQj$XK(B%MOAz&pS(J`e%og(umeyC)ztLk6tLx$ zB}n9v{D-ZF1O~{v=+dEsr^!9lO}mfA|ZzL{Qxfvq`J?dxWw!zI?q>GBi@x%*_bq zd|tm95Ww<%4qp3oFi=Xvx{Q55RaKNAJIRjIKk4U~=nCt9K9%TNRdf`lner)5x6k0d z2*u!I$>}M)o?#fe*$rqu>mgJkWfgp&PBYP^WeEjqz|GRXn{#_zkgYE?(y_7Ml=;Hl zRXscC4T2AqeOkH&Ir{o*P^q2^yvHo=z9)1gKhzimu-fusxnppv##GrUKFOPyBpj($ za)>Lrh;Te47piS##uSIDX5pz486Mg1=koS2q&C*=<``s^rfT=qI3O$wjE_$I@*9F} zQ-ug5J$}ExFSt9qF2Ko+3o$aiAe^xFK^Ff4JN-n#i%~#NvDYHV#KAFh*Qy1P27I-W zz<9xO7_stE1VVA1*Rw4~B|aB1A|ThpwCB=m6#XX0c~-xVpUZpm*_CayyZ2BXwRZNv1$7zK`@M0L=jZX}6!jnJ zC6~6A8+p!5px9Oq=usm5ItBnHJnJ(8leJwzQZ3+q9ck#O(P|WZMp|tesDhFx%={{6 zB+&+Eu5(I!B{STz5pTBWi8Ewcf>e?-<#z|#QSwv4dTKAM%ufJ9^1~jf;@!~q; z$L5ex`LDk5Neg?4ImH8eiGk0S^=h>6cCu~s?fYL%+IF zKu@qT{qt5M%TWhx$Z2;*lY?Nc*|-lz09FRF!F)WoJj7VTCW}WVL@Pti0rSp-J>71Q zr&teFsy$X5(dkCV)Mvn!5m><-c?&9`Un&%SU6TIbNRaT*R;eO2A3h-jtDU45Ww2%H z7)PPGtTH_tkW(4nG-D9D7)=n?#7>qrz&-S^5OS`53G`w)@ljR;J~R#Qm9M1` z_R*Tj3sN3xPz-btDS>2=B z;MZ?sOqkwWcDz0@JQ#7%D0GG!v3s$C_iQT6$Afz^UScyA6?6UjzANI?w{XV^?hvux z`AFDOeY;DD1}liPoNEjZn?%#0TXzh<^Q`JVK|$>@e(B7!z*6&WJX_Y3f~mHl-aW}- z%Qs$Npp63Zz=Z>!zYi}{F{BfCk)fID$d(VkKc{GxJb+Q*r&L9f!tkl0cEVn95$7f9 zFVRfP7#gi*MPy0G70 zN<+xX;#Qz_B(9&JaGMGn!=mq0dbnC*-9EKM8El&NtRJP=SZ~X=>sQn?;1I*t9?F3= zWga;dVAd|MP^f?662Xz;o(}F?HzivKQz#>E+4Bu!!NOjQKXOD5zdM;cg&dq#W4y&k z?L3ka=M%OmWH+HK>S{`AI3jy-NDY;XG3%B;noU+^6L^38BC)=V<6FyU;87jOxW3Hu zBDuyNRbxn%aAYR<5ZjVpC8S6-MpqKR(R#~jCE>cL{bhdXTCNQ!&DixG?1`j^D-{Mz zG!lfRJ=>Ta&J0)>oX;ArFnRQno)fcbaVOVPFTxsdR>8!|Ps`1Z@wK%K`xq=ZLon`> zJy;q^U!IvAsJcULDjp0-3T8a26JZw~N_O^K57QkwT{3nwx~;R<&B;7B>l}X1_Cl0F zEN8h|j#-L}=hBIh>dXJ&{B84 z$BQGh$oS>ou%G3gG~?9U=v)1;$QzUI0E)~1o;x%{R)M`PH6!cL&#$e$7VG}>>Yw$2 zRPryYSnT?cm=7^|GZ%sj-3MlNCt~A#D6cuS0^{qwn$&wMv-%$%G+jPkY4FrEQ_+?i zQ1dMMQ4*~lWYwph_(maZ3Bhr?O$awME7^Px843?HTIP8Jp~fg)l432=RZ14;#U;QNFzQOE5 z$Cl3^JjJUS1x+V(;=ii8#U3?m2*L+;tfBmG;}{OcYha%JZ^al<`~daqX>YrX+Nx&$ zzX3q40Hw-_DgQx?6VEtUSTMRF+mGr%hc-eY#ZZsAN2}q_X6-WD)$EY-=R3{;#;NMY zP(}p@9O&60-;jfM4~oS(po#CoeeK*o=^eE3*3qm&#_OAbgCo)IvW_*J)Xaky6TupS z{*P(z7Gp6VQU`2>*-{W@rsbo(UtDhHJ$xoG;#L0lSWU>nnSOwK>fnI$xx5x`)Nc591km2JwE%gYhw5;YnF;fjTm`HMN*~vgu z8h5Qzbtp)Hs&&@Ey_!E(W1doV`X%a>GRm>o?6@NGKGrXH21v^mANPRd5L!o7_aA(R z?DU&AY^I1FjZI>}2c`;i!OXg6Rmz(t<-or4I#!=_&nJU(xt8G~)UnO21U5`a2=osK z;vgigvK9qujDNnA)EvM%mf)yGAy8*E2uY<}=RYgcdjuI++VzKsFvi40H;#{voX=1F z8JfD|z4%$`GWi8eS6HmKU=&^GAMsU#OYCe^?>CU5hthE)#;@vD7{^9Yv3GFI$0Cg*}@+}xU=kK1(G*_>hMANU%i=7U2|x1rJY5IvSEMEJf*izF41ljQHX zgJv5=WTE++e_^k3=j;L$6H5|w)@aALDXf%QG=YZ-gc~>G7b{vHT6&GC)7sxO@;7I&vaJXDfB{HFq5mVhCr zXVn(td={glTGB~xd&rm1gpESQ`JYx3d*%&RPEf0UXWv;yr$^}ZDx`!Cc?%b^v6Zq? z&?=d_imMOzcKfYXT-mg;KSW<*RHZUKFy31I=!uSK2zN=tR~&zee>%R%qY7E^&efev z57$nR5AA>K(f;g5t9N#dcnd#+UrOKQ3OaFCS!m(@;yAJ-$a~9PNQ$n?K%yf1SCoAI zoYqvW~-rD7mg0Ip3>U&kVlEtSFf`j!?afR?rt!U2Ql3Fih`Y_ z4_g_F;=6w0J<_-g^+6GvY1)r>-=_BSM+F!(#iEa+{J)bKTAn_XseeK&_tEnHlFngVXVbi_Lr6rwqL zFIO>CkOmFfl3k$MYNUi2QBf*fYqhGq8AR|U z`*K}yEM`LOU!!#2oxn55o~bF-F>cvr=4H&0n2`VWwizO?LxnecUlDt0n}~iH`|4_n z&Q1~_bw(`fwrLR}qF&R^-SfD#oD?;5DOr=#C6F(S6FyoWQVZ_4&%^T*GpcQdsVTeL zteAwP@}FAMQ}zq~cpn3_7hn3s3f?j10dV)5znpq&3-q9j9RuN-ef?Et*W|S9tzxHe zLDM4X2vjUIgWCP}4L5#hvpb!DpFyWNvs!eh%oNQK6>cpzO+$MG72C@x4r%l< zNOLePZ+em-OiR^@zZRu_>_LCX^x$NM&Q%Cz``EJIce}*T{95_s)|_>@P8v(zX8)c1 z*?^co%8raRU43TkYJD9cQPSdeeX!o4xeHVVj&)frPMysx7vK;)rp{)sd!H{G9aaK; zdSjg*#ru4DT(@z)eD=GIY#~sfEwTDPLjZqn^WDBPDQ@hM9o|6Z)4`oW^_SNAo1Imd zm%(n?{U;UjE?Ey(LDx1xaqf&8p^yq!h2H}jf2E%U4Bz~w=V}x6>fH;ub--02?0y4% zw^d?89_-f)=uIA=mXVIO7J)S*ymvC-AU3jbN)-!cNEHwpx)1$ z+#D-Th~vW{DD*?t{E6TfTD4QW%iZl@IXcv*(i?$tR2@*hzHG6zW*8zIs$6;*6sZWF z-+!>o)Ul(HG9(v|J1ceKdnL*=Z)?#cpTbNdsVaH+)};<+;^n1V8~hL!7$WyGp8Cq} zzosWLUs;W87GHZ?Q_1xcY^>c5*Zq_OI5s{~#7prUST#0118E{1@V?_TackkF;u*F< ztBM$@?a#eM{Yiq$8UbA3(oNN+bFf#NO!c@|D+#> zVIu7eyST6HveJ~Yvbr?=Z-u;E7irzGUf!rqIS}X$G6684dF^67m+=%ktn+A!yjQ6KRWO3A%nSe^OqDO5pA~dV+3L4Amu7MuyO62>ac<)pb$jnzvVqz$fbU zpz2fJhpsm|1Ss%V)6xXg-nYR~Kt}Zkqv!tyNZGZAG*xEQnaQ+MU}sZY4*49Z{<9~h zV-}d2IXG@W`-~dh^JkOwDsg@8_4b#~Yk^wb7y$Rhku$Yu@V1|TyahwTO#t}{I7xrf zTa_Rl;l!iu<)aP*w21LOS>U|$rTTl}r+`Q6UudmaASF@`BLU66_+GVPJV|u4R>MPKt_2(E(gkdM7HboXSN{&?dp}LhJLhCe8!9e@J(|Xrxgl|CypxySZXJ{tP$g(2lL-{K~Pw!g5(X3}K6@!!sNu4PSy56>*&zTnnmy*XXnh z{63ZMb@O9pZvPke%kX5!88T}4y%YW6+`VXxA7y>>K94xrN#Hz@@`0>@IlEINLyQ;z zgk4nH`3;$0JKEPl_b*f^gm2|yO!T*a2GpVdN71=BGW~yleD0TAB8uE^F-q7V9nw-KdtlD8N68D<6kxphU>G&T7KC^Jw?Aa*VuZJNXhJ5ZOcR%ZQsxj~k_ z{_p=^Oy|@8>1ULQJYTH-rK}|NoVHuy|6#dGR!br2K0)JP5E*LpjV-o}^GqaZydN^S5-GfVyZ+6Ab8WVl)Q<-TuXX3$H zk@E!`M|}LJ^}LQ{ubESvX>sm^&hkW=L^jPqIcweY<*uo#=EO z4Y=1SAh01>lrtig$tSkyysJ`8BYkvK_q~u6+{aOC0_WBhwYI#>0y2$Q#1^Z=ua>q8 z2zyO+So7V~KYg`cJ>D88!WC!tj_@?O#ftF0D-L7h$d{-W5QLIVaaB?uYd?n*y zNXK4*O1{ZZ_Dg|2g9}vX#wK($KH^ujKX2^O{`68OxSZ;HGrLvvz&*y*BVV{jjr6(_uQiSIj+g}4(qVAZ7{5D@?$_W|wAiVm?9WwnSbBCx;osMT#tqL3 z^joOfa*722tvG6psJpB@e0$V$eqf%wNSUe*ae5DzARbn-!Bb0hkF0QIEx+t)A7VDK3fuEj_-QVaOR-G8AIl3Wz*~+n z%R&u?TA@LOirWU|eAz#sBe{%T^l+0lj%ARD=6dx&JIDNsIxUqOk4(<2L#98zLfv{e z{Mdgxx#x&qibh&Gm94YAe1^wo{kMABqm!`jV&Iz5Bm`3#$#jcXCW2x2K4?7D7ipeU zXVz%u*mD+rQpCZf8q2A!Yq#ZFi%-If^wa;D##FaT^% z`fe0B^8`M7ac#!BT>)c^!Z<9f77n-Sh$FiLGL6_TbyalD*0}Ox71V zJsP@5t@?))FDk4|E&{ZS!Dm}jplg!O+9}@}&;S)<1l(FV(@npdUB%z&P)^7a%%*;s zi;go6)4mTGJee`wbtQ!I90QN`4b`R5yNbo*rv#kqSLz&3@p|rZm zxDX^O^^O!b_d?TplD{4FBmr%&m=oJCRFdGr16k)dVDWS`KZHCE3708pys7XY*yFNo*ONj%N zRZRfA4=5p)Y=dbjcNo_8=j<%>|GNS@u7wdm$T~*S)YrD0Tg}sI17w<`JtbI=nXYGl z59W!MlPHMS4y*H88|ko`N0k@tOYe-`<68dzt5=)*eG`G-GsHRx_G=T%|J3kJADlBY zMRMHW?+csVtdtzN$TQ!9g)|v(K5xIhA)G#cs~9$E&(!`SFWE&_J7jhJ^Z2@hbqCrO1fD;)I4Fg;+3AdU^7~ixj3)f zcU+a4maQ|6?M{!RmNPsb?+nspoT`RrJ-wpsZ^CuKaIlJrmX~T-eOk}0cBMzQ`ZuWR zejS6{KL;gy0a{rN<%4*MOe^^qY^!@z~_|cb}-U7;NmURzOFsuMt+1jb? zj^I)?6E5J38w)6%ixOftv+(U;|JrIf0-;upo!c@!xw3h`LtJSY(?T-p$zcE!{rk_N zEQ-VC+S@@4v9Pe)H;pXa{FS_Z#tI1Y8mnt-899WH_&=o7;#b2`=B)v&MZ3g0b8u7d zVS60z`l6vsOn=Z{jjPavy^TLrCZGoZ_&=nX+~Tmt1gKBzR=LFz7*gvTDpr*hSi}23 z!n#dXOj+dD%xhLUO|TNoXRv>P2V+^TtSQe-ORv;|iGzXn%Jb+i3iKH(ANN<@iW|_} zx!a$t-zF1FdqzcO#m`cneS5U!8FZd{=zxe-##g*;srhZhf`B#k(k%c6M1T()RC{Cz z^-f=R4gKs$dh_`PEP}Lz2yyR+%mLhbEkUH0bMb}0O{~j44<^xm%N(Y1Yb4!dR`6)w zI!A&|TZg2ep-zhH5KoF4C(aHF8nA9e%^% zeor!g>IG$yndZek()U6IAJJ`FT6yY-bRYARDo6_jEw$bKzg!4?I`q{px{hQrK0)u zO8YXtWpFYo$!bQ#1nmEy`oZv522#ebEZcwicEFmab;Ax=Kr!7o=TdfxQD@xX4iJ;{ z`Slj8hyHxoCNtA@w7w4(&{)ZvPI`cFc_hgkIS+ ztj6s^tHhs(Kl^xSvU6=+YVBy>L4W``{^e}0aI3$Dw-OGH90iG?-gf*Cz#j0d*K1jn zdQ}<672Q>X|CabPTE9Fx$uEJx7*BJL^gdSZm}7Cbk#G5wnBwsKRvUsi5n4Wii_C1u z`XJe1cW{nFV$G7ei2$UTxHdC_2pYElBC{+y_LTelcdhFk8iW2!xOqjgE(nriY!wLT zJwV*{(pxDS0xR%;06#8sRho=i+ow6`oAc7h>#h)98O|HQdSLkWJ)!^>@dw)@V%Z7~ zzllrB_+V46_mUlb=#13J>@c4XZy%gS@ozSFX=o1h*GUPZY;rx3nL=Q0R2ZvvEC&;h z>u$}KLRDETllDs{+doGYtg~KY$SrPE9%cBTQ-9l}_&)LN7K>@Nz@owy+poQTHHuEA zJU}auTJ~dL&ZL_n=8V0&&3YO^iJH`@6uXPi-K^N`zhh0#9@0??Hd=aXe&4kEZQW$O zrDk~=9LgqjBTM$pPupln*-z#U*-sRsZ~qw^X&6}m+y}%~t=;QYSOM?uZ|JT$><|yQYvqg~tC@<15SozBu?4dSCir)AQ z{Y#VhGMmg`zG59(Ts~Zacyd;VLM{ibf}4N*4=`zfo8dTpvO#&o zm?nQ|mb(JD^E5@}QyL;TiQ?nC+NxG#EFs8vd|V!U-`{IcG`{rVPI*Rb5AB@oFY}H1 z3N4v;#*9l3^y0tHC8YN>=}B$tdsItfGg%o#{wqFZho>FGCWD-1I{YF2#4kF7Y~u=p zqxUjL>JiElTosjVucL4m9pH14E?Gu@3^a~E2Rf{3A9Y4Sd!1?klE7p?6-4Q1-^JMnJ4_k!@LYR0Ks1g{zhrT zUkKym$tlgnh#>eLRvkKl`*i)eG4h37zNC`Ci* z>8@K3g7TaAXua|NKbxe&b+s2TYfL9WCOxAC0A{U_e~KWgmzHfPhBgKrPb2iIdk>62 z{hFhi9|Gm|?e`X6R+V}b82nucTRuJ^SdNScWgpd?YdOt`!PpO2C)v$7;MO-Yv+Hd^JKhs{^-)lj(xg4ef6KVF^#CODvQOTvIKnMaXC+-wgWBYdCDt7 z1nhzP{8lzEv=*|`d%c~6Sj0ms27w-q>DPq0s3bP{&+yH-dTRDkOUb`6bXc3TsA>Zq@ zcuzlFxfOfXlZ}}_`E8>k6bqWF>BW0X(|0!@GG0tz?z#sO5qkEgvD<~F$tK_4RHxkx zCBmuo4uUPG)5X@=$-}qv*wVBiTi*pdE(4!r5JfmayG{QQMQ9(qqJFaG8H(I)YyGrF z4QsBToam|jaz^XBSIDreSSmylcv%RtnjdQ@rcI`x>$TX$)JP^t14lWv5NW_cxMu18gwRUXn6`AJla(Rm_sCTHJ^pn)eryctSnkh;ezd?MdSA*HT(z;B4 zX{gdnq4WXjEaomgv$x8NuK|(7GDfo8N)0Q&9DWoYX^qU+m~Dvu}s`mC4PF4-bNC z(z{;exT4de&3Vu{wJWvXslZHIUXu-)Jmes`TjxY=^P2l2t-r3Hgm7V066^-oKn#Cn zjEdMaj4NFp(FB!AMR7EY7gxI9_xgih`YzD(Pk1?W-@^3XXLo@l(3a|`dV!xNQD@Qs z-3T_R_!;wbGM|8a*i;XZPBs*dd%%rOh-X2)miH1rXx|VaIPuuMJQMYo&Trm(NSa8$ zY@*!`_HX%bj6qb(X2AYLMAfe1HFtW1C>7^@I}*(4u>*)LZwuXl75{s(cfon%o)=v* z(Z*UHk0je_I?Wli`Qf$Ey!uiJqq6wEw9$TLD_(8^&9jLCZqw2J@kLTyB-_e3^ znl%gVVhrW_&ay*bb9Vv0oMihf%dBBx>eVyaA8X8mpc^3ROgbVMT$I^N_g-9oyqS` z2bFD)QE5I?wc#doZi`W#YPCId8~Ns4tRM#3B-pY*M|h>RrR9~DtKk!LJj)c$%Ryj( z5ov16lQGyY&s#d8;}+)xF*hASLAFdUDG(NWDAx^UbpKnnc}O1@7t5{Zcc~3Khkfmm z8_mYznvmw~C*io(zWcy6BYRc0TrGUO4(K=OatSf;gkx{)xhWpltzM7Ht!PLeHKA@AD^t_oli9Joq~o{gs2xR#8Ca~BA#m))Uj#tt0S%9ytX zVyc2LRRQcOHL{OQv(?4!$Up>+>P-gd7KB7LSAJJ@%Vs!6(G>I{NLj*E9|4`ZOWR`n z9E7ft{~w?Z!5P(0kKBQIeAo~q#iMhX4z5Su!d3UMa$825V zmGl`q`jJw<>gh@CDJZ8ZhIA%kMaD)21y)WjWrRNLCWvEj`0Np(k>DS9o}EF3#sHg} z*4J+ZME6%KR=S85X=K9?QAiR#zrj#8COBdg{u$=R#T}DJxcYnb>ElfYC~l#J#ZKfI zY9<|*O(nS4J#6QUj~EL;o5k~EP$3o3t#3R(cMy)DQ@@^V?u0Yg>&3w6SklVP{x(#9 z-i}}qeM$XAt%*^^KS8U7f9FMwjK=IGPSDg1HheawLU=LTh@`^yMREhs%>_@H4MC` zs%%QQp7cX*f2jkB#Dm7bu!?QrE7bK557`j&1l@0sMz(%VX&7hD?#BD?e(Gp<`#gM9 zFLOIMZ$R`&a`Cc-kZz?KUgV&idacDl+x^|H=QsnYwx>?<@BHcZXfS-~a_`>eRN?Uj z7EA2%+^H05{dGreT>s%ykoG72rHX$uP<>u^W9P&6Pz~tU9GmI<+;bBOe^3|lAvbsV zO0C1)dlL@!hIbVJ+^#3ZM+5U~(h9flxzdrHrnO(*ebk~@vc+t%PpFkLJ+CvW45|zX z-7l1h?E_ut#q!=@46o;T=cr-E6~$mJH1Y8Y25C^P=<}xB!Nqa!ZrkZV=-GAmsh5K= z4J@fWA)<>0GE@8ZEZn<5ced=;kT%$OEWc~4?}#+Z@#79u)y{jmr<*fwC$iq&MtzzvM@BCA|XYF+1Vved;r=!Z}phU-_3=|D^mn z=axauyNr4Bm8;pYxA*(*hxQwB)U#C8n=CzR-=w)Zx}?Ii#87FTGEup^P;G{HAbZAm z;0tFr`WNEo4mWNuz8VCe*lj<$^)?D~wU)u!Hv{rM&n%wF{7_~ z7lzV_k+6qeqA&eiZkoU1t9^($+EA$GhhE8qt=fcZj)5Uy1sTYEHrw}yiS(er=bxNqc?zcduHt=fBO8yO)6j zhbonob&=ctoo_rVx9{g;c?B&%H6b!Ah>mF+(v`CO3ao}U#Fi{|X+e(Zes{`=#Ar#dM1 z)K+Ls`pDM?LPRK^y7k>eYS^^x?XwZNP3!*wg2W{fp3%nWyN^)nHx{QWJz!kb4?e!v zr0FF_N!i&`v0E}7zbxO0pT4HUeEefBD(*PG#3H;w`gpO0_Z@-=>|4JtF%}#+VyT0% zt9r4Uruot{Oxn z-W`?lZp0|W|C?Ow5lfPtHxPaSqK?|ijVbHzUfrPzs{fe`)?*PTnXNEL(w$8MLOF*| znj*GPq__HCl*b$~d9|m~)O2Lox4HiT0@)ZuzCN$?M+Ka7_4lJZ+KoO-O5hha>jR!Tc%XGM|?y8?~O}(FbC>+Sa)R#ZZTA z)fx)!-S}HAIqjgi?2GSGNY*O$S;zw%kBS8ib9lMge!MwV5_*fU@acUmB_RPLUz<+~ ze2P2w>9|Iw`zOh|Ec`vZYhiXV!{+)G*yEyAYZ2n{fNhUk#|6Qtsasi*^=>x&dEk6( zB(Y1%pM$${wGaBWqT^8_aCTNCZ^~)xQqVYZ^FgjF?M?029d}+eJjYamHY9P=xL9W8 zX?2UNm19L4m(tooXB7nvgLGwDf5+7={V$7l4JK+;aJy&Q^eJ~P`fp?f!BlaoJ==C_ z!!0y80ntdIf(h6FdB|YDA%gjw-Dov|sMh~+d!aBU+Zz2dq|I#$C;}o+-(>g~qES24 zF))8rZ~IWycUlB^eYde^LuWEe`iReWXpEp-!-SDVLNoB4rL@3TUY^ereyRG zyKMai{a+ow+6fu0S!H+8rS_AnV}{w!oX zVtFoER0y5#*OMyu7(}stp;pZWQm(`s>yWFtj@3eW%E5cfwAe|2Rya)c(4#ouBPGOj zk|Qqno$mL^>&RKGJf``NMIZG9_+Un_&Qdgh-Kv3S6+yWdI_kdEb z@sIB(&QtV%0MqY4^~UQGv_NVIF^2qNjb@qXzA7M=eP>vaRjTsA6lOn=A&)+lm=QM-5^X^;5UH7?#kJN7l;#nTGbU24a zah<4#bO`PNkks8rZ+~u*zi?UTy;CLuR0($})207KUJ^ewQoyu4EgyRc(H6m(MAJ`+lE_Ttse_nWeQoHC+F_%>8Gw5fx#xQ>z>RCQ)t)E56mJQJ z4V7pNYC=^^)a%v)*ax>>;R0WS_Q^JxdH_Am{>ZBDSyUF$Rw=D3tq!vMR`HqNX1Saf z*fYB##{F}o)_!+;QO|6>!sPWU``H`BBEogE<$(%qMdj7x^iK}4F)e*>Gvd<<=E~&0 zwRcl&!ZQ@%pepljM{Z1<5sSr_ z=3Upw?W+QmyL7`Hol6_LxGaP^s)0CqCf*IH*ia?Ku#Df|_+X2K9(^5k`u0*Fi*m8jgw@ z#c4WlpRNECL9zKp_v_;s%Bom@Nz?PIXB{K$L?d4x{kLcTD%^aQA<0O$eQ;C`%dSc5 zj596t;*krJ)?a)X*7%H6u>L9ww|yH9m6nRHZRxGxVnP?b`t3x+daG>WnH@gYsi=6f zv&p6nwH%{5?*8X-yFSr>1YOMrj%iu%CJuqw%8Yswd0I{XUQAx%SmuqSr1X;@RK=l( zYHXLA>6zC=Sa&Ugi|8ZvEf~BCP+XsB^7!=KSRop4{7cPAsscUs`nzNbKjUhC`dTyQ zMMK$nucEF896Ld-5#jT+N_N^r*RjAWx^9L9I{VY z%8$I(q-~p$;E}G!S1O}$2&-QS)F25gcL0!SQ#tqT0$*_UBY^Y&JRl1!aO>qf{eJyj zh#|-+&AyXUe8;;-D9x3etlY*Jx`Nv)V`QjArK$*Xct@K<&0+k-cRoLR6q)&0_01FJbi;#fh{m~13af*lHh^rMJ_db z4GZBMieRlt)p!e#ZkExhk1Hj#MD@KZ&jJ3(+<8wZlX}IEr{2~Jfi%H2&JPf<>tUJ{ zpJKOf850ZxYKu!v*Bus+@k9~UDzuSG#P+8BrR4(z{B-geQ6Vn1G^f_t##CGUn%sfRVM%ZoJd{4A=~5^p3A?g1TYK=p3e}PnxCjgaX!v70qIgx zxO0=GKhd%uH7BlwGiWLQ&tznOz|*kDR})@)US)YW7JP-2hiFXFZ_f#8uRQ2r%wZu< z*dbhm(kjb6>h}XL*{?fi0w3Qlp3`EOEAfWO*e_3(+S%j`+RWG%XT2?>OCZ+S+QfJ5 z+(T_P3JDkDcuc;bgLeEq1+#}RvA#4%XjZ?{wKf}z(WNy+=Py8{SNa{{U`zj}StDkm z`X#qW#FjgtU1)5dDOyq6LFXxrM)6P9J-y0`Ax!O5Xo9=$&d9@Fx@5jdMYe^{*+F%8 z!#$h>UBmjMz39gD$2UzU(tF@>({uS;c0>OIU=8xbQtKkmUZt%f z-9pZ-T4#oTDq)gH$6WZ7XR6e6Cdr{Dy)xd!0R;BjSNYa%{&B|${QZV$jLjP8KsKrdKC?@3e`JP0W#0 z3WiUWojxm)+BH2XROA1;V(4q-5(6SCm^3L)RI$37y1-69u;&0k{YsY7M`bHTr-jge z0;d@&HF9?~AT%zQ>E$6k5f$LK_u+2n4L<1}2I)7No4dBO?-&zH00)c#xcrBVA}QYt z%b1?3wEC=|Ov@QHo9JBJHsB7Teh*a4xcafKVa?!IpV5R?p}(H$0Tzvd=Gi`*PkZ1| zbSR*4V%^**Y^&dIaj^9oEz~vmyLt`d6#MJBsi)Y@oF1;FtZ!O1_)0`3mlnxfGnIJ< zuPOOoZW zP!QER8C);P=I_3#@g7_>#BAQ+e`7v|n0u#6{{b$DdI%ndbi7RSAWV6 z7qqY3NM~Er{{Tq>Jnh0>N8|okUpqH++G0?)HtBtK5f+p~CsLp^zN}4fPFYeyIPqpL z7N6|~aN$tR=wT^Wb{Eg&ZdEV6xdoatLTKAP>>s*WDfc7$s$KYo(EE3$c6zAP`DlWB z>ex=BFq~TT{jp5kmJ&o=QE?3J^~tWpL*tIJ-8_D&Ww4%AOfo3w&G;cf3LDJI?2;}Z znnkvhaoo6tM_Mjr=c{8=oYAR;GTwS=m=xrx&Bufr#*5RTnJ`X5yG>{PR2k60>Qu=Sy)M+SBD2!){Qj0`QshpHVR(C(c7vWU zj~y+XMbGAn5B8rodR75q#P^adYQF_67O2itJ6Vs?FSxxL`@r#W4MY%sMn2iubNUe>Wuhpe=8{us!J6Q*kI!_=_+(m zB7}wA*eeRQKu(>XO0V8ui1eT}a#heS2#RRluKueO;dolj!v>&hY(}G}g48wgyGF`2 zsn>rA>@v(;uL~B{kY}@*AUEAjPpld|qn2f-SIMqF2~~q=b{gwD$wu+b+A;|~5!Ed7 z!!gq}W0d^uWu?{zj;bg^gHSdw1{U+j;(vh1E16A=&?ku!1&o-teKvtL=|+$ZT8x3P z25G@zmr6dMU$6>7XjsgUy|*8D=VqUH25|IWrla}QomcmJU~FHRghT6VY;rU2zC=;$ zU97`-1BoIL>bBsrNt++VM5yVps$+E~=m~zkw7`FrftysGwU1^JkRpt$GXNF2B2Lt2 zhfYII-w=$$q=4+fTug@D(KYzU(FdfroyOAPRYU1_nAe-~-_{SU+g~37X;NZB8GG9S z^qe|Zbwp-m>uwemf7OTv5i(;&8(ce8G(??|Jw(3gyPf@7=SOOuL3+{?LJ_oNhFgavxzLs zcnEN&(9@g|fQTgIXDz1M=31wGz5~FK0FZr)LsoGP^f?L8%YoNFD!FKEHe7tPvf&d^ z8DDpydBiu_sdEN5Eh-Y+T`EA=z6z48zk~P~Wi1Y6m5(U9*=GUTH%W_yJi4&6!nOnBTwnrP8 zTH``RleWb>e_N9CNlvz<7canR<-Sh75@|u-qhGocAJIe^{!nKrHs`Z!L5M6|D*t7A zJEQPH1i^;|tWR`)5vED4{{Rne%fq%3)#8HfAOIT#m&t(aWE}&A1rLVd`j-}vwv&i9 zJ=fB&3^)!N5;tALHWoyyGIAN+U);5^ZhG5sftt#w1a`VYZYXM@!qq1Dmfs_^C&yM3 zFo2_~F=~%MP-IW-&SbM&tqwnB^{_%W40izJ9_hxjg1Jqj-uFof9*??PLvFpccVTrh z@bZ;>BMfk4=mc-N@GQd%ZRXxU7`>3YwAn>X3)BSK4FKqz@FhPGL(zE~F+MA;0M>GI zL=KcqzW@5+-jti=y^L-1#lsM3{E?W{%}6n4Ygrqd=&X7HG)f34(V?<8Xvw;>xE>f`mu^It*X{km^`QH5J8(GTok*i%Y*ZAF$ z(vH_;Wx-X4%oB8=an0%#D+^^@)VIUii+|;U{f`y$B)^)v#By=h$z>N5eyy`pxhn0+ zvTec!s2T)UM_vyP&~HPGzd^=A80s`f?2x0jP<>*TW@e?VCb-JsQ?24Vg4ReM+n~q? zQsi2+KQoOE2Cd;$#W0yAwu!0Sd>zXI8r59j;9^^;VbMmg=&t9N?e&xuM;nf0`0fgO zuJ>uWdRFOtM@rBb0C%FWu_~XP3HM5`sSiJj5HcADA6jJY&<#l2J;1*ig9#40hM$pO z#QVgE9MNa#7QxXl>0Id}bq0zji*7H8c?=@ve0}HI{q=hj^u|-^pNv6gXEt}>?I;u} zNXC*y4WSHDOso+<>AO7_DaE*6%EGRc))(U5I3LuK1k_U^Rs!^kh_y6aaN?xfR(L%nB-t{N&0*DqeEr;EEoVNZ;$J9KM~7 zMDo76Mo$J3+Rg6I~e3Llyq>o4+3qxH6Ea;W1FFnCM#Q1K3O z_ko)V%j16R3)^cQ@Sx$_DE*NCz?P(%D@1|_Av|M@J;fC_G!g`PV!p8!HJS8{F|@i! zndOYsC@cD@qhhnXS!VFs=p-g`fLio$IX&{ObLq!SJ9Qx8DH_`!>LTO#`f5#@akJqye!XMCtRe_%Tu`2I>V@v z?L}HrS5P>L6kXmNhoiG?PPb6~Z-V3|dK*RY}e1aFW&LR9aCl11GN_~y?LMeMyBIpGx^s+ zB*pFt#$n>XkCD**D|!>5jJ!2$u!hA6i;?2OI}i|l$2&AGI|i00vf2RpdS$y(lO1J`KR~2?C%(_leO>SHTWDCIwYxq= zvf+)@U5dIl_m4r{V4)=e+Ze@%yX$~H2$j;TgUqYqupD1cY*-+pM^+9jh@X)XE;bBFP=68?l z?j0f`i9s-xus;dg#xhGK69wao*lE5JSJ6t%O{)XtxU)&K%Lw}di!;`igJw_kEj0@v zzy|--l`HRlnhM1m9I%)^8iP)KSr;WSZ=1YJ?B4RfaaY5n4^&3+f}4MFm|vp{Fu>mQkgBd923g>(LUau>qRC+ zjVd5=_}~dP1EWnYR7I%9*$51ouEC;>v4wBa%}ryI#^6@{c`Rfq-$gor;jZZ?vmNOB zfk_gMjht}E_5IgBAsKybi*>NpbOB7;{%4HqbXi37{E64)(sH<6;=5`sVEYbcY*ITc z4*k8=KwrBNt+U-N98@bTyt4dlqFi7R+YK3z0&S?fF@*|fr>bab z1j$1z@YJ=`j2FY%+kHIt7C_p$I#Z2C(HFr-O<0ruSs59tOLAwWM-WY699E(===|x~ zR-s#cf~FRuoEf--+Q`blnS0EjZ4)l89r*4Xj>N*ilHsIvEJCNqw2b?vl48BMNLf=^3<0)pGROaR7BoznB{Hxw1rldBW=5~Y9%K?2 z8*C_5(~DpW26Zb=`qSPp1hpteq8F!uK1c(8&SpfZ>!?9)+d=@1h3y2*UP zDH+q(VM7E`u|EiY zRsJ#-ttayVH$^i;m5|z?j-@OzGx(K!jkK()bzJ6CSEimvF)d^P>0q{_od7|DgU`Xv zzh-FPAxq&9A}SzWu))MXGO(H%;66cO28hfqM3Ii8jLzcsRD&+|WX0i7&QA8-oBwT_ zGx$^PkZ@@OL&)uX(nZaZ;xsB=DtgCLwB^XEvPgD*D)|}n69la2>JFW{;`UOs$z(gl zCX>kUx6s-=eD+G9D>vLCj0bZ{gS;~qzuaQmU?>lOXexAF-dUc};v$E@rihypB^l8AhE7R|pOt$XO(>APE()WC%g@vyZ z{JwwRlN(ecxxG5+6b`Sz0m68%eTpJ|+3sYruyoDG`qwWLWd*ydn#~V>aZ2wEqz7eX z!or%~js5_i+jyh{#}*Ry&7?1qq}F!K{j+E)L(+o~$k8_Q^()q5TRu&Gf##9bma$vyzKWP?&wxzpDpUHE~WmB~HqDy^rx=d83F0 z#UEK2qipQFcVC`;KUd3N|HYGUdMseH;6~k@t4L(B2f1#v>c^(`2h)mfT()pHU+FbA zP{^&Chnc&FY^#^Hv?lX{k?pG$U?8@`mdQb+5%PH?)e;d|pH1VZOkc!Xuld_gM5Jao zwM*mU6X|$f^U@t}KJW<*qMJjdAUeFQBK7B*b1=PKxV$SSPG45bO^Q|%(8mN*CL?e0 zsOvA|+TE~!`w6n*k&Mzu&+jTlfjx)epY$25twYMVYWbVF?uBL!74_nX@G(wILn zVw~y4uR7PC+k>w`<%s&SxJ&mbv~_t0u})SCi@O8W zgdClq)hdGi&0spFNd8*e>W4dtJFU#R?(F(ZFeQCWb*+nE;lX-ie&Uh76;V@lHep$L z1%bDiRS1B_9<{+&u1x(VL<>2DO7-k%I}0gOuZb5lgvlzFlS4F{443kA=adNxr=-qY zWdO_j4QVn0ER?Ag^vO_xv|O}(;4iY{`@oq8J0SGlI23kykIMou1~?*UxSJS&H!}m# zJe`G>&fo(7<+YHnEVnS4oB5947ZFA#yAZV8E!?VF4UpAIljutB(MG(twT~Usmu|Qq zls9l`A7)te8?7E{M9}AJq|WS56%UOrZW(5`pfEF@dTUKfSp{ojrfAWM{7lYS)*e*q zmog{21YWMF>vJ%t0FR?BkjTK85=))*LCX&yyONT!g%hvZ>44x?8SS!8r$46zpDIzQ zC`2!@d2I8+3j3W`4o2Qm-PVz=MPoew`30FtGMs4bR(dq_wPf$OG?y84vmX z4&tLSs1^@);*Pr|DtDJ6$ph_j<(p=%sTCruMX90E^x7%OyhE=010pIg4b=uWOK_@A^$kACmBFes z)tnybW6x*rk?VLS^P59eI;{);U6?E5mc=)h@{$gfdVP=T76Z19S(mmAi1ZTpO1%G# z#g+z!polU7d(DNJlS-A`XGs!pr}oPFfx3bRDfS9ir^YUM{UIf&Rt;4${>%E?^GaZm zc+Zl7hhC5I4|Wdcy@Sni)C@O-pLbh?oyhV_a(}cO(c+DQ)>_B%#L0q||FvuYOy*s5 zLW;kCi?S$zuTK~PdGVB^8>LZj>7;f>n`17zwOC46MYBo0ow2}r^|NoO^OKFKx$1SkX;(-SA` z@x}ozWcTd-<`$=>VP{e>P5rHKJqYKu7JbHUy4StW*Vxn`(cP#0#NC3+MC8n>uJL`7 z`-lC1*Ha%$d`T_B1xd9!XTC~^{>yVjbu@fx+R8c)`g8{5;CzU$kE8aF$j@D_s=*>i}cV!DcUIKaT z)Z!D<*5r%X?{O7{(7!pCX2KX?5Wp1`!j|g+Fqxdq^opT@x%p{!MVnsw{T^=zm1~xJ zwzCe;fCJA?Hd9ii*zNQe==!69S0~+N;fx_YHMpE6m&~~?B1Cqe{a!|oR6{8O+mdNO z1(l~P0HaCImOhodV3xdkw}7UWbA33ia82g>8E2;ITD_9$7#O%#s+^F3bCWBNc+G$} z(qb4@Q($6Ad+KimUxx=66#EKsLY>*<&81SPE8W zQcf}_c;9z&yoqZy9x~YiW=N?8V#l94hiAW;&#ddLKtlLf7*+X^7q&$!nXe7zZB4$I ze7lxfQ81siXz zJH~B@Q*1bNov%!XZ`yP-zE18Q81u`VI(Jp93o~Z3+PMe+1?=~})#f)SxL)KvH@fDP zLAFW0$c#Z~rxXm8w%xiozizJJcQZ+vGb2;8>{V`T!7Ck}P3zq!4VMnNEMS)fX5Ri# z)?^{oAE0+~2TV63a~Lj{>uJBJGy2xR$QzEYBo$s)3;ftNI+-GjFagOnRyjDU6SV3s z6Jz0-y;ZCDmc<1`DMrZqWr$3^+_Ttz)a}D9;_!A`A%T7U@$e zw#IggG&_PUROSt`OxDm^>D)A}iP0~pczgF|p>t#`Nb`wT$f&X6{YVeTcLLNJTx8d; zyU@Q=dRF}wzfE?rQ+YRwU&!BOfbx3);F(cpHm*0O9^byTjn{2Wg&>^R+KGnbn%o~l z>5g6`KA8lrMayz6pIhul*7&Z?45>VeDIr!0`Jnu_nSF|xS)+7%lBNU(*>_3Xy-o2a z+L!bKO+288l`H>q9A^ycbIIDNJyOL%XHwI|KRTf}`buGg8m$4n-q(ZOjB64-g%+SsCR;q+l+bAv20xv2k1KPK{(P zW1djeDvfR`cn$gX&ElfJgOLnY8ht`jZQGuDk8%6YJ=$@Feo)1tYTo33j8&Wf5aClD z+60XbChbu5>8brwa=@)) zRVe$xzc%@zHpZ@};_8_GgF?EF15*@mN3BLsKjsB~(F zE-jd)JN)pvt4toW(>`N|&yY0T5xaumw( zI-ZX0U_&~3>)B|_%#$|JB0B5|Dzs{R%;eG4Tn+<*u#KIrf$HG?ri~2HPi^l8U?XUU zBnSY_({BHXn0ry76>o)G8Yn3ptK2A z;e(^9Hst{0qJnN~ zPF!i47UoEUoMmpol_OCx7tV5IZp;Om1G5}yX^0awMV#QCIWx#vRX zN*6Dd8q)yDONhKa* z)J2I33>s^)c0dd}yX7D7!H)S$1qYAmz-B=)w`v9sn`XK*%gMk~9BY;RcbUfw6)hBS zjfA>yEQSrOB3`9CZrvvN-^?!tna*MHT4gdi1O1fAW-_YvM_?G}n37J7*odkcO4KLi z55_%rSB>{A+2@fnHz;Y@Vd4n3Yti)uHY#ZA6- zh>vZ*e1PDn({%rf`rr^UI`Ksr;x}8{BpUl6CQEQD+6>7W_U+AEx}m#60wnt8TU>MT zcnS;%PDR*jLp3LP72C$NGjP{Lm$sJT#!p<>e4oJz?&Y=#pHDqP$EM>ZV@PmTsf^mP zyqAry1xMBKjTM938zR^#xT2yumX_h`g3PRZBvsuLxK@KUTjW^56Ru@GrxL8|w8E*GqfKCjm+iIcvk9qeuKXyp4LA>V4PP?*mA@Xft&41SIJsxNy%W3Rpj{juq z`AKDZmToC}cMb$59+wz$7;9;nf@5^n(v8N9xFe&bU}2xvt((WjXeonx9zdXJ^O_r;=f9_(Jd1&mK7#?swrJc9o+sJNdb>3dFH zf236;b_d^yd<+TOGJ=dP3u-s!g1BMixj^=v2Tlo%Mvg8&bz!2@LO|erRGh<9l@jY3H)SpG5itD zkNv?)l*c=UsjId!ZGCs*l)FD+IYa~vtMy)+?NZM1j@WN0GOeR#sBB3(8}z6G_dc;~ z`@(m6d&WQGPmS@lHzmBOv$bT&tV}VwAzS%V6;!wm2yl&A^p>*9)+fgaIwzFcO_dJ{@0O1XUZgs6#8!NL@G>vg7(xH2Qd{p6LA*W<8bL^IW z3o=+_gJoNNd<+lRx%X>yvL9ON_uZT|OSMJlaY5N!|AFxaizHL5absRzVacywVVXxH zNL+5~!D3jTx!KZIB7FZ@1}+Z!WFMvH7Mq6JndUT2;DJe`8Cs?RwKMvxNbH-<-m;5< z-f!(%8}$>|uxMSXB6LK>@)b;baeN{@%1p{}wq2<1P;4O)&Hz{y5E5s`c`XyW2$8S0 zOndix-`-fFK1ZO$g`o5oAL?BH<~VW}LXQx9aq;gy5W5Kc=Do<)MPX>ehmjR7(c8Mh z6P`6xgir_^z|;Y!J^jQxle?bsUJdc^cKEFst%?SxDlp9XNWSzE*8g;6*WJA56v? z#{asmhtUAY=2YY)<*19_+Qkpj^oG*UY`(`D4iZnh1oS4%bY!k*g;)OA57qdu4{$!q zA6{Iko@NsHI`v|{JhcCJllI@AUxQk0LheQ51C{b0WI@WnV)+kth)7qI|DDY~aA<2O zAGbP1W6}jgN5D_2NEiVFIA;aq%+L)2IiYt=1sA%&ZRggpE)3BlV#9B^%*JMjng4ZO z=)tJjX{p?hv!jc?CddI{VP_A;0~JUbQ^|6)|A3&f&uXf>>5VQ@D^_c-;&7F};N~q& z!49VPU};aQ8C>m16tWFV^w==aC!t|jM{ul33;eVed57TCRx6uCe!Td`)yDT-8js`E zu=VEjxLqyjdN@@-Q*vQG4{}F|Ywei&`0j$^+r^AFrv*qlTcM%(gV#wf;`=bD0Z!O+ zB_?`#OvuXTSELM)=;3+mU@F*@o}d3q2kho+26D@rf>?rx+>60wiynbN`Tj?g#re86 z+i&h-Ywo1%(tVDPP)}DSQ}0)gTC&cM3SKVW#~X>hx5d2vc)g?BSS{G=i@PCVjl1CI z{gD5ZaL4_y>fB?AOD)W#f*E1<=5?LFUxD?tdWty+kz~2Xj@35WLmBzS5Y}e3^ntJD z!q^$PwA^BVFs!<)htLJ<-`TQ+%!e%QlzIs9-Q~rrN2yOX^X#vYj`UceAb-*{SXyw% zofH*Z6(HyCUmKwiCI2iopGNGYV$4{j``cDXk*JYtKs1-3t`)SjVw`e(9p=hyG%y0g z2X%3n$)o6u*Y~38lRwDXr=q0eD;e{3M|Z)6LYPPcIRNO-A!4GL?K{tNglU|m?wS`Q zk>)?*D4HppihF?!-$InQ z+P|u&sgL)pF{jYq3@^;UB@X&q&!hF%n~O_QpEhx})}Fp1-%*skO#z6Q-lgRgGXa82 z%jcfy$4I4P^3o>~WMzv~ms({uK^x>b-i#C-s?v6(l;|$!gpOGlg2*8r zqx`(M=W*9Hb`73g6I`XBq_iAg&_^;aUo+B%wtHa*I=i7G=yLb5sNK zTL!XqA>R$TVhNn-JEp0F{fs{szY*)NfFX>~{*pFl`(UPP@|6Sw!IBeZ!u~0XcrGw? z1}BEw6+XG3-%XQP2VGc>j{2f<$u?%qc zFA?rCf$nnd&NOOnmF-R)YhqzvbCCtkC0swRuuM#PAJR8doFP~|RKCbg zHoB_P1?^LLK_0j~^Qjm0p?kBHY7U%9y~f>1@&=2ot!ySfmYChd<$R1=dLp+t@6RR_ zloF;D)C-NN9^yLfg=HnZ;JcuF_qwg@fTrkU>5gy@-b&d;9eZMOHWu0F5A?_8Ba(+a zm;$V}QCsaHvyjm0D>AR|nxaN95>`TT6Qs3`l91PvK+3^``(Ua60i?KiU?bOYl|TS@ zn+n2&FzDcmij33Y=i`P_O%(=LE`wpaGRVtP=7O8E)$(Fl0B#;Ezeb1P>sg1SMRsV{ zEh=iT1)5b37zYv{E-?G3#5z_!;=D5WGq5F&X;N^rGFDnn@{Hs8uTHOi48 z^$TN8t1Eohs~Tx(xVfxKSiSSo!k?xSX@<{#@$UREXC0LJ`}Li^5Uai8~`!w7BCQ z>X({mUeeUNTWs?dD;LrD7gkG$ypR}Ux-09Au9D$r>{VkcMW$3L_Eg}lC4OjG0o@MK zBkQ}#L`?bfZh{NF^z5REy|V=G5k(F8j)zE1V%gPs8oT$ z2!Ni+N%K&<$O;pXQ8aD;&b@bX<&h3{C1fAfAot&YJBy;zkm}AGr*2KU8+?1|asEeN zz1vL}a~DEXf(D+(GgV70eF92`IupRrmqUZ-4Yfglv##V!+>o?(WXgKe_{{CMq@HA~ zuSWwWBzDNNgfRb29IrsnMG^8Wv8SSqy9;P1L*Ra6%C$GK{>=0zL!YGC_=oGr{)sgB zV#tWXg0~*fd6|IAY9$=YTye+L-;R-Q-7^zT?nuQ?i}pdH6yav*d5V-h;EFdr$)jSb z7QEk|vyQE=ZOi)oxq!E+c+_~;z(_cp47;<3Mdnrg2LuYbS)#W0(6CA$eHj)ejX+oz zWywDs1g2AidWmMA1U}B;pAdKH)k2b$6|4Wf`-#?P~uhJQ(sy2t%kGf@zTJ~)9Uw-$^kY2<=0EULVx0?*tmev_%{M{jU*!muHdA+oAtq} zBkk2jwoVVJxJgd$?&$vj3TRq!0^zereH#WIVO=i65Adib6}?U0Y?02FyixtpGPh6< z!u2V2G3bAQ?UJlCK~VH^zHoo?`*=`)mx%Oz>q=F#AQ}Z7u&8fp@Vh_Ck*&XTQ>#zl zy2k*fN911yS+5+z^jDhy?78AUoAIe|-xgu_yj?}uPw|z8kZ&bQEAEWOK>p2qtRFyD z)R;-&`iF~aKO1o*YFmJca&19Y$BEI6FHsJpvk{s1w=ZwrEH3EYlptV1f<)lLqTn4a8$ zZv3J<1X~6Q)nOA~wX-v9dhaBruW2|;)?9#bdv7XuP|$lhfEiY?=7SEUS@}+J8Zi85bB~Ws#BxU%x{(qE&AC z>u#BA2!tGg%S67TjOS14iwI5bY(2AIv@XEHkmdmhOw?Tes5&z3(JM7(FJegHgWQI> z1hsas*d6`Ysr(1toFG`&qc0-TG+wbqe$t;wh`X(;wuhDhGWllBh@PRYxWXMD_srja?J!ucPlETQc(RD}2m58~J7xve1J^XN z4;Moy$`vo6^e!J?`GNms6MNiZyRnOnA)@kTuQ@O%M9i9IdPz+pn5yem7h%_ixwvvn}lub{4(~ zJ1$>;W2^fydO>8H&(`3HB=gmB@|D5mB9ltli=RjZq&CX%U`W9=M{Bae=r^T46-IX> z6Rw|AGfFWI8bwb3CY(d$FPOg+GGSu^JYy>4U~6<(3W)8ig5IxTHN=q2vY zza>oz=VwGI&E{;}&c69lq_T2~q*eVfM%_*+WTH(B9qrKl`m>1@sj<32(cJ}Go;dNyM&uksl<>vHQm_s+Dj%RR8UH;AT`>uHY=^dNbK~xjBUoH^c3JztEbZg zJG^aQom;vp;=7mFC;Npm!r+Y4d|ZVvI5WvDhVBu-`&MX{nWkk$~N;$>q0!r&R$$ zPsDv$cA}S4xYB2`FeD)Mp{77*pU8LPCeM*e^&l4^65B~(GMxEv&rD8HDZd&#l8(<7 zke00Ot&3U{7FO#}hK(wXqPlhdY!*_%s;jLJf-P zk(oKT!|2y0&PDVnD#i#jP!VWivgmBEpx6uNX4tYDbww^DixTuE5Erq@<_MY{OZXQ4 zxWu+%cr@fehI`if5Km5_=c*VfGQ#F{mW9$6iVTyCi|BJ+2dW}sFI&s`li!e^D;zzd z5dxLWd8p(MN-^|B?mK$b3Quc%Xpap6d$JiSlMiFCPXJa!wZfrm;|NR-?1=1s!kLma z$36;=I4OL%F^Z8M9{d`w5wvGC`bv>i78pj!U988Q-ALvnHGc5_W{3zmegeQZfl`@L z(?{G(6A2RjOVYO?)44JK@r_CD7@?vtOG;~{SHf$p3q zakQ*hOT#srcDvO1cuYi1#gxrm3ob8R5p+mjmyfd<;ZTZ#;0a}>y6E81LKoyxuh4H^ z;=jh>vVnmyiu8Jh+S6kJ>1MS@pg$jPKSY>r3b(A9c_Fifb6iq_cQssV2JBzsxwws$ zfnrD?{Tr=C1l?m7b_p(TH`iTsZF3vwqo16njz=5O5YA~Pp8 z<$DGrdm_VO1r2UwiQOZS0j^juNnr#|6Y1p6D2%5Q8SYjlx0^~U2F#iEfh0v+OJ72S z(Y^BhC2ssmczKKr?Q!78M@;MQX!V_66MAK#)D?MD`E~pQa<5~kuf-a-Ie*2UC#zqY zxCYIIqY(`ffmmdO_my$~uXr=*!6n$JRQQ!2$|GOV$upF_GnONfjb#0?YKavdNBRg^ zU~I?K)=_v`YQbV0-4hdJdXt~w%Y24BljLzRhL>pj!Pj)o);B1}N_=4qYw)D+depx> ztsPO5ZRDJ3uRZSguk?t#AhTyGQBKR7uNIy7v@Dmxs8^i1Ln9FVAfl+t?x5A5g(b)( zn8;RRmPKpsP!Rl=#w70bRdv<{o=c`Z=YT^+-y9%3MBivhYfb}B zwT~J(la}3>a>6ni=tp8kAbH5&@WT6MsCKc9*61POx4{LiB0LB+%HrzAxdlxcRQbh1 zWWz-PtUMw2O)1CliHkyC6SVGY{ruaeg$vOo;8Y_aU`^x}Ri`{Q##G#+Q)|h zudweZ!PARM_@g#E=+<&ZLsX=}t(ju1zxY$$1H@j}TC&e$)m_nSvf_*W1H&FVzC(F{ zgfW0N!&kx!5p`54uGg)iG7h2A9Xbe|-rKo^&b6G!(5+*Ko2^2kA#9>`Y!=RryYv<8!-iI=g-+vctw2p|ov@%iDCu7SUc~g`gcsH@mb<>TG z_@iHIr9)drh}3r(ihiPv`*Taw1jWT4=GD^BdrWE4oYF9Gs$sS^LHPZA+(Ge`139Ji z8M=)Diwytp(Cj_!4QtT06ymr4Rq<{e272>Z(OCFj20GbCEzTKxKIPN>-TEolFZK~u z_?nx@7T4=BGS~?8lh%Y~FFAHGl4K-a^VjJUDR1vQ{!{+X#|sd2UwN;fIMS_bvqk^wF1sEzqLA+TDbmkUicq3k~eh z3yorz{-c2z%~*jQ(Ej$9`WCA-RdTS0Yp`wgZ&_loTlk}wk88B|y@lYIuq_)AYE|#O z3inINn`Q&PX?=;05g$V#SCNZ{wAY`vWqH7~43Xj%{+V>nK2TvIf%%et()6Tsc=BP` zR{EY9U%ft+UbA@h4cxWbA!AHpRWjE01G*0|5*Y)v8-LOd)k~}d2Q*JhOY-mdqm;?y zBbH~BI2;+`D5~{%QuF4rtK1)e#%#`<@Nh*S3-;m5H3Mr$ybe`k_VV>2GgWo5rK*t2 z*@il)OHC|5%b{UcfSgmZkmW&z>5DQdgMaRtvwqwDwWe5xdz2QN zGR+1fuNXnA`BOitFdku}<}uQCsST2-U&id)ryR@hUl%yPJC%IjZHZ)Pndtw+4!pkC z>nCSsebywoj4?_dxp5j8VX;e=2hK7QAlAR<&L_FrGj=V^0;NqKF5k-y2=;n7diTD+ z2HO4ypPa7Qi%pRo*YkUfPWof3v~0^44pN$d#I-lzyx}uR8=SO5w_@@ zbj#*=;(QCA(ZeCYvB% zZ;Y7|Zv0!RfTed|L`S?wu`CscMwXPO4boYoWP?pUH8&M$M|$yRN;!SDhKyKHc(Ww2 z!MRQ%(s1Ga3|(Wa#5rbk^q2V};mf-n;iUl)Ij7gu+6%TE)|kXrFbYQYB31O5_y|;; zZb^WMdOu9<5@Yy_k|3;$mOL1<=eg(pQR|>t<ovL&U3KM-54{T2hW(? zW1#ye)6ZK|NmaVwv{EL}iu*~4{)TLzb)+;c9fy5Huct)G3B z%Wv3$wf>ebB#H}1MxqMh0y13ao#F3K;n}`f#{#&b;^NTDS#MosFPdwHme$>fGH=5- zmTgxo{2b$-5VPrY3^||rlBO1sByr5P&e1o#$`rd}u6SVuuP`aH&G>0O+Y1O1P~K^> z_G$sqDN(gIt&8+qRA1!2%tWj{v3cU@j84o1jt2FR*eFm-FeCQalNZx#YlC_RDJ$F; zqkziEZEQ?(=5FvG-{DI57boSsg9ekg4s3~}9G|O(=noEl5bn=iS~B9YAIyP_B`n4_ z4wHTC^X$L@zz!+o)7b!v37=yg<;*R-^a7^>7|K-Iq0)7Tp8?du7)km>d0#%Qh#A7I z(V|oF`8%A82`}RMzbo`B$Ax@)_VaYlEF4r(3TVNqU6SaQXWLm&;Ximxu|ieKd$}g^ z|0!_eFI;mM#y>~+zS8H(^_EQ6aWMv@i-!3aOBRRfA$4f$Cwt%W+lO6-H{!3tO-_$&J$Yy12AS}*e6Ts1OjU!EY_bkp!?jGa|Xe#U7<|pmJ;{C1(0LP zZ0n-aF86Nmqt9y14FC2Z6PYdx@#-$fr+=8D#~wJI`CFtJAJ_<)bwAiu`52PRzlIE8 zF?J)(m1`D!iqm+zXbr#9$vrJ_ed#PjB>jf$hZ`##pt@w7I~_R9OU!WI)I`=Vwk;~r zpAIU>!0IZ~yj^L}MG(ncSueLGIwgoCqpH*6GB&7vYzDAz9bKKGJx!xDz1z1+GZ}W7 zulhW;swd_8>F0g~O<>6Fj8^BW7u{Fwli_wC{|<8u>J)dqBJqa5vaMbCh_zJbI?ERl z`nYWK*AEbv{1#pb5s1sd%%LAY_Lc)tciC<&%)bG7IV#3$7dNq0eF6lkueOo9^oB9O zCNHR7{<}A7YlPV68LH|1$NUEh4jipxWo6CBu4-O01fZ|WbVX{5lHB|v;ZyeSlG>+J z=zWH07ony*X!yLj^Ar{C#mp6vnA>v2t5UoTx~&;w2qtaPQZsfTdBYu%TNR=z8m~P6 z2k^|}AAGqnq_8U!9`1HP-*NJSMs3GA2HxpcXZj~z3EE4F`sAx6?Rhw?75^` z_4pYsou?J|bcy}AtnVNdsC>cN02#~AEOEzGy#2`H`%|5%}`376+Kq1ahggs>XfW8@cts>b8n!s`uNhor;2$r>10?@{>Og6PBB zHK;C*n2wO-4pSrhq|NvDaY$W&NFgqWbU}Lt|2B`s@_)r5r<_PtDWr1*07zajNnId|NYJl9E$Y$FwM-2mSve0A5Vn3PHHt?NmOYB*`Z z)hUaMP%*I`3m%2gwFHg*Yat~`pC=)J&nr9#+b7ix`8Zy1V%V(n3UGGgFyS{nVRl;#mZB`;pzFTRI{&Q3x-WfC=d+w9`SmH0O zn9{+jkqPE7)=YegmIZL``j;xF4z0H>%L6Sv5CzM}be?d^vum(P( ze{k(3B$7q5nN2LYJMHcvZ{jaQv`ysIcWs>JPuPa%R-%B9EPL3xpz{tNv6wV*=ruJk zJ-d(SrLr15oFRPc*lhFX$?SiMzUf=|E}iOQ^U6JrA&44b?c>xH0(vz01cLi&%^m)` zi8n21eAJQF^hWV6<6i#~DPtN_G3W+HiwPg|rxp$Np?ln9P`qZ`n@e=q-NtF+)Pji* z_2y$B81g?rD6LwyW^omy0?c&M4Im`+&EzGgHoOr#u1NP+Q^MHY3ltGFf*j(fJ~L@t znj&?E92J5g@j{7zrTaNV>1*_W(|7Nsyz%viH&?hLHi#3M19TpbyC6)9E(#|sO3#DV z@bT}g!w=Tni8XogE;UO9hei|r7g88R${TG#A@Vl!w-fkPN zQ*&Q&w!KS{asB%5o<3BQ1f-;Hr+-KJYixhL|XKoH<;w~?EKT4LDm0C4c za1kd<_`q(=EAH}JMm8^ejj7?9hxe`59b4?=Zs!aq6n#$V6XKjPDca!w$`3 zjJthKC1we$RkEGpdUt&{K2&sStysXVaHohh!B|Wi zJyQUnmTKaD=GaOpPBcf3z#WF+J=eAzYwYamHQy~J4TLf=ymXdM(@VW$rqv5ADl<5g zUqUaxbbWu({>i`|!uYdFnVKK#P0Lo8Qx(cdCobcnVFCa8jT91~kG0^?@peCp<0H^c zq{gLN_EQ<~0)9by)8QV6-$IU{yHsb=&`e62TOWrlIS3gNsb^|b1;B0kui{PbvN}9s z#ZG8rG=Ky!C_cy=i+~HY>vpl^o|NS6uVs#DxgBq`l-x&Pp+` zb%88y2mXz@Dkk&IFHyrAeZ-Zm3DCsKz0}5_i?S zyofM4p74#uT=;zQsxU)Tw}M5!fWqz|bl9wLKbMK*kgB9={~|ia zU9j)oq!9qe9WiMf4Ag3$7=@cH($l~udf9&qLZ~Qty7-2^gsfd&I^Hq8CQFaj)BNIb z{?j^U8o#{RE@pyb;hgkJ{1krxAzX|;G{{=K$}OY#%sIjeojSg$jOWq%t5t3fwTMV0 zLs~A!e1I~GqWYs;NK54^&6d< z(GGkD*{^`n{jkc7Cc^IUx*x9cRd*eb_&hv-|OB%-xI2!mX zy=x-XhZy!_5)%RXqe#fJHkkHO8PY5wMq^T*j_m~P*hmH@opT4W>U`%8vW%(-ip7oh zW{WN#Ez19q&COHud<~fwX$W&xN2;$74^6p7qKVwp?6veE;qyehQwRO#;?H`*Ed2+T znmTBb`nc0?J|&~o@UL%EX_TK$?=l-NR%CV_=yOE@D61SsD-$?e8Xd79jrmhX()I`a?jJLDb+<6elf_<%@w7Aqn;xp@Br=IxDCXMY+ zeKM8qsp&=*3`9O@0T5#l4$0Sf{Ov7r_rm?;U#G%Hd#3Kr;Tsv3Qg|L>&8ik>Ca{>g z53$pRllY^hH#;-AZBbg^xjHvBX&F_!$~6g=PzYCqm67oI)q7dcQR(84)iDItz(=Az z?RpvW@rg1`=etHIr6 zO-B~)=MDlOx#8b55mCuF&Jm*+R?2L>(@!DRV(;a5*QXoLReDPUL|3f-)EP_u;HUOG zH@<;H?h`5z-*X+E+LihcA&fljL>d=Cn?%V8N>j=w-*eDi(`132g_rz#by_Icfi}AT z&p*fpy{p;xYZF9aW)>dj6mDD%(HlLD;q(25p&>yc%Bf&SJTVD>3c$b{F1^Y9K3IFiJTtS{T%4 z8Me{L-V0h2x41o47}c$GfGr6Bjg5?b$4j)r8uG1|0{x>>&?DvHH0(DbJ2SoBiZrc$ zp{@g1t!BZl1#MX#1w3%P*#34z3KE^n71A=)D@J8C{A$Vf83rw97xRLWpS+JNSg9Be zQ=Y|P4Eb{xuFd3ccwmDPDbtM}er4Un;L^A=L(R~#>FEBE+j@rn8|3CWQgL&pmeOBo zMACb_!S%J+c*=U6@wdFR?-$bKR9E?@bdBDp#uwwm@5I3#i?9U0Wa;06Pvn!;f*6f7 zk#67+Y{+p*wTP9_exFA&Qj(*(;*D%mo>b1Vl+5$Z29Em6vuQRWw1Oql= z#raJlyO&=6z&>s4Y#YV$I3HDflF)jNxJSgMkLO?=<63{fVS*y%!>Tbx{l^rpGO+T} z=B++{NZLD@*=q#ONr@b5{}q?Z!5%Ae8yg=fAn`F;83!ev_f*mho`;NbMI8qDs3Gik+;(U_ZxN}Pv2-*)X_meC;Sd0+UdUaq_J|IcHzVBi# z$uG+rV~#L)dN~Y>q5?K&2pNpfZ^e&DM+HiZ468FWqcc3Z3z(NoKTBlVqhP&aHy8x( zJg{X3D4KHY=t8nfnBY3hqUO~~=siPM1})Tb|4mI?j8ZQ>pyrmQG0Bv7MunCPK(N-; z0^M7DY*RIn(i~CCjU%5nC$*$^Lyx|de@=2J`voK`-&G=cYw|e$gm2*R;s0!;O`g={ zm^_-ZOdpX58&N}ho+S?%8ADc&OGVU}a~HF`=efUhn6j97HA#-@44g9{?7RW#Igy6$ zEh5peeXAyoinvgUM+y$3fJbS&j~aN9YuLhHNpIn--q)$~=9^7T-!!*M-!VB2+On>i zL|!S7ztA3|ogu@*yjM`~$n|qMX-!n!qGL(d2`{!PhAeuc)q&zf@0l5%g>8PJrMJ(i z3YP`tn0{1M$G=A^HR~`Vc^jD~=Sz|E4rw4NYuHJt?@}KF>gCPO(^An785$jyYHeZw zMkaJ32G6bV-(<*Ysns&UCgu>|Xxg3-&d1P-`x!k$s^9C{xo5$TH`l7LAe$MBS>!g+ zZq-om#5-Y}E{u;S-a}b?ZK;Ohap5(j&qTR>EmN%B%fqWb552C%1=&S>_cJJ^Tk7XO zAp)vdSaf_Jb;zm@G{XzhcM>PA0I23-=jV2JzzuD5RB-h;c0J=~W4ie~pMe~M$o9pj zwBl!9u<2~%*fgE30~2Gt1I(-pZ9T5<(XYA@D8cb$ug~W-OLJML{<+nvKVutc%)ikp zEiUo_FUOx!=chmZFgP9T#Q zSCG@C#B#aE_XP(hzzkebd?A~^RMgiI_0IIy|ks%RSS;CpBTWK_|>g>nNg0 zP)dNsU=S5+-LN-Euxfg@K{z&Z5QHI+?O+D^J0I~cn+%0mJvrocd$88{iZsmgt0-}d z^^XXfQi=IGl%JZ+(x)h;RFXXFV}5am7vTC{-!D%mE^E5ycekyW&j+=}s7K7yWhtIw z{R3wj2%|d&Y~#YDmy=}wz9?;*&Mn7(3DRNk!+4RX>Z5deT{yI=gKX+1g0HY!KfbYg zZTUn+ly=|o(kvOFXySrn$kAc<>$#QxmA`23hG?lCLb}NIS({_NzA*zlWiyUxKj+fz zeh|2x4CbTf)Sd7|q*6-8y&`}!C3Tp6!Ibc(({QY$T zXDX?29q`1ZV5&vbGfQ8~xnVA8YDIo@_tyoD5C)LoF{OcbYE85|MOse7CA8`R+D-*A z&jhsi=K6WI zF)W6{4m*n;7?JM>#pb(qRH7Q^y`L_g+eefs%6hTHqgs`;b&-H?xor+&>qcbWRM9oD zH4Kl>sJ!WiS2qg_)&OZbYp2EHm_oQY+SC@x0kE7ef!p|Z@^)2UF9dxq9I{{jhIxTK zzv`*b2YNJOD&1v;+ssKYa>ly+QqX(do-y6Qwdy&^BL&yTXq8{~40;K`x;3fm*(c8` z%gVM4@~m5-%(EO6cbAKiiZ2dR!Z(OOW(5(b@~r95XUu?wzg&c6%JVGzP9r+JzcFFJv!0He*@Hg^8H4~3y;4mW9GWZOz#9_D8q6_6o?N) zKlWs%V%j7{{-PfIshJme=GRXN2QR!BB%z#~ZMZQEe`Q>;g|I~^C21if9XH)>Xi%s* zcyi&NYj79;jE(2RgYz6NcTw{@UrO#s$Qy$@Zr%1CoVkT6peIQ;*H;&>CPXdw>_;z7 zeF*a_{qLpov{0<9e4q2bMnc~7{{Sm-`v-Fg_n(e;dOUwM)tm8jJ>q8~cGr5vZ6+7& z??_m{$Ii6Ty(ThGZVY^k<0Aav8A?XDBOB_Mh*<0Llw!%)(F; z8*h8apPFKHF#pEizHi7)w5UqH+YQv`6BSiu!U*l7ks&$8PK%a)mAB$N4s|sCyVhed zzQ?mIH-#_1s@^-L74o4Mh)#Add6Be#XIgrh1<3_X)Q z3;;y2)0;5A7E)s;C9-Zh5=s4zxxC@Nv^pU0Y${4In117hxm~yTEPPuGOH*Bk#K!jt z_*~?_RgZ|0m{sbw9_eh&K02@6xLPY68Rx9+%*zaH|ZBvfVEYS|8ZMf72- zrQF=yP*M+$$s$1~)qx3hT(0N8nfx4U8+9>)9%~;oZdWO)_oJ$_w;9v3@24n;YX$Jy z?SKd9*&dx zkoEL+PF(1Li|m2%wX_DCr!EK0_dJhna0~0%I%FowgILZ1HB6CEN8l@a&jWa=v-7w7SaY; zXZNvs?m5p9QZprs`^Wzl-j&O=0j>rggfGPP`Hpjb95mPd_oiy|=Yt;8Tm4ghaoI7u zYzqg-Paa=VqSoBcX{|kOn0hUGCzlCcLW~L@tG1RgAYVTD9kW$R@9Klz;Cx`4z_Mcj zAy&M>;xj`S6D=<9dg|vdylZ%KZ1Cio+{L)P9YodF;j^q12yH4zLrgqs-W)iEeA)w$ zTG_mwtNf`{H~x3&@5U_cYK>Kk^WE17E+ z%q`eOd z!G6HmXkc(3hi}`+Yxnuo#Z!1v4&ho^Sz&0khVO*48JcxIsd*MwIutqh()C&C&Ena_ z$4XgHfD8ISm&-`%zmvkZ;#@|9B!vg1rUpyfrcHB-s%zy|#)7wrxBng^_Tl#H^?#JV zZCm8OLwA;~w=eoRJ(y4aZOjo>;G6%+I_RPz|HZSx-!yP5E{*9T8}l*$8B(Xb9gy1V zongDH8shy>fdIGPtht=mk*Vk*Oe(Q$;B0OwzhAt?rn&4(eZsX4I+JFVxoCI z7M1{rdq~-ON^#VZ1Nnw!^{qmVgy=SF!q5ID0u2!*PvktEuj5C%?4M%^{) zu4u`KjY*g>)_u$2-gW;wIX)AL@pEi{uvRJ8*(1rk89=sE5-=@25RD;uQuhIFf1C+| zJ#tEYPMsE8y>}vl?0awd-u=G&seXaf_?gp;V}%#zNf>_t)5tib6!!S7*W34&4J^gc zX6v1<(e?R`T(^)BZ9buhjyxu$K)}-ShooV?ib)aaUoa>2f$6j#S&ITtRV6EiA3Y~3%X>`j%581l>PNvy^wG+KMiK>GzRAV$Ae#?HHo{)fbpi$y{3o2k z%3Hhi2aPPdb05>znpgRRhBr;&PYrmmdbldGK z{i#9o#evpO%Lk6iiBD`-@Ke2>shGLdx@wOh$!Fb|$4IT+`g&?)g+gq8#(CnK(*tqz z7?#)m;*!#T6RK(N9Pqc{I#z-GmSgv(*_YxKi8+(4q3qF7&k0_mX67Qm2Z!6*_nnRQ zO7_|;i23dRS-AIsRxC#CQ;M~Z*h-*&9bsj-DZ>5}hw6A$W2k8-O_8;WGhWyx_OV3h zW~qg=GtH@BRdeRqgz|3pUyif+Ppe$e5tg|$BhX$V@v~9qpASd9iF$*on{&44O3`(x zZi(brA>6N0y*Ev)^Tdts=_UL zLHSm(A5Rq9mg(qiuY&3&_L%<9mg$Su_E6@U@NcCaX{wOuJ=2Bj9<3s6)mlXlLT?x> zex%f#3W8Pz8h#R9;GPJ6YX}~b|Fg*JkR~1MDkL0ShV&n4aIZR+m%H*9qa9NbWA@Ej zPG)@-daHk|yu#PWQPdoJ7xGHDH;Sy* zZOttZJ##6ldz&>Vf#gwn=q^g6o-%<)|0UD)6WVBG!Y9H(i|MQ)|!2i#`p=-x+?69SZPhwZ7m3o-L$D$U*N*{2(frv^6IoYQgi>)Pw7{Zz6vtj*X-@G9$M@18eT|u#Q zE$n3IMKc3sFX8A!c1Y^Za*icuh^YO~KGCTqdLEin*-bbSMIJb!%zw_P9S<5Hy5Q!;-v3#}Pi*icRGilhRo<#yd&B2lG~CuF3~ zKo=#)e>j(e-8F1W$FHND|FBm)2;XRgO$&e=@n5z9CgK#_S~M+NqZ1t`bj$t+P+H&0 zaT!%gyhlXCS6f3WFuMx7z3r~)89t!()&t$3MGlgC*YZ4rc8Am&DdUY8E&fKbk8o{W z(-kPQg?cb$Wpiq>VNT2n*A|@emu2xe!^XrxJw`6S6rrkwX;C`H;h$VrEWJj!BW2Lk=OyDLKpO;~X8nzy1DzU6)<6 z_g=62em)2>8dhZ(?)D+A}&X&Z2m-`PY*b*g93DLfIw|qGm1H$`esGILlH*i(_CDDSyNr zJ4)8@V%oA+^j%|3Vps+XS`7E_Pi$HF=;Evyp30Gx0|eVLclC%TYtP%3Q;+)O#4fvv z1$}pEy{59E*8omewdNX1y{3bmABB+*QM@u_i?3dFY~D!&x3d#EGJ3Uf;wXrvc+-TF zyzPTN^&QJh`bgWfA1<5o%m>lwM@Q*#Ijs}zlMt%O82IA&;-UZ!P4?=s3+JOTX)rnn z{@K*d=wpq-a(KI5ws2vRun_@_sdx85RcIxKC_oDUMj82vb{WG36eiLmhMRk4hMxGI zEwirTGfEVL?A1@aOd1lw3t7P`G%`c~W^8eD(a@wV{d5kX2+zk(BtJbu#85O68VH>4 z?r}~{-|0Xr19@;Xi^q*}FNG*sw7?_y{LQ4^OckiwWK0o>HxLU{wdpA^@w_DFK&dQu z#>CF4PTT7&i|BvIc*QFo#iG1a5j&OA3_0WZ-TCIUqJLmHDeWO)BB$SOtN@prE9%CA zloIbrwq2oE81)&`P)7*^2to+eK3w?ilU?Z`ws+WfcNw~RwS!rR+lu4F}Q*wk>-eAd{iHtE^mOx2@O z>VDPiZ|$5k({0X3Cw8`d~@_+>YEs?(-NpvnZTpI2M`#r*QP%Z+WNp}4n< zrJ*&OO$xXy$DQ&)E*_l&=olvh{TjENa!>g-#Rr->MtJd3k>O|zs^iymMa99;|1~}e@UKdMeU3|-Qqee+$ z^`ItIp|guE&3+~`>VtJhT8r*PkAR8_iw5ZJ+dnT_@X24P+OHapjgr5)7PpfV-t5_@ zE*w1rC27T$5VHHL*{?;4*`dtI^BH^oi8(;=Am5Z5v9XW0q1Gv@C;b%m{@c8W8b^(S z`(?a_zofse((3e(gFtB}(u6afRjqY+8l4z0`-?O3%lG{0$1iJ)PvT`!c-9EA7f;zf zae~}swf>Ue9_BDWYZhp}8n$fRjEiTr{ul&fC3DNpEr-E1R;>4T6&bc!G;?yTB=h*` z02{2e?mYjnT)DBg+XxR2ue~+QL4kDnrg;ye86Z?>tZX*iUFY&=2i$vfyZ_+x2(4cu zHe}CIjQ(;Ao4CU5pNO(NG0J<)jo(QRR}x1JU2Zk5Pfa=Lx+yYNnTd#{D-f9e^&xe_ zYq@zi)5D-AQ05882)I>{`qysY7zuWG`nG`;|Qiy>NQv!fM}x`GSWx z`7cQo_awsrnffv4=lC*HR9>C^>8+NJO?d$W17e{X$?IY4bUo503dC`+oHgR7!s+fK z+BO_aQP6&r;i6gf=g%Jj1KBLjJGvL>bu_kV4n+GfH1U6c8@z)A`)mit;*YzvCqfDs z`cLAac1gzsvBU-6(Kb^PqdRG;d_y80f$+QaEc@MLc4! zzvY@FV46Y7YT^pef7h&fC2psSAt-9|6AwKlA1yRp5`h?PtCN`o-NowrR15tXEInV| zL^|47#b+E*)rLsRK)nM0LM%9j>_C`FzQ2S~rC?5t6bjQu5 z9x){X#V{G0Hx~q)Z5({=VLdj!KMZjR)N62~$I`9L9W6653WVnmR1Z>@r=GrZBQ%=m zp0QWYl2&#`oM*Brc@=v~#W)ma_%evBjj7zmuvX3$)ZK#Yg~+l_wCr~aam|K zk&}YqTgYZ=Q;x)AUsJgcQsv_^t(!|cxwh z__oAqzTmbe|2Fn)48ZAo%R>C`c`D*MM+t^S%X-C?)V)&jOG5_!Pq(V**y@kTy{u!{ zZA*da{{gn_F=^rZ4BOCUk@-7!(b(kv!Pryx)KYt4(>zhwDB0pCn|;EyqHBI$3F5F} zZwTyn&0WY%eNWaNt{6P8(7QWBxso}0p`OCIWp6&$4bwl;0X78Pd`fGED0`RToHke%%(~_xcF=GA8{<%{>IdT(JXg?UbqB84 z*D|B2SE1P>)3im!d?2u=8Dd~74=%yj6quOI5eW8!ru?Cgl4wg=`6NZ z%n)JsoEEN*t88|jyBftZyZUGL-Q)8KfHRns`xoNnPBtb|C394b;?`T#omN)I=mO6s z_uZb*${Mh|HEEZ(bO011z5ah8Fqe}%m0$%-1)fRK^1LsLP%@ZtdC&7 zl2r5yCf@5uMgHkeGT+vSF?Zd$v&V@w0mNA<6AChxWL4vHTyWCq0N6&bi+!3#(O6M# zl~&mX4Ynfj-6F+sfD@@c`B@<&!5wg$s59Ppg}#v9xK~WR>J#bTt)$rZTttC%p0R~W zKZ|90_vKmi_V;MsIjZ6PK0JBr?Y#Bb2;R=!66{r2t*)w>->I*^oB5>700(e?F0UWkyT@A z(N>rAG70uU0L9^~@dBfIeg8(-dMRD0JwS42;M#(`oMhr) zUYeT}&&Y%+hRYN<>$2kwL1Z(}E>0Npx<-IQpD6JFp-^2b^Ho=75BD-~ccr%YhGbHu z42N?Y%`ZDmo$K*^v5YM%HFmOSHWl<=Z4s<$<_ZLM9&5h_umP?RCM;R5v>bFcj#p$H zFl_zP6r;xAg9r!rc!^M5Q(1$ae%GOnTq(x8kwUz*%KG7lZ7u)24_18BFixdM6ZeVkar{p)y%e6 zC5VR(wnZaqHxm@?T2={b-6k6pw9FX|H`Ywu_#}k z^aOjL7tP-4;_qVDmc2p{8%0>kC-lfZJ~?RyZ?VQf_0{NFQhWIJkd%RP^5lT>Vl1`y zWWKF6S<$e8ZJL*nGTHIE)>)tTyZ_K(V|ZediAk%ds>J||!NBo&&pc@L2JhSHZOB9w zcso6E@u>1ez-lTAj#(%y_&n>tmyG(9gL$MRa*}p}GwX@IAWtJa{nO(c(4*fhs|{d! z*a@%q%W0o4E7!8y#MN~~3wdyCZK89e++&8OC!;;reZkA|!yu$>fPaphRJ@z=eY55< z^t0CVKh+KH+7SAhMNn#&6QOP`kIUZM8;>(f+hgeXI`ulIsJ3NSQ+yj5zxLzFCjx_2 zh6t%L?ES-VN+?@@9U1S&`KMDUBy}gzGCw8 zpQo30B|19g&0j_ZYD(PWR*=?pi(PK@lR3Ps#f%Zdq4h-L(!Z;0jk;WC!ROD=NXZn9 zFAH(lBLVO%y`};+(5k0ngu)<;EmJht_nEz~%Mh+)I@a17Ju@aX@gP-fi=z@upN*_Ev z`qa+6)pu)PEB+>m5nEbM;?}70_In#K~(C#2*Fmf_oG1YAFu+Q3Toc$fT2LTgS zdzd?6bVb7LGBhUab-1`8u!U$u<@_Z%-x_ao`_z}p4}N$8X?pF z>^c`CwDf7im1n$VwFS1X<2t-shu?i120nbvB{A$sVg$Ze?I1Z&eD%zWBZNL&RTl$2_yVbms(;d4gb~Nl)@SpiR{l=#rR;FCiM2YMzf%E=hI|WQQk>GGxp$=c8V22 z;0AxM`p~r69mS~MPKN~fs$JtXLS6rDSwKuV{f`+Cp5tNoXG94S7Rt2LwhF7F5UW>t z5!Sbe9-(vKS!eHyK4~#36{HEUgy)}9y1nI9S#stbvBNz(po+e6_xjfL9}p80EJj;5 zR5jFXgDJqtqYqJ&`QAxQmqkRs^39I>#ozPnFu>O<1U1f=SHBl*J)RlAB@y8LCI3KI ze#I+xrhG`xYf*W@Kz#F*V^#9q1j(?*+1)|jg5 z1m1TB@LO2Sq=dMmR?pt-Ph~j9Me073e~^D6Zg(1SEfs{H<{!s zg^ad3)tv0{S*!n%mFDt%+kcpL&0;ZIa}7D5+k_h}Rh8NSoQKJj=}U4Pp1GG;Y`=f) zE!{A`KdikCA8cHC#CKdf6V&;+`fWyk<>RvG4bY~MFQZi!P+8aWO?%UDraRuIPU98^ z4(1BoLw8n0S+1^GmuE%+m`>T2bnIlG@tf$Iff?0ILhU!dc^rzJJD{=SuOEx~d?#yF z2aYxQuB?2{UVLD1y6JGgDW>`(1h$i^&>nCtkVysnC}iJ3xpuhwLeXO%{lsd4hc!kH zx7QUYvk%+_VjaSIeJusqEx7_{fnVr5hi(B9w zZ*%>xKKvqw{E1paKb*$YipK>$9vv^Vy8pWw!dfXA5Y|JC75exwW;*slCh?@D{ylKmo!V0Ewr84#Ck}?M)TF7HDu2($;}}*te%- z*CV!OX*5hO8D;$>uMO0!ySA%iA9mcmY2Frt^vmst&*^oa))Pccs8t8D@B1 zi<^S?k^Pm6=U?Dh_d~I+)Oji^0kiO&JJnit;f!2v{FmTcGo2qC)%!H0q1R9^x+ z=c~nKjkOh~v^plKMyXhUMdUNR3JwvITVX-WxY~@BOJD4JwwQ_V4!iwU>Y#Sr8X6rRNh5#C(#2h&fUM+~_e>S2)vFf$Od~iZtiaEiSUm2lOr>=N$DFM}baqMyQ!*Q9 z6{g=5aMp$?ULs$6HB~;fRP?E>tBcAoh%eo@vLj~Fp^c>paDPcZY{mA6`RnXM6YsBC z5U93~inPJ8xq5_&4{`0>qn!fb#%-kn-=NXiOZjZ6CK^m7ox|o0)KU6+(YsNmRAJI5 z^+?%JKQXSNB^>v?z}YoUebjF@U&&wfcha?Rp-q)-l}$V9?~U{qs#}U_*iW-$L3+QciMKiA&PR3{Ou}6esdqHb`!~Q`_+K%$zJ= z<2F=D&iLRGIPqwd96A&F8nddG`Y$JYCi9D^(T=aB5GtdXt(3LW5*fnGzl(q_T^Dbl zUol=(IPxFe)-71A5&Ej8{S4=%9zCGp@eHt#y?@C_bpz*I@9b9`f#5dgWN~YwwO3nL zlz}W~?HX^X7{}7@u4O6Z{$i0|svI-&6flVXP2;OWP3|oZggOgSUwR-P4pSN(e_WNG zHgL%r%o>uE$Lk(Z$A>f0jC7Nk1LHaIl$XtytG4Y|b9-$R7gf;ZZwfMO(^cSm1x=0W z^}(Zb6nJBv2d<4P9TKeXJs_SG+`OB7UF8STrc=suc!HUp1ww)Ve8wfKW*F6eo2t6a z`D>2{4#-roJiLhGs|bygPf&eVBA&O7|6+LGA~1|%E}};KyN$mW=nXu%aPMBs!|wLy zq*HNu;0P`~a?Il{`h8EqO+nA}_te^@Ec%0KJAughG)^nEFW0R*m_!V#EQ_MRB#N_F z&u;m}W-U+;y-RMT zi(Fn`EedlOm=swNCc!$2@t!RH^hkGzQ`P5sj=f%QeQ%}IWSj-$)vfR_I?jVytiqwt zuPNl$hlJBQ%>;dci1R6W=6XA@@Lfz-^?$q+jetIL(KZS_b0z3yFDTs)!h$+|cmF9d zjj?;Xwy=rx>Ltq8Ml7XtlV(hfMLhN__ zrkEX|BCBrlO>LDvJY^yAMa5F_$8QTu8dhcIqDiAbO08G$<_HUa>u^W7;dqQiuGIeK zj`JlEs>-v>xr}fCUh6kn(U1cidR%c|O^pZF7EbB#AGkYs0;+@i<|Ie*yYJFJz~ZLN zt3cpg#HK6X?DPLB7}6G&GGD)H?q7RjB@>&RIZWh=wfLrxfG&-07E!##747=p7oAf3 zwTseE-m_-c&X~0$1VId+MfEc1EvI{bXe&TO1SMC^G7*MuKOZX}43%lLHo9Ch-Tu49 z&4h($9LB)Z$tq(Yjii4d*r!9MubW7RDD34csa8qd0G{O! z6G!HF{j^`x=V?X%YZlm*R=IAY?9tK%@Q*si?O{A8y<+9 z992H%nJcC@BIUJP{s;Kd`*KE%vyZ-t3qLQ;4v-i9Ma_rgcGG=1`rm-ZY^{V5Yw8AV zL-lLeEu3o@{Zs%>`?NF3hc%S3rrT#>8pg3XB0xI-;>{I^rf=C{+{JXJrX8jdg8$>% zC#xS~NBoTS=XSOh$}uFy;I`v`IYaQ^rVM?Iv1P7j`|X~oBqKZ2-i53BFgF6Nb2yqg?_&v927Rqcu`iUxw{iiX~cQ zC9uBGlNK*sk7z7}PUW*U>>K3uvhyh*(h%6{kMyS-vk+$01Qs;21mt#Pwlo zI!~pCp5tQ8Nu>V>yo4;JH7_4fCkVCx_#faMRRpYt%SuIYd&91TeNY;5dy=pA7q(eK z5ZBw53RIoSZUa$(Ygud8XX2T|Yp|MoffgM(6PGa?Z1k`~$3gkmm*Uk%g{NG9z5szg z^AKrunpZC7G(%6vjcSH+_ zpO!^t5Prr7L<}1OJMO1#X((<`_3fKO!fn+# zhsi*NB83X8J6gFiAIiDjAtN+F-i2&e*yO~qc~|;WSRuCQpV&v+sE=18Z?x}}W~pQV zhf?!LGjAk66q)n&eU>-v4tU9pw77ivFh1C|8XxU*GPxX^(l6Tq`q4!SV39q^1rbP z#1S#rYetYt)y{_RkW$s@9ufE-DkjW(NO{c912~e8ZN8}4#$PlI*hlAeZ5WC}MOrP? zF2S~S(GOB95+yC_-u=M8Tkc2pvHPEgRbM6J&5n1T7d($!4Kde?GOjqXe2ZCTg_ zUNRe}uN-n$20CpQL44nid*yP&`8(w5;Hp4y{RO;DG_JkS`TU4c-j$=>CTLa ztBxEuD`f8;QlV4OT^rqc5-P$2QKRVuC)~KRe^}Tg&L83`!A2lbd`2QYV?q5lpKx|= zwh93M3qlbbVH-PbQ_J~(nmx<)-!;8`1%lD4jw*-@{4C~(h&}t-SrYU2>XU#CH z)xhTp54_v%!r0;imy`~S+W(4xEZtFd#L+~U#5emYvNdLdZ~G|akyJsrE`;v`q4ms1=acts z)ts`{lrqvjP)%oNEhPfC?v?2i_mbU`k$l89op>| z6umDfWa_3_V3F2jRFIC~uo=%>%)7oP9_*e-ZQR~3r~Rsxg4B=JN2WYR?i`}4k{@*J zUw8m#O0z)?Ra5StV`ElQ5!eBUw7Il;vASD$b_H2He{`_LYstj7UG#>;U+VP^3BC8s z(IQpZkl({yqK#X7mK<|xDvQPH=guyaPk+bniwewH2=J;%7J^{g^o+du5Z)oS4{9`) zpsLXm`BL@txDvwySiEX~!+hAJq8?@~|BbiZNei06-KEeAd}zpTF=8!9lN z^sbSxiz{MT7W|~b?A*t_@_TI}Ozy&GW{dIGH$a@XxZg^YP86u9HaEr(Gs+|YTVUP2 z{y#geyt)vL2A4`diO!S?cWsy+QA9+%ezN~$fDP*-XG&lLa$%7U)Lb z#E!;Pb1WWk>{y#X+46eW(%I@1RBlVA>rM%a&v$T`=I`=5@=tJ~$-3re34XFJYNfiwoA$WyWaI^MeSs9ks_E4U9Q!d98@jjqy9dwY#|r7DYXwhS zE3!%d$luIsQ-}P-z@(Q&Tq0$4PK-)&P1s|=bl=`=&w^NY^#Yv z|3aX5{8lIf6m;YDXSf;UZiL1t3`OA#qFW)u`;DUr<0_xx-C0bmKpOQe5T)H?QN0@` zfsgb}j90I_s!A7%|1|HP&!SThJXp75^mB-HXl>JD5%SsO=Jc{fI4qwD($yQ;Yg0A znAkSr3FFILyPUcZ?(d%Ev|P{9oxfO?zAp@K8tB+MT)EzVu&Y z0)N2VG}}TZa$rRQdIypSNsaV#iJSeNizih*9NCPV#S6!(SCAZ{gknEA z`}TZ-yd_`T2>jmG?xu3n7 zTBY!el|nm#rp+ec-V%4C&Ns)@hkcl@AaVH&weXzZ* zLn)V!eh&K0)KxSXNn}M$w0@n+3z~iX|A-#+4~GK)O{hBBVBX}8Ofvqyom~B6ud==` zfx6?gN$v_sdo=Pw2ctTDb8%xpfX~`0)24vyop*i0kO|i^DR$;fivDL_!`5(^<_LD^ zovpCJspc$pGr<+`ks-Mo5p{g11F5enxZuss`XS2CI|+<3WDeVa&PZQ>n3gy3;xRx4 z4kCTMs#|&dGi+iDFMQpE$pcE*p$eHu=BXg}I#5rAU{b@IE#Q;qDaDJzhja$*~R&2a8QP|8&fh?*~xn+O{kF4bwyUY{8p* zPTy`8@J$#bg{4SGwY2`=e$8*gux}*P9qKCt+ZKY)0PHQZB zlV(u}mfirYm4BxW!? zTc*sI_6k6(B}u|se%{}4j0>$EN3hE!4~RKN&N6xW0O)g>ml}W8o~N7dS>~E2|NS^f zkG*=!#rEn(^CC9$*Al;bZ0JhFjD;OeJy)8FP0e1u^htIX#Gh<8Ff6^8g+%#zN9MdR za5LX{bXkp6XY3nmdi>Z#M`yp48iHGSby;dmO{jR1YoE4^rfUl|NSu*bU&(T)PG~I+ zcY%?Ox%j9;nU~qNqL@u0TNR=E`O{uQh@cdYsm2N}p7gnGKf^p7cy1S7RT~d@DJR6; z5xG898(L+~ndtL%JChVGW20CQd%~w~gpkeTskyk#2Y831)Sb zHf)Yyc{NHUP$rz4@tD4GUe*G$BPrWEsW74Ke{Q`t3gTl^UB|ReDX7l65E0uG2HSMr z;GWhdMvhCs_qJ>T4fS~ah|Tua3TlC37$LD>I#W+e==bL~I&aD(rLp3rn0-78Vp9@| z(m~gomT7D+)k{~b9K*=~Mm!G$xoEz;Prggn1X+KtI_Ew!trG!+{4r66iL7OXeeS&! zu+Z(@)`1*DMrW5m57dXH2K2-t$1`sMis_@^+;b)ZL-z)IX%0wl-(WBk;%2c-Mzu7! zg)kb3cac5cB^I{Dm||>p($$j#;xB(!7h_7cp8Fk6<{3orx}sx%M4zdw36Box(%5vv zUMB1a!!QgE|MS|K&0}$8;<@@QcC^85(%2^*9tg@N`caNXCXbCq&QjcR-1+)<1QljK zVnD%ntsEa!DCBHqnLkK9nd7*9c2brHAkYbHIZ$;o@Lgc#$~Sp6wmai-41jSj;_`dH z+j)rB<~c8%8M}@L$lS51!O2E6Qb=iWMcT(NvZ8fH*RGOQ_AN(P)#)yGLztwC$(1%a zNtcJ?_dGV_ZBaa?br66YT7BmEZt8>Og9>oN$RnLmCjdL@W7a}~;{bE9FSwCD-PUDJ zNf z(}&Z!U`(Luug@{;D`Wb5pQ5O@KtPR&fN$|(MuA2s26*{yGn6PscSR_~iB2cyYn?(j zIkk5BU9+rjbBqLA+^WA1sGOZFriE+Une` z{4>%W9oNuL&##zErNWLYknjP$bF?}?se}N2^Q=F;g>9-ZWt;b!)daosOmHIu&x>=M zGbbMo=<>2KrIe<^hZXn;obFtN`))ygjrSEsSYD?tkg_Uxmk%Ca2c1 zre5->{kxL)U+95p^ZCyuFhHGJIborps;N}rP7+%gC)w{3(|5D$9(R>`3=0(I#NZuXTngFzosQ0 z+kdH$eIwgk5$40G99J>k)tlaBZX|z5uH} zQX|??gi0<(rP z%Zc+0V)WTW;hmW!R7sqsImQCI;YYP=&7T^dHFUds61Ko0RpxOO^LxqR0d#x$NX+tPzx`0yh? za+luB-k65-nu=x(0msnM(vAY*fVo|B2_i8NiSBpW#q2cU%Q-9 zvdSqG@{=302VTpqeHm}p*rDv$$E{<<%98Xa(jgHsd*>G+N}j&ozX-y@>Lk_f6_({p zgkAUX_kl9lZ_Q+yK&uT$w%5h0uiMt*Msyq^IWSoVza4ebU6clG+F}&a?|>uipWeW= z(n)~GI+E(*31vBfi`ASgyHqDfF+#W6O+z2^ynE7ly~2yS`kXZ0nkUluOVCn8o(Fb} z7{0=D>)Yjn-*4j8nA(RfA^m>}8la7U>6?Q`!1qv{H%0mf$ADe7~RWu}sFK z_%xmAu6kxx(C69OJEv=Wr5uq#n(#=d4_8sR|kB0K&lbsBp$_X9RoG zp`X~^xf~X=QL!T`I#7Ym^7g1`M1Nc?ZZEqbE7CaX!ZzF{5e29usb!3^l~G$2-A<)- zJJj4t-@Nqu9|ibN7pz4+jv&tWnPSF^Qj*rha9ehP&{Z=jLUE4h zC7{#j?I`PO3EF(kN3vI9`Wapil=hp1lZ}|VBWNh$|JT*H~9!N z=CgiWOkEk<&*tuEwF(iMu-H|wlWz~ac10u`1NM^WD?gh{g!OMgw03Nna^eK!a8$a-*)Lx|U{=G(-CqWmqn?WY>a5Urc zRQZfYACPpwtpf)#ycHzHnfeL+IB5a?;nPQ}PF7Vm8H>>4C{iacG(2+cC-lz8)j5RX z*bye$n)hf(<#DTl-{+HTUmFk^0w`dywY)8o z1jmkJq?0w}ewoISc6J!Cl0#VGVn(k0 zhXlBbAkW8K@VWDwrNs`{wKeAhQ85epSec2;o5|ofL*TBgq%WGngHwCRAb?1WwEE`E z>mqYmD*2GTsu9@ z(}K?;>HjH%lscgDf$&f=>0Jr}&H@zI%-PPW|eI2Lb6x_;=*kms81)T<@<`3(c#v%0s z^LEfGqy6PWfz5@%*$?uyZ16IVA{Ke0gd zBFDN$O16~zDDaq^P^=Bz$~i_IFeFVvlQJGnb&a;xEjvcr{a_V z3^!2_+901$WH`EsHY0uxO!qeY36W$kv-NUPC(GH--`;o`S#bm%kjxfIL_MG=-*iam zqJbw)0|%sbjw9cR&Ki4ZD4&EH;?iNcfa5~eWKmTh^ z%^karg~l^GXJq|)Z3~kW8LHQHrx(TkGv9G~n2WyAV*1F%)FxZZ9aB&xx6e19TU%+E zl&J4PvcGL~L2U7;4|_PUCLqMnO7|iC`SH#!jmAQHY&+q?tvgcM$%7pS}2dSr7EH!r=jTk42{#D7@fZwr%czgyt!;~?apGqedY0V}UjZSVK+h`!f!vkkpV8>gg9{%Hrq zx*ivOdD-}F9|8Duoep(p-&ilxgm{*886Js4KK))s*X$HrXR8c~8piJk&;5+E)>`Pk zd_ zyHMXWYh5d@)Eq$Dy%tmel67d^SC&Yv165~3EBEwIl!6+?L`V?NerjS_JN(crsouGK za^U^n1NVCP&W+0%kb~66!8>l;+X?Dj!ybMZugEle`Z8y@h3L9h4uAGF+AVf|V)N$g zQ-K~}K=go_B@D3he`Uy2i7yto6&h442%mF-Y;IInPTKcVOzDhU~_f$ET zqm2k#^9{UeW^ih=C|~69Ql(wyS)-ES1dZ@@p{8jmNkL}m$KQ~YVk;p8NdSZWMGXEA}&>r zM?Uvz26Awjt#26%eicg&Vx}Wi_m(FL%yqM(%m%>gK(biL9Y377i4?O}NLlMk+=ldz z)QDl&55r~IZ0^5w(&h516vIwIbL54|r{cpCLQCv>sH-ssfGCLi!MW#)QTNVM{x-N? zJd$p-$&N$9WC{@K@z(7K#fxr$<8I)vobiM#Nf3c$=m~Sw{-XRfNZufD% ziS&C1n}us}tO-nuL!5=5-b>=`l)KcX%e7;%m>PqAce4sUVxw{9e=HHl*h|2fkLchm z`_C_zPi`R}2&c#J;hmFh-r`wRZHzPV zzTPv4VU2p(u}{Cz0>NXR72ur>c~2gk?U(|8R&4)L>Nj!7HizqYAiaX|MS^qD z_ewr-2?BfZ9F;B;gSV{R5XJ^jT-T;GO%7BL{jdCMJ>)`6C;XUPdqcY9HpC1OvsBW} zMAp{$u5y!Ia?%z>;EWzC2dyDCb+{IzL&_uPTtWmZ4PD(sE30&$icJ!~?fefgRT&pt zVxei{F|%w2BH=7PJ|3-8@R9ltQRRKK0X^Qh2(+bcqL|k!A>Fe9QvNF$1;cl2kGT#a zwybfjpw4Sjq*Eah>3kyUn~QXwJ8N`P`~Lu5m+|pmt4=BEfQUX{=SKbO5r|DxaMvH| z@81~ELOe0(+U47)NGiP&( zIpi!tD3W72ge2#j51}0LCiVI4`}=$U?eN-tKcA1sb)8o5fKp27(G-d(Y}eF&N3_%e z36SDY*){$0q(x?pd;If9aOIDrK%F8a3D7-uw*r(qv^>GV46J(jiumFD=_eK_m93Y8 zDFqZpo_{Xr3_DTHxMvy24iu;SSt04oh705Jf<=sse5+4iO^VWvZS;w5EL+B)iVe}@ zC*-*cNQBM|D5QnEgUv{iDx1!sIr)C`tqKxBe|$c%9;M{W=ClbGcK=me&{g&AECeuE zT&U$$kT(@}+h}w1q(V_VuIIEk9VQ9*+;MrLYRO1TI_Z#(e*}t4PVLVS{Z_0Fl_caN zR3+W40|&Zf##~emkb1ip+tv*|{nludDONQpQTu-YM@0)T38m1XTJjdHG{SzkrCw9_ zSUe#XdIEZhiozmkfQ$LfHmWz)fh}xvHa}&6kV9dgxqx(-tQ)D=)w~w8^} zgdFY&fDSk77%b!vwW6iE+Uc4!$?JM7bQ=w!LyWy1KQ&S|;Y@O27jU?VNl<%LoySAhxA*`?<37Qd06T8KIi)r3llK5v`Ms0S0+=wp~UL$78n#3i$ zi@dVx$HlcK^r4<=hMiQMuD|VTm-^wmRbxIV?jqX0cXwp@_dNvwI(oN1G>b*a{rqcl zxTh7WXld>NxCG*ScRiCX^Xc8fOr)>k9a)fQZguLPW~-u%6E*a% zs}N!UM*r1$s&qdW9JXei5f2j(ooaZy=D|w0O}6MQ84x~&Lmn2#W@?|TG?f+pQguu@ zylA#r-fXK-bc(;qeqcUZ6p_z&4X~QE99Fw3G_+Kr9QjPbQ!G3-iq$P`Y^uJBDzB_h zj*Xh!z_uF!_(yejt%ld;bUTzr1UoobUS3qWw$?ooZ0v9y91MCpHS`oRNk7dUf;@~d zxc)i!t2~m2k(GGz^n+01e14elCApXtUCDlB5UmgObi&JdnWKWR|J=`9*e2_Zh}ZL^ zR;yTSU#Q|T9jSShipv9Py-0LzJ2csLmbcmq>?JShv?zpZeg1s)L5Y-cQO8k{BX2kx zwtGiqqG)525+IH%a&#FK0E!>t9H7wVm6V+So{?ScZIu9`0#1fB?g9f3126k%V|X4MyumTg%X*>tvXe_MKsZ>>rY)&Mggi9lJDmZ znboptaSFh^xsqK;(O7PqZnth8&6A4$0WZzuQ0nb;;J?hKH%$$zulVPApaVFB$!M^J zA1SRgR4Ceam*Uw!N#Wj-Q!{TZ{~qRc#cp9>nqoC8G0G8f3fkL{UKSPw3R(#rShewi zTm3NW=JOT!daOYdv_C|J*3Bp>0R#zCLaC(ZF#1$I;?xKc6xichH2i8kqhPM-`dEqh zBUv7$!=i~2^k_$9JZ{X7^dt{Yyp>jZ4MHEmkn^A}bFkv$n}6@nVdGD4thvOXBL%~4 z6ZL`y?B(gFV-jn;2iRXp#4|VbBa`ajwt;${@h4xuXrU{t`T}%Q=p|fIa7NQ#oapE%Wu`wXSyEyr!{Esz>N6= z{&a-F{;%FHiiYm3k(#`{AzNAu-^R-sFw^KKktt<14_7H}IXl*Cz;tB@5_NM?*{-2B zd+eQspU?0*(Si!kO;?+LBuft2)Al$QylFL-tNf!j^tRktKJIX};(vgNvx^O59AeKY?!k;>ljr~&|FL+H?JZ_@O zNcsMtpWP{j+w_X0l;Ub$cy9;W8u9J%`gL3y9G4dlZCcCfIp!myc$(eu1b^cy%^6F-3{*85%6zCOvNd!4@d@Xi`IA$^ zTocQ!4>C7C$~b+G_6v0!9Q{3RaPJ2EISuKGW|MP$x*X!C?v|1yAo2@kv+yx=6j}ml zdu!Kzr&=*BksmbPW0jHeZH4kJfGu=Yb$|hN!RF4#!Es}f_nW~(8OeJ&X*5rBxF?EF)g$uE|>7C77{GupQOl z&=dRLv|m}o#V6Zy9+ulQ$ngsb>I+oJNE0KGdE4cr-w<5TCj6SgYh^mkYp#n+{!u>^ zT;C-tSMvnC1L12@Nndh|G8tPudlm239wGL2C~UENr(9X*KwC|NKkY_HL4@iz<7{bc z=B-Qt2TvQDUTeeI(@5^&z0&be0^NLn248YyVKMOwZ!zq0L2qN3-HbKwuMjbGM6otpq(f_X53q3QN4CCEkA)kzBDwaZ*$zP}QMlwC2tB0U1t3j>*V_{kU z*u0UbIy)Zp`7)_n#P{Jlr4W8LN<4&LlJ_gU%gQrLgX(7TNo9hSQzOqitB$7sU;__- zS81fAbkGv3kvUT6&V;r?NJ_J?%9Vp;x7UG2_-tB%IpfwXyk-^ECiHT>IpqIg`s>NZ?&9eP?TI%TPQlStHu^XIPS95u%crs;0O@yGyKlZrz;7`^5J~6h=Rh2&IM|JnEh{?{H>$ z6666BL2Nx@&A8aYQ$&k7z6iL*{10GLp5fDzBUX7_ou6W2?94THM>y#)Tm&Ti%fiMI z7j;8pONu({Gv~w2ASr%mZoZK!Cm)Ny@Z@!ERe z%@9YcFgNj;9H2z%I-0K0SpS1CYhqZni*Ovel(z>Qw^-Di)v89un3Rax8q9y&tgl60 za~N(Qr{1>O1BbhrXs04|@dm*t@%$rL)FqhiCDeopJwiW zTby1VJ!D=mQot!2*xb*KvH#aRlnq{ouJZROA|wOoY4w_`uE^!h4VpGKsKQ+%YC)p5 zJ$8)?)(1`5O-O0m@`HcS&`UkQT=a?s$vXQF4`QF=J-%C{mjUQj^W4|N;TFYZDf1jT zm@!qYjzP*=*oZ;d)Nv%Q%wd;0zuRz{VBV6949BBdwJ#G!oqa_$q`@ozM+22 zgr76(>pbEE2Hd-#MdbOUS%js@*%*{(9`@0c~~u&*3$0M1K@5@pp-e zhxOm$NFKG?Xn0?lY?ozwT)8HMi3ck6Gr5{dHr>$eH|C=s?WK5#wjil5x^_ziq`mwe zzMlA_sBBV)K6{P$G#^JEcoezaVxs+Jox|>3OGsn_Oe=OQNX8~medYK^@K;AaLT$_F zzp&Fj!yAmuVzGOs8v)PxWuyK~$?tUle(m@-Jt)YSTWaio@yvrREp!x8tE3p%XD~rW z0k%#NymOc(NypVTYt3eF4YJDm4vXtQ_8GUzvuK};`qrvXj*|#J(S2B2gd1v+y-2=# zo#fL*YQ`>syJYKO{QNJQbZAp&CRY^EIraoNkEuMf*}pQrIC z@I7>h_=BgrX!y;X!2baFqD89_oaVFF>r-3tO(z=K<7J`u2dLV}WL#?gxvjrbV)v}> zfOMv`1X1OcSooA|+NK}depx|_+N|r>u;Fkf)dQ&aecMY-SGI{-kUg3XJbjG~Pwy^1 zt&&-=c5=ayXdbFsmhqB7Je_GtWLwk-aSEgqzRfJ!eAQ-YVhJhVo}#gs`q^=#70M`? zwz6zFh1^Ke)Nj=Tn1em8aAZymG4_lZ5EBh4^853VXc6>yVznL?7Q=}O}=|?Jqcbd`a3{OZ(eL$Kf}G+ zi#Ju-2tFqpBpY$?=GCkv)5qjf$u9dhIe+)MBEL8fTU0=sB#((LQe zszL5D!yky% z1o8;2#YHxg|B$e)M;}KyM`K=HcIE`G|5lwgBewOaHV)CA^IvYKD{9%2@_ftL@gk?A zEEm3aXqYpR?Kr{-h%4sT`7fl(dYh{DX3%ACo#xVYrb6GiH-E-U>*z`g_g7m^uS%rC zqsBLZk~EBVF6*~4+ipn#J~BB#UhBTFdiX}Rgq^VWbSan(F(Po?-+pR+#`c}n4r~ZI zBKb3X+uUnZg|d=KsT@#+JSzz?M&V2o`^}A5fUpf(sm9D2=1lDUy?i3tj314(_8hv8 z#HE*lzT&S4+tKES{=qZH~Z811)?$v54KpPr9VAup!9gTO$&8LCtw1FNq> z7-P=5fIB5}oHJ-~YGf|N7nlaE+T53Z7A}51{)CB7bj27{Mp|NgqMr0+AhNK%RQ$A0 zMT%|W30(iL5AF@$6E1jondD*FJYu`M6g$^vT5v2oXsL@C(@9E**TSG8-Ko+)@MY9- zL4%iff^_+dMOGI}Idp#)dx+`Tj07SY{*|R7Z;LVg7t=g}r?^oBQt7QAI6o~q_tZ$% zG#uj2{re@wgZQ6Xr{!gPYg!!eaA=>1g>c^OQ{#K}R1K_{V_{fSiULz1VBt)-*lP~rUB{FSO!4(Z;P8nJ2mdgEdP&&oQVCEhyM{3E!#ew z7(#Rb0LHIgp21vx4J}sT{;GPGc`DsY1Z>3WqH*R@g;5g#?0{N+n5*lmPy`gZdz%YE zdmB<6HAqC+_9fj$2%S#Bc0ow5YLFLfhy5CPPL)g^SD1fvAL#>>CgaD0Idz(Of*G93 z60%mirML%H5qBgBE^aKxC&gIu$W31l;n&yQ6cv@snRUU%p!XjNGuj7XrL#1{u|bsZ z(Exl~DK23w(rbk_0_6W^qy3e`&J_i(T8b)<5S|KG7=;WYFc+1ZKJv2ec`7rU{kiV| zzoscQIKso@di>)sRD{n-}sZWt8vYY~u^Vzi=Nm-Bp6IxVylJ zI5@TAji|hs;Tj9n#@LgFHb~Do5a(z#Hq0#0nMe5qe1Mi2)!>NsO_9XT{iJ%q zmW$qJ!|OUyYFVt=c=K4-BbI4!XwmriKSmL%xEs#BnM60faFO%Lx&0G9mg`mj14K0F z?1AMJ!i1ce>gLf6fM7$T{LHQ{cIkf{SL^kC&>Q%GLeup9fq)GP!3aBU?c)UDA36c; zN70h(V5!VF1*W5p!i){5YqGUV<7yow7_bSe5X^JPd?B@u>w{8m*paOOpBT+y4jE`% z_KoDMC$i*TnhlArIra|0kKC~4F`l2V%^m0P`Yh;fauJy6+`3vWxO$*V|8e4$x$GJT z%Yx0Ar~j53Uwb{Z>2HZm2B~PeE4wEdU&SOGR)1w8PNhmdm;*~V8DkvX*VP6l=jB>I z@@VnKP3?&!yT1A5sARIinI8|`Xp-M#WT4$275$AMzr=xs-_(+&COcGHl^Z3C&DNi7 zLPylT{X=tTVHYXsay)m0h1po2V9|Y}5oZ=ODM;-}`sX}3rEjy{g)td_f7oAYyXR;Y z-wsGPK!N?)Y=its{Wtn<`12&R6?8@>EEXpB#&>ceJ^VZ5bskSN-d6?vX{&WrQ_#AW z|E{trmM=}%yS?%oK3Rz#4{91}+ZU&B1k0+?^1?LWoyJwK{luWP>ddrbny`Y8_(}9h zxz-db3Kel$QN0IsG54uEj%I0kyPA_t&z*RpCPXLR%fW=qf%H#K(M-$n0sS91q7!{~ zWHmoXoskLR-{Yh{o81O ze~d47xokCvpSQbq_q{_72Szxr7spvZDtx4LXZPd&yWCATg)8+{Q~yQdDUrD2y1a#W z3Xfdw=QW@1`*)T7%i@isc<98jCdd$!jn!9^>wIoLmboDoAGZmlI4^Or0CbQ-9Elcd z%c=hqlbLv+mG^dwbXz7UmV2md;nfD_kVN#6r{WW}5Cf`|nkZ$KAAWFZIT|_5m-Jr9 z2V7Z}*{`Rat{h(F1QdmHm>j>{FUJdSiun85SWdtV`FF#{8`%OhLo6KmWvhfqv>Ypa z(F2sC=7bz?+a($bCTjSKLQ9A`y^>bUU7A~bT^3Y_Se}T8EwlhVy;!?hr(#=>No~lR zv@}$Lxi3+oFr~7C*wcjxRm15sjL&z)FaN{rwzz?^}vAJH~%TU)T$ySUr%}uS10*DpX5^jjS)B z^!BWe@opW{GPX8rg%=51zIQdy$k!m^6xE0iFa{fue;0M|Knzc{$kaOLSTi*9mT2WR z$RT3df{w3c-eX!9F&3z#x~8G@mfiWT+{cD=5IBy-xtmX@Li*h45u15>DQ()`u+ood z{bqjD4o2umV2m>t+_`V20(X;2j1Tq*!zADzpTaS=zdi@6t;Xm(Ug^(>0H_M*O&CMV+}(h zoMfD+n{CElQ4>F9xp$J6q3gY;~x*UDt|>p1DXs^q?%cxo9NNXSX^ zwb3uDYfVb|YJhApsVmfiEVK0_=xU3AO&ZU;zmY>B)pJ&I28IljD^h8if&nFu%NqFM z3}y#I;>%M}8ud4)rhi6r)pv-z^KfBf*hBuj6ebtMzkOg9Jd7tz(wKr+;fEf$ygHO^ z%_;p}We+!0{+oMuMJ4y&{Rp6@O6qnb6J?N|TnpRQ5ZadECLF!W1K<{aK!e z2N00#ofl%%m?g<1Rtt}NcKOPgg@xbEF?{B?C>=L8gk~)00ZnsQq?`_g_i2B6Sny#} zvWxB~Ajodqy7ju+QgQoA{(V<|kP8~eRil!LHF zr2?{Vvb^Lu<_-^+zRPA_1}{0Sb8@^s3%^RpG~XGAJrFmTosW^6$p81+kY;w4bt&pR zGWBj;twoTku6IGpH%0EZzlaXIrqx+GX14JZ#KwL4r1loGM8>A?Sbe0Q5*L|7T5MWJ zJ^UQWur62az~RMFMj^Pflm6|6EUpw%%>ZHlLi4X~(4E5g2dMW!c|p!>XlG_-PqZ-; zJX+RR$X;nkWLs}wkk&=pHpzw!4bx8i!)F=!^K*H3I8E3dw^}&bGID1HtXZ)cTJLQZ z;*4T`286CYKv&2_{ff$Yz4%xnfeqUI`-N$;>DMq}T=xq_MLns{>o+DG^!V@?$E~1( z)=SGbG!^6%p8_6!TeJN2j3x(~&1-+0#v<(U%K<|U?005c>|ha!n8*l7hqqOEruqQu zBLAR22#H1gq|zDWpSdnl+#&Tot=F5^18ejTIsqSIq1^{a<7~l~JXhPQ9%eoiK7_60 z4I1r-^q%lx*E7f0ulrwI?a-SlqV29EB(^V9oEi9CW-m9olHDMg`s3N|99kQlpl;B-_hM zyEL*9Ei2JZk%ZTuFI8-SMgRIfC6&@q^1k$xQTeoF^S^>Qq>2)*3Deg`{n zcdDLMwVjhZ2U=Etm>~45ALsNdr4;|;ztg@IP zCwd1Ex$(w>N?((xa4-K_hF1FzCS<-ZtHvt8`&x;_YFbsFX>&~ktxa55Jbi=x?pDy< z9bNpOeSQ6+8rPW~JYshjt(j5=Or@$CfoK|4Gq-lM6=cqzgw!3{?bEh6Ghw-pdEj_($moW;v*A&U;9K$qu{Vdnk4*HKp|io(VY|^+POMW ztFM$w6IyZjw6+zx@Z|i;JQz^z$z|kEr*TlOGopfxppso&t7&)mmu;~-88*4f6Xyvf zo*yHR|8Hmm6QHxW>(}%2VQ0`-WaZC5H`65g6OostCL@1TRqJYT&Fu{!?Sa*RPrCh_ z(-}{WR0f42-7Bd|Loy4WqpUTpP`@G{s1ctvT=^0E{aepR&kk0DnTm46X%)wY<@0`} zB1im8LIZf??s2KPv((8og^(En;#*n&N@?YQqkG+@AcZ60C>yGIvC^Lk3Qg+@aM8Jo zvyoa^m|5<40eXFCYjm?nadn&czOb>G5Z9!8qIPrPdJ?AqtUS=iNkzEoFNdt1no-RO z%h2_pQU`<(;0!l(V8!5?ZsNXedwGp*YY}M>JtRX@rY#% z7xE=HafKtyoi;kZDv*3rB6cP3pktrYy$C7ZF2Ubg@(5&|F36=FyS6$`NO${{@{;4d z%pi_`g|?P20-nJ&GKk4+p$Faf2BZFYF|luX7#! z7iCL$EY=?71e-N{@I2zo!IU@IdQgCSF)$m@CsgLfj(%8?9;I}?*s2?I_ z9A9MX7=v$nlaRkW-sy5WhExccD8voTj__S`zkDAU+$Yz6T}(;)&v6Bx%pYE%$n>a5 z?NzBDCN@q1kfv`rSyp?`hcIE-x-Qg3^i!-5r*IbyS1jW90;=v7hn4eRELysDar&)W zld;YNL3X};;E(Nc(qB$S)D7q~7+p!-|61e;e7ew!jtN8w7avTr&X1}OX*Wq|`p>Fp zyw5fB(feKq1J?d(fl z<@@NT_YX}6J+AA(JiHOE)5bUGN1TE3kNN#byyY#r$#7?AK~j17^$%Y1o)xoDjLoYZ z*|0y=nX7LN4U-lQX=9rB=ktBv*k`|KJ=^WB90r9g6h>ll28F^Z{7j@55w6K$bx->h zF56X!PS1Xzh~3sVZUmqs;IxLaJT*zjo%ol*px-FE1UF(V8S*7Nbf^rI)C;7w37$)j zbH@1ceWP0#fG7F>f<1g^bN6_id7)=8G0N{=v%}T24^dw&+##~CO}@do`N3Y%gm+j+ z{Oq&jWm;r+Xr~tUg4J$(CplFrd`BzK@WwJ*=7410kh#H7N^bYTEcL1a__gL{7jCLV zFmh=P?^oj+k@!@9z;#S~GIx-f>C@G6zu3fQC=)5$ zNar6xEb~#Am?`91tK(FpsA{Nya{u$Lne;1F_0m!86R)Z-YnOG{VX)QLXp z_*W9@%~4mp+GJw%?_8?Ry`vRRtMMF{n?yBp3B+2jRpUr;0 zB53}p|Mn5EpWSP|UF+3Yh3az^EuN9M8Ebh5kDI-0E}XZKRtXEauTQ)lOi(iSqij@w z5?W3a!FHUSk{f^t_A(Ws(8ghbar`5d*GY_O=Z;_(_Y!t1o#{CuYVz80Ww9yRZJRU1 ztziod@5GxlA1ho_coHsN|ya=-^z)M`_cM)0ZP|o ziyNdwk0VeKOk$2{?XxVxk@(8zO`$zw;bBVn~glSuvt0n5%m_%152=VGokTEd{1~Hljk}l;)cp* z?UL6pIi$g2B{vg+3K_$IenkmOT%SO|3axAy>G5aM;n@H`mEULKgs*=usO(6;R0*oO z+V$k1V|0+P5Guk#~X*8+ZD!Z|^`x7)+R? z(qt`E1pYNk41sGg<>~V`=O4@Q5^R{l8g?M-9So-ZR=MTo~uRMqgm9qn6^wj_g ztK}v=7of`b?%)mM2AbA8QGrwlameimhWw4_XTT)is8RnzQsx_t#C$LV1m#u)xv|FO zsSMPE+9l^vKT_guAz9Uz-WO_cDCI>B&grgh`N~MQa`*@69RZ@ZZTQo1DEfqSSXoH- z(L_m~LXMOE;|II*mX#k!6xOgDEQL1tYWN*dCHW&Q;7+2M#4>d_rw+}AGY z-=a@cW#oK@-;wx@07t3)iMC)cA?%i!)rR8WuJKJvH;{|63|-HFUq}b{a?!U>odH2P%M)9A}3Lk1)j;c9rV~R;eXKS-}Vv=x^gvZTal1f?A zeD%2^_E0=ZV*s~!6Q@&}>M>{E2$TG~f4*_> zDV$o_B8VCgGIoI#3Hqc{Q{_snJ`rWSPfxR|RhePnp+n(yUahg}!G$G(VGx z38{`1{B@=60%Is6AHd{CkzUaEtTFzYsi3R;-TTWcq_}?OKA1z?cSE@j-gMbLA)oiF zioN2$P&4>=nd>CsQwugREU+Ls8Nvt?2FX)wQF+)JXRK-SxWo2d&0lR4zHn!J+flnCU9txX5YrRI2N$5AG@(~KgIE7p<|PN)Jqj7+s! z;8%h^KIYwPKOvW1hd_GX1{pEc3bikvlni7BNzcslXdR&$Jhk&|q}aF-xEZ#vD!-MD z*9punXA2gjI|snA7KmFgJ{1{kE9~M`BpYoUBA?DgBYq&eDMx93Xn{Aea9_$3@wmK) zjgIrMbBPjrBBURTNqfXfCtErTyFv_%ea#yiJ9WIgPWjO7jB}T*=oEB$|^bQ{JED?1T5cuJF20;$o3Y8( zpI2_?oQxrlrUJj-w%_{AC0FmXdWK0iT8h;?KA-${+Un$C85_i;9W@zR5+&zUS3_X} zGQ4384bcL&3Y7Eb$3#_b=cU6yiLGFCsZTTklgw>G3 z+@W0yBd<-O7KXmieK}2Nf^zQ>;P7qc!>VgMe(DWF%AWL9gCbQT1=efqWi;wKBOpjT ztHOP)my1Q@&zB>J-olRRM3aEPd&o}oS*b7mX7Vv((fVpRTqh&_=E%_d#I0zbrq<2_ zch#DG>6OJCku7i5n1H=<=0P&NBky7FND$+^jWZ1f1M?xAK4Ja9URsNLuc4fVV2cHMuXRN}P+H;#4Lba{*$ z>xfJEUld+Kkx$Fp1@`U0pu`O4>M`*`b_uj{Y0)+cZI%mX;yR#}b^8GdvaZccUU>9c;O``tGG_66bgTEpjlklDxIo0vD%SnKRB zW*BQaJ)6GMPDDI(lE>X5BkoY-*gXrq#kodXvv`V7HWq+x*3pqIPIF4C&bO*O9CExv?{`R-)UWw# zx{RnUb*Ms=MdVt$h`Aq_GPBi`irqw;`wRN{!X%lq4NoV2YoC3Psj%k zccEuHxbsQYOtdoM_`ub3P%RblI~0BC(&A?<%PdB=Lg!uYK8dbPpJ9?L9|Hw66`x@9Mreh9ti&?*3jQpu7jI2tvycJ&_O znf;+vr#C1PUMi3peAY;@?1XO8bxaX1X+8XIjFP?D^&pDptlmvw2c?MJoh9}3FZr<; zSVGwLGJ2LDQ1{9Tp08u=eAEZ?ZQAeY`VP~X_XGn&K_~}n*j=rt2|WSUxw)!Q+4}v~ z@%$wZ*rD6(Qg|5XgLB)ERM=@%o5ya;lS`$t@3k4^LH`4=2O{U+beX)nJ}H^WHAn{= z6SvOc9NhA|1%4Qt3A=~Pw5RW76U{06sxUF5BlVQZ@4CGsV-;`D7I!{5U#`cLx{mz( zSgP7x5?Wb>8nX+|?j26LFY#u1wd>XhjZ8Z;$;vBj0ThX{y7u#vU8~hLX7uHaY1xIL z0$mwJm9MH_t@x#Y#CDOFx3nUY*(g{Gg+$g*njs7ZUU?nNi;{NXMlMFo-6v&dVZ4;p z)-Ki8UY9A}#lf1VY55)13Go&`dpgLbf*X^HngQo=jUNQ9R9ghI% zuZUOOr3JNSYlTh>pw(N<|LIG=ui(|DCa+h1X#7%F z`sQFF9A!n8b)o5E84y()!GP{f)#Td^CtHY$?={d!}VYv#irL2 zG(tM|C`gJ8+vhDyjCm3Kw$eCyxpHrekKe62YcvXo4x$&SV48kv^_q)j#K74d9DXCn zWg9&i{J54}N84F5cskLVw1w=*&s>TYsHuUca`^AAqV`?j;P-Y&p^^^Z(pl1Qlf8=utRBi#lBLj_>v+5Li0uc&8`@^RbaOz zg=NBo$*zZeu#KMW*_~Qt9h*P6ejie6iJ?2Oy}bNKpqt4SElZJ(PCvdT7nSNZp4saS zkFL6omt=3oPUl`rd>FLJC-k1R)PoqYK;r}r&(CIp%+jltSEZtN`1j3(-KR;GvB*NW z(nJp6>}>$|^vefM&I<%n{o7zNGr;rJbWXb1iX~juyh=GXn0XuVvn=h0c$EmOF5Dv9 zx~6b#=$F@4=NB}_pZHRVqN zc}X?x`+<|Mw=h75iUxpf>n|9R^|+{JBYtrK%X~Ze4O+ckgk4?$rG=sDXm|( zhfNjae-=N*G>pMHra55yvKHEdkK;(hsq#hm+B)3uTEC@-I!Nq|f9dR^+``vmReWTM zp#uhxZtOl=Hk;tXe+zZOTRC+9d(it#pi9vkz<_G0qyK`baVtrg5EjNo66hAEGv}3X z?m)QCvxX|BlwBF@$0GHg_TIEQu!Fv?pKF7|KRd479BRDnp0)2=3*mUAU27-| z9=+pkM>c9v=z*JXC2Ajes+u|9&MI3zWV0PFLAAM^lY9fU~JSrDZJ!AszO#99B-@Y6cqQ5Yw4RGj zeYlrHmJaj44)9&CQK}sF1`;E!-@HWrvYlEO$h^Y${IJ8WRXXQ7CfyoK%SanvZ&T*X zXOaY}sThFLITpM8O@`556wCyzNP?ykLV9;Kc~M91TBmHv$yvw$r$S(ODzirW!o7qk zZrJc#qQ2@`V;%XD?=%5%bnN2LpMZ!O*aSBw9PJ!98?ibWjl? z%)5=QF%sUSt>-x>y4Ly2f6N}jq}$!rqm5sg#A3hJx6pG7*aRqPqnlQgZJKle1cNP8 zVeV~=fC=WEenfk9O1#CQ=M^p31E zCoi6S6b)n%FvDId-JpK}10{S)du@l+20%QpLNC)4Bd+B*3BM^Q4FgzX-URk#e!N<& z=)tr;s;Qt|?ecP&dkoy7uIwE4K&f(MLV9+-vT5#IL%odsXJuu$h3Z}k zg$q;|^MdpR4-w~CP^4XQ3+yz4!(3asadvN9Guvh*HBs4~-2NyNK3uF6 z*8wJP$qKs?=Na}514X z5d%~mjiYR~PLAd#wkW#s>9@nSG+5+W*7`i+Lz(iv4O8Q$&KDuZXNQOY(cEp+`(kzq z_ZWykUl0EDPGe*QQz3oqVKm#p>EGDKb4xb#lXJE_vn#1EBPI6HW6}&dkeBZ)(`2Xo z6=iL;LZ24x_!t5MJ)`p)5T=`;)GWs`_f#|`T*xJ#sPVK*2JMxF?K!;H=vv(PXt1xC zy(wNb0t+jV*3moIwm6JS%XaCVNVmUu^%ZuqeWyMW`4RQ^`G$#)kx2W{>euP~u2<{z zqMewF5A;MNI&({ zRFwpPt_Als%+Yr@&B*t9D@H7z(sp2Y7C3rx@%TUi&p)XcHrt&rV;zzurXH>)AHa>+ z;e2Qva&w z&RY%l;+OL2_unta!y|3B*U&=ZymOL#NF&*iBYM#C#!9}cTwheVPFeb6t@yaTkq|pm zNfl`$#EyUM)Zs_U#p0J?=l<{Cp3%ofvIf3Ox``XD`s9sp)@4)FBBXfW#*@!6Gp%m0 z{Vz`03qzLhmrKg{Fy)q0K5B*}Pc`LtIr5WD$W^8~StIen(sP@LBIQ`BJ^|8hxOfV( zzTZ$S(En2pd|aNL2|HNK)`HF}`qq56kJnpiIVC%0boR~P0l0X-^$lxEVj)siN}-r^ zebE_e61teS;BCS63pYhJZu^IV|Cs7uB`*B+MQ`ZpK~L2#e`k^x0$;282yuYY4#8z- z>o2{gCe-`Odzs7Vz7iT{^Rwm=-y?eJ9^B|ZqHxKE?{|YU`nA5^db|F%!e}o4)~sRE zw{8(73qkVc0cWi%eE5k3cCy|t<-QI&e84Z)uq_1U=REyeWAUGETRfvxIC+)E`G(T{g~OUsQRRlJ;hc3(FV#LY8u&Plxso zm#9H!nOf@TCa?L~=dHJsMpX6=**n)F&!?^4$hSMUZzI4SX6cNu3aEy!;SckZ#%hI0 z*$1PrK6KXh8p9C(0M0sQjzl4@C7AJgA8;A_jUsV=$`kJ+C2a-f@cVSf;97I3bj4Ad z$e;e|z_+>~igNns`YRe7#`loZN*QRo_KdPO0!N+shY|2D+1IBjW5dkHd~UkEKuOUS z&P8o^(Uz&nf^z|9C%3a?(_p3+9+e;fY0MEn*|F~0eX?u*t?j3gzafWDRPFq=6TuLv z)rp+CW$xIBDglG=faK$C1Zr9+cC%29CGg`EsHI^#u$#SICq8d@kH{o>3;Af6(~?~Y zCrN1lQuQ;wcFrtzutoR%p(FY>$z62D5hJRcTnSae7`#Wi#Vx97$o&ORn#^inRw;QS zUp(zW_u$xc8B-SQUPYI(r;DzIU^17|lT+!d5?}cQVgOk!d0g5VewNJXz!z zq@a~fmvd7Ww~H`MKCU43b3h0HHkM22L4Sw~w>RddDamt)K7cT14%Xx}zy4AcL?igV zuGBe4)JFD(_A=J|eS`2yM&TKV`k)~VCYel!5J+{2X{H*n%(H9UqDtk>lr;;7anFI) zrGW8D2!7CR^0?9G9>yx2AM|c^bvn)CKj7@Q4wBQMWe2G83EGl4c1pJa;ZA$FTN zVlqljIV_-6R_^cAdzBIWkT69!qs%|i7il*vw7s6IRZhGCz2Y5CI4Pr8;$Yh415QC}8!de9tYC!}pBozeI*4PVqdLea6$@4bYW>_~K*LT&+Kt4@D~8 z0IS*>trLBkVjT7t(%B+|4rfYrGz&bIPSM;4+-88wpp8W;w~0p45WUmx3UB|0B_puZ zFQh{@4QU~IoFf_Q=a{W~6{iFiccX|roz*?h^ZFEG4h&bYlM&)zfp;x3HwLmcasEI@ zCh9=(Nc^J9Xy8){Bv{ffsCQZ4X zGZZYKhZ9pB&=F&T8<+wI0)2I|OQXYiOVUj7&kZJ$JigxuL?AMq6B%KX>j=2h--je8y%dP^bu;n64V_m*I5W=O`=v2IxPd2RX)S>4!c3v< zGoz1j{~z66sdWhRJ-SjW<(j@oQrxf@5|b2?x@jhdWCOC@z0DnM|IT|hWh zb&|6Vrkp^J-KS#)$TBj|r1^eR#iTQ=3DW>-=RFq)AY&be%@i~qljiaCD~5iA#&QjG zIlh_12-xJV0#7I%Xlh|IqnMq&4a__VTg^3X2V0nreQvL6Uy|J5JL{$X)9EP;-q>gQ zR{R%kXvZyOFo+pi+sTRb^5JBi@A!h^V%z(w=`XiWVvmZRdbH!-#cL(iQWp3v)qapE zCAiU=Qw7Qb^1%Z?-hcj=(3vklcP0OfU4P-w1|S{RDqIr#EvZW1E$iT68Ti3}Bf)(4 zK>DcG&6g|jF>D;s#e`~0JL||bIru|9zj?RTdg+#G8-Mv%YO$QXih$UCxysD3USYy% z6&m^$s?RfwstUGldYv<-`QAx7W{0``^;*RPqIg~wy4d^=AbeD1Fk#uv1hcz;Ua0@L zHo`Yr3s_&bqzXm&_yGqi`JP1d$nICp@swRO{i=UbotPQE<`;84*v;UF?oz$~CRV?J zW8vc$Gs6!YYI-LmXPdTC5GU9L=Q>AspF2Hkt*0IQt~uTqvI=6ltyKmqu2l7GK)D18 zQ+haC{7D5kYWH$oe}9lvPinCwAU|3F*Ux9)d~f3dk$@UT8QG+$nB28=T=$@irSn!s#9edD!t4^ z=KA=!JcVp{J4mP$|6t6ibY|uE0Mx@JxE0YBc{|6rC7yQ_a(A8T#f(xkh-RUmJg+yibg z4EO0(R{fl$#?loJ{u|IM4-xDl964WH@;mp+(eHL=gX)*Z?y*zD+5Mpp(aa6kLs`zL zT$dX^0e&E0?NUsLV`_n=<@1^g$8T7X(@0h!c%Sy@Xk13~{XhQ8@1rh~NCKK|2-Tc#&TBlEzU#AVni(X9k01)|{tlm^XhOLy^&Tk9@HqIs3)d`o;J@6US z9Q3@z%8+F0W!4Zo;2J#OhStKB=GMNkZ@1bzIi{|}hS20d|HYQ#f|?kYnHRlyJ0SFv zxkUg4s#LUvn0CtxR9ofa6r1Ytl312L(jaYr;;=YLh4x6Kd=hl;)Y&{&PLo&xiHOU` z3EmmIa&JYQZwWkUT~oom$b{usafl|U4D32to88}nOFhfAVJcAO=8~@5dUNW-(6&R{ zi!&A%rCw6l#QU*&nF=uUg_x8rSr}ipKxuI^At^7^@G_Y1guH12+66J#!R{Svygu#n(>@BY?jOA|J(B0^%pB#M0Uh3*QJCeBH`94Wf@< zNdSaxDNq%11ZP+6x!&+ihw*!g;IP~@^<(aa=#bRDHVc6^ex-(g+DGcC+Y`i%n(561UNIoe)JJW;GjXq^&f=s+{(Y3`lJ+3{Jn z50nlJufU=IZcbR#>9;FQ-j%d$(DpfgqLQ~AbPIG%CjxKblj22m~YBcWfnDVg>RaCRv&LZLd zw<6Qh_7z?(Yt$#tM9IYA)2%l9E|27)V63GYc=5f&ak6x3dc%N0OWW(p)9q+L&uG5!Nrk|H=1=?+7mP75XqH4H2k5}TLa1t_Jg2A=WuiL2NgP-> zi6BHJAM^OV$Y{G{wbt#Fc0Ll}q4y>xK&E~8OoC7p%>=3X-a%3MNt#IMr$vtnTN$I? z3lFcZ+h${pR`o@VpCr)<_E&F3*`tC9+lpx-tRIp&Cr&CnK0Mo@1A0qrCOk$mkP$mT zvhbG9?O8*_=gDx_HONl?6LmNiUDJR z3^`hew1SxGt#q2Nh^Oc{wc=UzB8=%6!(EsCM#L;|G~r{`m3APsqS|Z3ebOQ(%UnE^ z`-(cw`HEP{_x}L`$(G(%)QR{9QY~L?XO~jjPQ_zg@0k3DU&fm9rR&)@ns+FNK27V- z3pBBkUc{rPC@Gdmz(_c}M)SP?{8u>?@qzox*WLI;Na<$A>D7WNbEWp#8&Akpcb^$~8F=e}cAayn^U@$Ai;(LyuP@m)Ea?$^PJ#j_m`saX{RIvV z_AR)ku34Chiv_43zz}%vp0WSmVCjy|sU4-ud|38UUKN86mBLeYi6>M2@D-Lc`Dk)t z$>D~uTG_*|@(OR$b%rX2lpPY{+JWL=$8DgAw)O>8(ukGZToN*>_(uapk<3d+r5@e& zyqs!^hrz16)0k(3%2m0SF$4p20>w~M|8cd=9W!Z$Kt)#0f}-z!Yn~BA-<3Engm*YkMH)X13tvj@fyk>~7J|MLXSHE);U*#;NfV4V% zzuW1EAxJWjo&?v?{(G|*S9e&t$K4;bu>ceR@~>LVw7~Bs@q9mWp50xPu}o)eKW5e@ zE$@|n(P);p`tykesLzK3T1fDJe0366A-B$Y?n7}kC)n{@_7GEDXCL7GetE8^-h6;J z?sxKp>X5joI){W9p1{2ZCH(Ucsp`cPJPi8tq!`wB$zi~ybq8v8DKJF$fk=a5(K||) zmQI0{QOG$OYINU^p~Kl&@l-Z-Iktra_Us6^@%Mi)k#ojWR`FoXOeB6eleFj*n3u(W zVz=isX>?mby}dY`a40|A#!bEy`%=azpDD~ru*paoWVe%|rN|ds&bBlT$)(3`vRldO zz$61N_-{+*({2S@skzd2wy$-D+F>@$e^^6z=`;)fJ3##hoWERJ0u*Pins|a_x0LlV z^&G{WJbjkJ&hVRyik>wKYI7MkMh)|}9u(`*stk~K;nofwT51mI!{uRDL1kFn3lms> zz_miOpZ=LB6kva6E>llar0va)iLIV$(w`|t5NNT04`Iwoxe50_^X3ekp95v=d?6J) zQRooT8@uWG^4W~eKTlC2gDPTE9w{AVFM<9uLi~MF0qM(c)5i?fE|&-BojrY12BE)R zm8Lk@-WN%Noxbr2uPFMMd8+y=9>v-s(A!4sSZ;bvf9H2DkVVf)79C*-H_E7D%a~xY zsljJvt?qg5As~t%PFX@in{x+g@&+IAMzXp>6(eNa(P8-7y~G5rG1>Y*QPE$bKQpQc zR`MC1O~e|Dz+2dC80qP~p1Em(gla39aT`K6Pl08M@hr{B+oU77(6tn@ADC8{Q&YqP z)f!A*RPTSBqdGgxXTEYwu|7}*ME~^%b#K(xM+@Xki~U{d9IO3(v$p-EeQ+KRKw|%{k+oL`Upb z6AfFv)a=NoY?l}yap)8>`1Q+&!i*9ZVKA-ZZ zp<1_?wzVAU_WMgDAm!QWA9jyEC}e7o!HDM8aU7DduyHhS>S2{73;f>eHgrd;fWQwn z9TZxdixU|%ITnU&1(YC;jAlA&Q%OQr1LDqe@xU7AAG>uUPq<&0R>_vE+k~?L-d6AJ z+NyJXy~~ymMLp{RIrINj^v2YXK#1#AtVKGSm0CU8Tlu?7ASS?^<(a&mnPYaV2PbIT zT{i_WIwfqHY=ka`rl|NTE@<=*o;ndD#HdCCY{f^)&Baem5X*_uyeCa|V(~cU^Clbl zDm-PS1l%i#l$VD?q1SI!A#`)OuIn;2KxQyDH1B3{_6J5$mq9k(a;6mg`#hpNt6c;N zkqVnhFB&%H)af&+?-^R-tTP;g{9egf8mlC_{agTbD?rCWuj?l0dY9kvddkXHkV;ad zJ?aW`@2ISKiMo-}TU`eJb>1$!5w51^WVsxVo}6%OxEb;<;q}VO3AzKRb*CuBQ$Zv) zMB(?dDG{|^&eGaWb05@45l$QDJ!QtKj{d<7Va%=bs@d+e8uidFOHH6{H4@83E_x=< zD%lVqmz~%jhMU)X`DIcCvjZD0bDX$SuKZpFki2pEQXFU%pYBiI>xb>)sLrsUV_vs( z;X#8E#^j?OX*jm|)1%T*Yk?Ak?JTd5fa>*6{?qlg(_6_GB1!^G8$<-9@+&$%tU_3A zW6vxZYMZWKA36$hf&69;f~GipTfQX-NV+q^epArVsDDa61D|#Mz)bID?bORq(*FR( z{#XcvP#Qr}Z~{m-0YUdbq0~6F zm`$kFrLsq*fS~uFidHqj0I@}?&}eD!53oJniD0%hF}FZB1i(v^1&?SF%;_0QL^c^rCwM zW=aQ)EN;1nUDa7c!63xRP!EmM9Yr2ULw$-lfte!WmcZ4i z0>|41*^{|va_D%UNH05$H4qvKx=WA)!h%4B%kV5`)Eu4s(qfIKxP&J%r5y*f1--umMn zYm0t6Q19`1FA&?Wa1x!1JQkc3xCRYM&=FhyfJ@^@%rg6ue;VAOmgE&#vB)7EX3Nu~ zc3C!&cAkKBpTG>*A#AW*fBn_RCD$Xo4hE=CwT7E4QHXbX_CJRP+;78r`V@VNbx}5j z0)m+q8geROr;{+H0fXia*)~LkVxIAi7R7X`fE$gM$}U%qG1E}g!i>4<-7~VxO9IFD zsXXeAKk+XGgO3i$oB&*X^!;;6Eut)Tb%rdKTdEV2fYaAgL^tqWx&o|a!i8D==3tlB z%L5KoWFoPVl2wtj3-GnB6STE4mSw$94~BZ!U7@<@<&gPMD*H{y*>k($f7ZH}8c8S& z&M{kO7x{PEqg`2$$wKIBLh3qNKl-Z|hU4|q0Xw3o-$&@7AhsWcamHnCizU=#nKyff zluymPEXQJJffo}#rsc`bWU*#V;tIbdHG|bS><}*fW)__|Oi&i>3nEx!=d5`9y<nly(JOJ?V$=#A;8fe2ZEuGuFu}fkK)%rv%F?HyH4%nTYZ+e07|+1YK<{7KGX6lsgQzS2=GX{)JQb!yj zXy72_9jAl%`2y~7IMhQH-Y3n*z;R0n7y)}EnTE4(Oww3{_$PCI<+;)f;>p;#);`S% z49N5MQMnFB!KK^8SCUZH%x?qY5uSPPUYceD40*IdP~rcY7xJ?RhktTCS@5BOifyzS zHyf73Q|jr9p?*u!45qlKPec8zewY(U@fKz=JsK@pC9pg$8T~mkb=(1|a6N)`7xzLB z4urg_d|Js#q$Wh6FXmI^h`@cjfcg-8up83)um4zF7qnf*8V%S(h&32|c{CM!ZGVoZ zTe#oqs3IAzZjM-@=E3@nc_Ig^u)J=er$&P-&!$Ba_%)NM=2nts3T+|zyH>-DZ-Pyiq-GXO9apD|zbo>d-) z4expu*dcFX{39t;_dx}tEhMpyOLbCz4_D&9Gfm3SEn={)Pvx;<##aFWJ%%hM zaMxXp`7kvdm2-o_Nm!f^+=YRq4nJ_+6kJA%gb{rNj>hGEeO#elUWBDRN{ULTnF+H@ zgpS{|LwUyI0;u8VKc5d5Z2511ceXf?`Ue_5?~Z1P=GmVO;(p4hxn=LbivIbYh8v%XcuIfe)vQ#W*Us2V(E(Q0BnJFiQUiH8Elajph~i)@yZ&G(OA? zm`o+tl5DrDIdUL*Wy(67tx&3-&sF2iO)HSJ$T`>+JFmf%my_`1`V9eSG&P+{U3&gK zgMfXT0QcYM^;h^d9w1`hh_6Rt2>qqLtKll}7)8BVYu-GpnKIJq0-~XC0k)<9?7qXM z(yvP!-6+4iPM@MNs?7(718jenUbt)|5jIaY_d)8?Ff7bLP@r7n*bp`&cqaAOYiDA& z@PhW^Pf7W~zKTC5%tNhXZ&a~3WMX3!GPAW@&!(B{$#idj#XY*$63JE)kZL@n^wTM> zN%c@REdcT99AO1(rNnkB<|9=OgPW;b6qDC0*{>RyJ8f;~S7SF?+b~UH*TaA5)2unC z-i6Ck?h{y4ZOicdORp-)&KgIoDSJeNUl~#xF2!H#U}c3Xx?}S+i=VQ`?A-swm#m5E z)~+0T;Igm|T4ePsex}+S#Q1tc@Y;-OF~80ytKnbtwTeuf9A0wKs~W$YBvM52hwF-( zB)*NqzDzu5RUN=ayPTijy?>89@m+c9f@)P$lM2Lg7o6Q3p8gNcMCafNcgHxS%R6cyen5~47QXP+gsZz3||NPl0{kowVGK0E_wC zn=|Dv>g0~(hQIn?A@MZv{_m(%2AcxN4#j-oc97{xZ!C^OcPe!T8Dp_S4t+2z zTr%FJnk>|+x**kD-;)87dtXK9Mx^_>B&bG!p5HINS5-Gu?^Q z?7&Z{`U~Y!ly)A1xU@BOy0aGw=hX<~kI9!lUZ34kN4*Y_(Ml~Rmbk~QdgsFI!+yG6 z^BpZ9e3Wt0ND^Q&(O5J7LT6tXdjnPhza6cW&jD&g`BsQDD4a6MauYZd2}o=QK1A)Y^{{sy@`Y?`Z~FU7?`i8R5SgNQyn zcO~e4i3I59H~ouAjH5n}=gC_|S4Xd;5}|DN-K+;9R!an0q#5BDwu%oYISX`WJe6ue zSt)8#Hk7)i;9=*roK%i>ZB6R2mYkD@WQmb?64HXpmK>l~=~-GqNlM$*41`vvPv+SJ z7@Jr4uEWLFm3cKm(3p-$O($e$y&z_o+^%zJ8o%f?BrkCH{kqVr=!^2u_jhmJb-8ng z@4e|vt_pxHtFs;+;2rDv%3-F(W%<1$%;SY;g7jv4S|L*bb=t{S_zZj>zA>VDE5|9s zAcrf-Awu=i>&Y&xx##XYZBBzT8w_xrpxwsfdqaM3%Ied~nRBt7y9hXv)XG(t*D0}o zBr{@eUgnzc*dV|OTYUqoK9j`Leuve7Hux-qo|T3mKMa_PE74r=k|8F{Sp)#27qij= z!dPX4P22DX)?zZr)>zJa?jbji=05~CtBG8H;U*HZ4j3|2R^3EpdR%g2oisQS8cw#? z`)}ZVou7+Z;R;SkPtY#?(HJ3$M{Xf4Z(po?7K_O{tYY=@jZt`6Hh~Jy`OM;?cDaXc z{%{*5tG2_Z#_8^yHFB?u7UN&XQ=8QE?RJ8?tNhl~OKk8)Qi0h08*ek2$%ObR4M5TO zUnp|vj~i!;in-hE_qv~I$&TMA{5!8VK5I{Z98oo9iThLXU2MM#-VS62Dp*)L^u2IB z3Iz+d-#mW_6cBq;{O&Lr)#K_vxM3^2CqI?|f8$hjp}6lU4}YL--*%Onzp!xIimY^O z^Sa=0UH@c1bhp*uBcVStm{7jly>pkbYFq!Lj(SbvQ-2VqSRf!M$EI=!?*9Wae9YQb zr?6s}^Ho+~*!(R{-Ry={=axCgST}(Jzw3zyhrnM?phhW=9pa5Z_Dcpy9=Ho?&E<^- zKfY`UOn=w{vT97Px-JDQhQkA#$ISuY(96@6*8DY_u9wH^@9$!ptxaAx41!l_1#VP- z?$dawFS6C=07TX?nC$+$hkJ<*;=x7r@++<{ctxAP=TV7jjSc8b1+>tk#!#O90Cv1a zEvH?bjsK7w=}=~5zM(Lp;c|FMY>r~=j*4#MX7Ld?rR^?TJv^FLYzcT55iGf}>_8dw zCe?|DYcY)%ud6^yVwT0|Vq^@zM5alTPwMn9CjyVUP*}eL8hSO7yOoTE2}K5!wU&e& zaww2mEyxN@&zgQpJ)!nH+n<^3_*3Jrt%%K&7*;wGcObC_N=2VfElSKtjKfS-&_y#Q zPbV6;mD;OZR$po6SPqds>yLY3wK7R}%C6Y><3AXSdP5__q#20gXoB0quh1A0yIk?&dGmPSpOcY=` z>YD(Sv1;7M9Y5u{&K>E(dB_3Tz-|+66PokX2309MwGntnT zctvy%rH*R-?Q*nh6gG76E_`JTSk5!V#ilag;3|mh)FUsgUAl`9wvyjrN{T<(7dGdX zltC+wE_zmZ1Hk+KmvSabUW9G__2114(K=#g%O15Zje~g*_~mnB6BI~s*EQJf_WHkX zla9zYwi7sW%M+N=C$0}NBMhn7>~7Jo^~TIr1`_4)eB#OE^LIb2+Z*r(76C{N~Fw=GAUVsD(la@tot6t?Z7-4b-<-U#p5O z4E37NMH4H<^-WZ-c3#{cztY1>+tG}{nwCeI4|#|R z*uE}-TX&~2Wm27P4hlMX;t53Bcblhh=7J%FH76{20l&SAdU5t#|2*;h>itPn^tasR zybNBCr{N-kbHx${wBLd8Y;g&eju{0RJ+iUU1u|^=b84_Y4^nMi-ILWFx`^a36`c#O zbe_u~o?$ZBo}@IynlXcNpbABn?7_{fF<12!L_a3PL*?O@heH=q;r4(~&e3fP@qVT5V?SO*Os`&YE(5dl~;Z*T#u8Gw!fwop=v`Bmzaa5jz z+?ndoZfz0*H#$LHVWXYO{qc=K)%$j)4#VGuT)O2!l_ReSaeJvB$QC&>%EwA0C9V_c z@mvEpt=K+`J?{+bk4cr@0P2iH9pJ(S$xm*#E@cjowI<)*!`#^UEHOmfzFCwClK{@q z2!A(hhvVwi^v*vcet)Jj0CvmO22s@zv|KgCo# z%S(g>*)@mk-(ZL6fENibDsO5XWD^@@$#&BAEd5sN>o)vNSV}xTnIfUJE1{M>+x1PY zA0gHG8p+=negucD+ge%gEQKD4sV=ouu9j80qU;;b1^xi8F(XO>{RJF-voiOx_XyA% z5tSpiUr%MXnoEFK%c`8{K3^Sg`sAfgPqHL$>Oy(?GQX<~xqz3h}`|rCD zV@>nx^r1G1y!m=eC{_2o#T%jA)V%~TzVqfOJbylB6f0ck=Cc+uUbpYu;(MAwa}h-% zMxTu>%+XUm$odg~t(5(K!l$}Rq>ZPDC2i7aEQlk6Y4IF#lZ3yb=WPii>4-o6I_av9 z^A@^nK-WCe@-aA^Ig*vN6R^BYfS(9Y2IR2|Z-9f_J*(@@4^J7x5GV?bqS#df-m0lkuI!yIy*PV5mwy>UV&}QK;PmOK_})mLTV@ zz!z2ISX#bOb+5mCD5-y;bBI#Lqhe%mI5F#%j2&!RbSr>{c1vxZL*nNdf~ zYtbXdN`Wu^+nOHF3&++xd8Sb%)!CvQf(lu!>L!ClEI6ykj?M$TV26>^Ud0TIF%vEYNA;A9n&oJS3whORyY|A3o1d}wqf7!=rRn^!!ygbb^Gnz5*AT4IyH8;=kT(8+{_<) zVkf4b!^{xIAiy{Dm-HI9U4CreKNPrgC>+O@5L$Zwgal36?AI$mnPZ~}FG%$8*Fsvj zA(QPh)2ZIQGH{D7Y1S1_V$4IzMIr4NJ1P-kni0PS#qI`=DSu`aqI3*Ip{DU!^h0uJ z3ey9sG1v~k|Ng2`g-u2LsGkD$h>I>}5#u)k>=&Se-EdWh&fspHTDs(}$Z35)`vKQd zf@*<^N7ONW$)Bvz9<8)Ox9*%7MC7vw)%0TTqGTV5?*v>#%-yok~w3 z<1zn1W>t2+H!Q1ru%cYZ)*zNtUaXB;K`9XunN(sR)-e#uRZS zz}3ZDn{|Tvr<8CiM&i&{VhIfe7`j)<{be70qBuCTG?fl+j7)&lqU6jV9@s0 zOSLrcUdI}RSV7KB#8@-HOcsWjtg}v?kDGqVnqdxr4N;)d8S!b3M!^FalU>fu?OL+m zQ@UXq!W*`R*jKm5qkyZ-u{4#M*6RJmDWC!+d zoJ$^Bp=9<>Vn9wlC#8agSy`wv9Bw6_3XoP8YcjuMh$1mnQGx;7vsrDxZSy~bgiQD8 z2yZm(*F^8_l|0#q77>w1S;7}4`sf(UtbP>JGNC~E_H~mbPT&}rVCP`l|M7r-Gah-b zv%p;1=kgd2hUW8m_yxknou?H29$`8XK~}Jnth`AfTz1;gRxW=YqBC>>aoZ5Od8jd& zfxK|_rvGKP=f~_Oy+=Ki*EKPp)7<@!E@rFDU{0OQwZqZ(+UMG3C83C=g3y@qIF^%& z`_fs|DwEliMxUOZRkFqzM)(Qk?1y5*^JZhFwxu4t{Zo(wBbMYaYBHm^Kb4LaqrOY} z^N~|JZ7K(AJR-bqp(lXZryku}w@Y{J>Tg(MIWB9^^}~rbgwE-%-S(u^#z~|(I1iXoj zERP)OUZse22^!>BDY`LTaSIQHGYY`q)$lOm5biUnPeDslFF$=)*-_R#n4BsYmF#Am zXGJIC>^Uh*sH|@Sf6Y!KmRZPG+z1O(c}dI_&fK;ORea|OG~G)7xKCL%-B_ct7reKQ zpoW0-siE&b>PYzCIlFk}INQiP=7JdeCBNHq3-&tbAswmgy*A+T(>nIf zPymI~UZvE#%4FzWPwCSg;sdf{&ft<*DfF$_>|+zt9XeY*O=uclnTgY$*>Fzl}9l)BT!F{q{ib_BQaAP8fSX$%#$*MWm)lI8J65A&I{Tgl05_@ z%f_VATCKv44=azc%Pa5tpEoMB@+3k2Di|t)z4il)KB(^FGsZO3^|B_xQ#b+b?DyaC z^n$Kdi2X1ZaA2yq@Vc4>Y%#ntJAnnXIa7N^?EXMQeNA-gYptW#7gbZPTZf*bk}S9e zs!sG#*v0Bq__L}D7gdYhqMVGwEMAB#2Ma?K;>Z6x`9Zql8H(8m(9e)ET3u+-l864^fIFnjCDgb5MdM1{b3y1sv&S!`ZANADvx4ztNt+3UyP{^}o zr0ep;yqcSRyGXD)A^|c89oy@6Za4!qE>cxxB}wiOIM%$B$qu76+c?(iGKnefK~0hJ zX`>Tc*zPu|`4&`{<-QE^_>J_N4}A;pq59ZGj&?|BZD9EJh{?|Z$?<>>kDAGagt;ge z8iN+xxboFCsz@ttb9r0Zmx-y80s%O)hU)FiGJK54;TfMhU9bBjIe7e6OBS0&`T1zz zdxg|mc^(SvKa-Uv1@4wj?ptDapyE#dHGOU>1 z8Mk2=FAjvBgyoD~kofeE-CE zzclSr$|Ua5cp1svBjx0K5P>r)Toq{F1shYSpQDQwN0yI5hzEp(j;gsMcKNfrl?(C@ zU03UMeiW=(jH&_tnpvs#3L)W13X+w)0$l4J*ty>`uLi*-4jK48BI_srm5V_3!EyH+ z-Pb-6C~;7xFm6>U`)^6trL%^3D z1l~J<2Kr%s&H{rD*Ps_Oo_t*Nlk~3y3XSTF1K}GM3i8fqf_l!s77~O(y!mmi>zQxZ zrS7?j$6V!XFne`WPDma8{QXL1;;t^U?L$8$#+=zpkCs{mQBlg1Z)ckli?UUJd z(61?yWBO-Z^pm72;_?SrQa&;51QU7kCiIuvm4v$2(&>UQvNMlXBV>sq$ERoZ1ovx_ zloozVnhzV88P@bh!p?y=W?seOO!6MA(M0lIKD&bEyZRyBJ=0x5V^i?xcVdj^}=_k)%n+zH?dF0GM z@sDzr1Oox)TYWl3DlDrwnnA^%cd@=^`{w2KOO`#|Oq#zOy^#25?)5y;q$!I=P*9nT zBIxo|_1rx&4wU)a!KEI*!7uIAgdxOSjx-3arA+e#CYz>nAC93lmHmPpY>zUa%p2?R5$2JxkQ0_wo>C&R5>?g+UQVo%l{?!s69o72Se};Zs)FKvde5(y$!) zee%@<{`S*ISWWh+W0u$*a=FR2%m-`7wl&0Dq!khy+9MPrY& z7VvoNV#j^RgNl+I+M+0-A~Oqf@}e-D9=;NyW&}RZ7I5nM@BTAOU(b_W)Hv7RrQ{uo zB(wuztMrn;vWqKMv^_pu_n(HWTK~tAkKv_*K93SiUIE1njpJz#YDtvXyGs0WJ6qi% z-y?_qty3%=zLvbxJ0I}xdpl=@X92d=q0l=I{ACjB5Wx7R6wQ?hezateFXmH?Czc@W zt$RD-B=;N&<0|{o+);)8Dp=d-mszb^>~9V=K4Q7_m{$+db!}zlRVhci0b&6=GQs(ho&wY8aXJI z5g$LP>_bIS4p`5&!(03lNm7)kLwm-oQnIAKalc(GLubhFqB)FlU!(BJEp@((X{Q&X z@;oe(RnLo=)9p;kg3AXK)0HvGQ>CN#24yYxkw;)zUl{*cR#DAQk58Y#Co$738NWSBE%TG>g!AyIGw{l1W;2 zFa8@Kw5TBYhhCd^%~`XTJpk@R;fzRz7wWFr2d|mK#@Jg^`y!??-sZkS-IjV5tsc@V zS+g+Vh`9ai)|*Iq;CL6Tp}UCmsC#=rj{}?=AkdTNW0Th?w{@?OsYxT31 zBR(P0#fMk;oGoKU1=Ms)JSTJQ#ni!-(zpF*uX)Uf^XPt$37lTGPrDe=F>+^TI!^8K z?8#HKnXZVxpul=2P7>bU&iK z=dNtA-DBk8)B}95>EQo6Z|&&sayyi{yEyd>`fR&b^(W6xS0~GdMT|jXrh^vI5T0xu zTgomv!&Y1AoH41YhGbrrEZ#7eq#vU9c~({uemUP9#-DtfDDbmFhJ_F%byU8LLHrhJ z3zo4_eCwB4ZEk@O3bH5iG5flTx;0(|)uF@6Ir}R1!TwN-0GyI?;H&(=hLfkGS4w{u z6sY%#CIoQYQgV7aWcX3R*;9N*fQqyuEAIE7yt$h50CdG75MaEjF;~l^0_pxBtJSE2 zx^Es%SICE3FsbaWk{yFhgj@;9YIELu3LZrr6p3(_>5OEtcKdci^#{M~kw+O_P}XN`+aLtrAT7EDB6PZM3R z2rX*L#*i#RcAu|9O9|&x!s4G!g8Ed}1M%XeqVk#z*rM-@@!&n`3r6m8e#REG-?4cM zy&q1g5gYN7NDlRP$!y9pjleaTdf!q~;V?2xRSS%Wm^8l*McPwL_y{*6{2nz2XcYZj`+jO}xKS^hXsU;T$$%ABZvUtm0S_Jv- z^k{XhlQ3;6L}?QgAd(r-hrMLqGu#?I$)nK_ybQeXw&l`CbS&tfk)9(@WlH$!D|xs= z_7VuL*;s+&`KXrX%UiTLDc|CnFZuqVJ@M)-G7S4+GWECOmj7_k@APz6NJ**W zh9=(tII38|;~gTdmk<#}EpxFKRNTHEQV?AZy*$5`^v@%mYdhWlgErQxe{z=kBCJ8# zVt6jqy#6;*Lbi&dc{Qn!`uEzBZ~YQ3?qh;B8o2AA*};|>UbO|a_FIt$?gW4ev1x@6 ztU%NhCdqE4U(YO@vRJ6RI=DkZ$^Anh;Wwm#t%o4FUrm9ow(g3@Kd%i+zWRLsp z`>e5H#T8keQ>i223fWhXQOEE`%Nkj2d4(>ns{H0hx!rI$G?BxuE1r-O+NOw#dijel zJ!Db1AO#Hr=^qEYXszmB)T0WCn|sh*wf4IX&j(D&Op6af(!!i~y!96o$KBhcCBjM` zeYxYqKVBbMo^xO8DYiXzBvkEj4iA~>w~#BIbF0}N<9WDvxD#llSR?E4Qqz$rnkncG zvKIJIJo4#ZVnu+;dsPN)Sj_?H!D~&B=nUV+={J?W28(VZ9Xr1kAL5Pv>En>vKi$6M z8S5wWcUX?!^iLJt3DSPwqOW6*87zzIr?0*XL;f9zU2?wOqZE$=DA0=qZ$d|Ug4#yr zlNDbl7RU~_w3Fm>KNcgQzqy%RtXw(O#6gN8fqO&2X)-$HG*3zP-dm*V>{K)Go=pSr zs9G!dfKgQAE}~G4e(b(R7S}sa*RC?TOV2x^L&j9T(3_~YX7%bf={dgfN%sy7r6 zQ|8FIWZ(;?Gh@^Ct|SxVAg?1Xn}g|%Z4nN&JWY{Qv@%0{^^yCOD*Po7T(LH7oMk9yzh z0b@ZjF3ikLg_OaGhLjE`Y}W|D5M8MA$nx2)OafVOlG!aineG?hHvFO3;y1>sI3{2; zWU76RRIK~UG2u04Ci^>QmHtXTT}n{%>di9W_9bCXNeg!n5{cw=XHEN|e|%ipY6r>K z2voY(=d2XpnHCjjK0FtBTrO*nI77s27+1eHm*4}az2eqi+ zL8P4#G~SB!eU}a%A5yUjI6%xv^^oJU2^B;Z>D40=n>dK^nNGlQ^waL4H1MO*EP(%Q@Bt8(ca@*#IQ!Nu8&&P-8~f8|#C80jb^yRMypWM>oo zN%avjx6;{lemHyWyi$)-gZ|{O8sUABHktm-j|pNMD1q>Oi+UInr?(F7R!=R>B@yQqu*Sub%@p$k@~rsMv+H#p?sRoch#nqBc_GcV}s3u1KP*#ef?;zJl%DDu}7VH}lzJK0o( zUoVWkUw~hu6*I7kFmk@26;lmov|Mm%z z2n*v_W1IYNj5FDg@p*r#BKl52i0p(psuz;ruhk^NwP}Gq`a%4N$+Qw9mKfg%>fiEK zoj$PRF&ei)`Q7Cw{&sjD!-G6QH{EV2tol=B6B0Hq7MJl)Y`gnpd#1{uw$S7DyX)YP z@k6pb=BqTu(%eIOkA8pYKxDb*^`Brnk9V*3T+T*FF4?W(gOi#=h+I_OgrYwWkSoWyi5I8By%TC=hD(e4#H z4bcmy^dN?%c-a6ZTBue!{y^!B){YzKev{!b*q!+gAX1LG+ht66HGS!(6cJQ(h;|4S zgotuk1UAn;S))xwOmpKCXp~CZRD{ZTN7hAr4!&J73&NJL#OWBi6lbivlEc{H|I;$Z zIh37|H3IPW_;$dbC&`Dw#3@z zWX4zQs?x2eKdKo;Ip>IJ#Y$My5p|A8yHMdY{JgEng)e=eUL?b|v3VGF%hyPVv{w9{ zqF%?Bzq;E=_xOr#M!WS2>Err8GsF`>0OFCK`VRXqKyrM~Dyt169`Kz27xyAP4pt_i zX18PdyAxBT&{a(r7lQY}M$-uzQ?&tyM3Fab(5J_+0eB^>lWq()m!~Tw5}LbKRMy>m zUSHuh$x@jrGDb$GFO$MSEQ>UltN1eZ^57i7c4_r^HR9sh2RaL?n zHV$AXl~CDc&1I)X-$F0OtZVRLzAa%v!sU~b2KsqukmV1Jm-UgH$rDWW(SdtR7@M5P ze&Td=!@h8Gbqb6vsJo?Fz}BgxFxBy6V{QydVbzILQt9H{+oKgI(10*f%EujK$}fK; zWDN12p71HLcOo_46t(bm&zMytXcCK@6#1QsJGRq96wV1x6QO4&nudk6aA3s$*q?gffiFYomTfm<1nYW$AL>xQ(tA6G=G2@p~ zcN|N3AlrVF~)?sO$HQhoM>otXFJJ&(~IZLJn<)SJfm zM^K&dQsPH8+7`QA!ahs@NSe0V$Rj+m#dJ*vW&*o0hS<+Ka%G%|`rSes1Ct@CZrPHE zyGx#*`M08M-_KMXc5HkvJ?S1aECpSUADcWg3;C4|V<_sX%lomdB%=rr{{E&QD}K6q z+gf5@1`D=vo-)L-_dm^!^q4Nl>V9D)%>euM1R+qFw9c`|#^#l)a1tfxf1=C7)v(H^uIg0bhPiS)yk!4VPb@iulzPQedF6}76u#(~m z77eyA^4E=34zoM!6>rm9l7mKgVX|iK@y8)xn0XFI*Y6#6RWb)a^yl1boWfxYOJ)S8 zm*wSyG2rrP&49?Jf1DCpRP^tR1nj;}VWuS788`D-zwZxKC*c3$F} zk3?}l`)zSaZnYmGxuCn6n?f`ce(AYzh0C&}d=jKCK2GLs(%Wzb!b-6X&h;q#kEQX+${Q<;(!Jj?D?ZAU2K30o;u)EI3p3=T(U8A4*kt#&buJHX z$u-CFTcM7W%8_1~CC0+Zw$oHDHK6$WYh}~U*l+*ch_o|8g@KNHt8nMx4E)-oH;rj; zB?oQ9WpA;3)}XdwEs-R^iPiQmJ+@I39!2?X1dBFBTtA&n|ci>>8)0=txt(=T^Fwmdr!pR_$IulQ0Cv ze@^xo)B;T^0phY_3#(=5yL1^^^ue(8oBmp%3m zU>269TqD@+se*G41a-zM$Is4(2N%3^>!VKDGpPWG=!4E=DFVKEt9*NG!Y5zR1I0oA zKftA$=%&a=L0y$mX}@waEP$W>psulM#zjrP?$orW-TnQ_9<6W`r&P(eE}sBBS`1#) z+Q7y^$9m%eb|`Fd($71_zI@MotUjw$sfcE2VEavraze#S?vJJkFcn78Wqm0ZU^YG5 zB|d32rxihT&D}c2kP8~2)tCMvs~cZbgibUOAe*FLDh*e4a7Z^zj^^biq*9Rbwtk?? zvqzArW=v3^grWFB0aZFE9C2DYLN6^6es*X|D_{*qrg#j}GztSztYfI0E}V7ulLFI0 zrI3C6i9}ycHpfK7s4>TWGJ5>6U%nJ$z#SUKwo;Oo^gUQ^{HXLyEL^yK*J|t=M5=w& zji_#{%r^$KLVA3i4Z76-NVZ@6)Kk7;Q1bIF#QtFAjofr_=NN9^xg_e$m98eLm9 z?fwTS>s&;=JHI7swx(DAkN-?Qm%l>f2p(a1?Kji z{?e|+!zUBG0B`NiX|=*@>mrKVdot4BFJ<>>oz|LFk4kC_g^63@FKH!C7w4{d()Nw! z$Qn}Znsi^|D7=$TzEdu|-;~1P)e#bvrs*?~axd-aHBsS&67k9c`f!l9wv3jH$uYeS zI0d?L*RyBK9BU|`Qjc0OMBM*Wv@G;MY8}L*VZ(gKA`4S-N5$m2tyfLDWDYJ>3{u5WQBK_i}^DDTGm}^`lOjnXQY#_ z!^)i^CuDkc$^h0p7fJ<)IL$;M#T<}uI62tUMoPZ3L&elC{RyJ^I^3f0p9Sx`cAbVn z8Ww*h0)vFc;||J^BcnJV|E_~s&56+2v$xP3`DW7DP#IGG%mj>`xAAZChKu6gS1n3@ zBE_Fnj_gEb_&^;m!JOk5%A^wLc5UDG>#bhwSnwe-8nam2toN<58q|^($ZHctwtqV+ z3_V}N6MDJ8Wsv*2)kEK&fNeyc14T?-*TI5f_(ZT^%da37qSdv#&g5>cv4E44%JkG>tsi z$l0qO5|8d0)n_>vt14Q9k=!GJX`8rK7Zfyo@qDYsnt!@6X zwKaWcUuHg{51uq}^7g4Rmi!hM1jE@>i4+#bdOZ4MZNT5F<$hdavXkG3xpO_k=D4?a zgYdux95nb+Rjbd9q=1p>o?Gk$pnE6@dH)Vd;;=0TnT!IkY}hoINi`jY?PMlC(RB+S zUq`VV1zD$n{VFA^)@OK{mOSKM2;?=M^4&M4a|s1(7oTcn@z3gA%%7+Xv?#%(NHa4v zpYL4~Z)qoFHD>ey{+?D}`nAT!g#fKhak-LkBCA^sO;!I zkK7<H7r4$P8u*If$d2EA~R;AZ?CM3R~ zTIprGL_XahnKScx&&)JR-mMeewkn4KlLt*}hL&F9_pOrzwEcKr?4>U~O&%ZZ{Z2@K z1)#yf^&(ic`_+*13`dECg_N%!uI{4a5@|Eybru`KXTkq(eMT^n{nyfgr zTu2BC*SeuQ%4!V<7B|=8gqYB$WTXj@fw8#7%z@tdW9XfRpi95%&H8+ok3nIzksf!z ziWNC4EmBXi^rXyh+bVcJG$>s7BVaE?M-H*r$#dY!hl^j^4IcvdJeZyRjVETmz|MK@ zX;rJ@2#19giWl=%`oh=1GcO!)rqZ!S4V5Z$0`c(gfu+UJ!^6KQ63K7hhtu|+qrx^! zeCZTb;kyT_6joY(Xb_?DiDI3TfVI}T)AK_~`S)}*sq{Rem$LHjqa(L0Bd`MuvtrBU zyt658o5S_Kv4>WG^T5Zkos8b82w&-!4-s{{l8s&RezC>a4_!$SRXJ+mRX#X?q=F)tUK+6NvjT;3qPC%kRM@ zAe}Dx=xa%5qOF(O8v+hJBs@dLfvl4Z+C)99zg&W^GT4W;qy%uX=1^%gJ^4CW*mlCG~o-yX#Ve@=EaoI8c<%YBazkk}LBW z=_m58$ooo|8mt*Kxt8zG*AH4TjLaB%K>Cj3=n$w@kyGwDtCkb)(~hWnw9Ki;)4tiI zMHfGTYW5(3u2^`u#szF!Ge4gZ6bwCs+;V)daEUST(86aN!7tpLo@{ebx;aNGdjBU- z8K4fPC|17tPClBy=tWz|wg)pX5c6BwgT(?lfRMQaTHYia*G6XqjI@1<4PKocmgg!? z(&BiWhhSl(HNMIrq0CU)#L!)!@(ojsY=~0=yGo8VziBZ4g|C2+IJHtgY`%Vgt+)${ zWC|azN96uMXYQKT^jvv;S{JzO%#%0tr5$tx#k3=Kw@s}Y^Y6#_u2_i{D?#;*Lv2&) zn83b@Z=;u^rY~ASt0GoLOYujz^tOhiW-*z%`I1PSI(Dv-0sh{bch)HZN&hLUzo`M$qq-NQST(Wz~+Z~Q?rhkq3m z{pF-`e*#T=LQfFdzI8(Mu}(9~+P?%RxevCB4dDQj6H4e+fyFpYR()ETjLudfz_3F= z)caO4Kw3bO{49AK=?f@sxz6T6z@b=%0sDt5d0(yO-MKh8 zZ<*fb2ns)|-t!dAQVJi1;)>&JU3A%GlY#Z1FsUlvdG~RUbt@PAes^kKPN`;{rvTL$RPdNKa3_f_+slwXNh-#HqXBxL(Ke{~Jx=Kwl^ zEG@J#oLH2E8RTy7l6vrIskA8F*OlTci|NjB zIHobEQ~eu4Q^s527^n?;xZmWAx8}YDg}kuRW79g9FTCb0UL0Fk3Md?78FZf_-~Cz! z5bjX zL#vZSF{LGrTIIJ=f7JPn^wv7!;5tZu(h+p{C~=GiJmy~buo@|1YL|(L&m=x=At#ph z{4F>hm9$V*o6x|iNq^}84v)%*xU~#r6?Kf$;u?8KFKXg0ElQ$jPjtD#W`rOY$kwww zWdgM#&nm666@$!f`Htzu@0xRGcYp+|ne#s4le~pewWi5E{Ng3srd&DG{9x$XRZBJ8 z>Gv|TUxEk9;tI-y9q1Z{MT=muVE@~9k`nut3tkPy-VhCF!6+#iVFxQU>73%uRlaA# zmW-I77Qc+=%J*eeuJZD{Fh>t4v5U&Lp#zn1mfVS;=)tL~qqM;hU>Dr?RWe5JFE~XOrAs(80&+m3RZz`2c4Wh>ia)gn1I=}=V76Ci+E)#9=kh=Lnr;WMs9jD(AEt^5f#so(><@bHiDdY z@a>MY$A^OGOK<7_X40t6jR~uPjEdTCth4DQhkC*P>H@u0Uevq#Eo3ET^w?yy4Kn~$ z{?%SqNHHYjIJO&0xT^9p=zf6lfK)Bv7k961{jmy zr7q6ZDxggJo$I*>>O=Y@YFTyizYX2hY1{O{`RUm+QUBG%X>jd}nV4zg-%su$g#`G& z7jz)Nu$h@!dWx%dldoxO-dFHB-vy4`Sx@3$r@rQq-`kHXK;opk1skKzw<0#rrO&m$wE{>o{k~VJZRzG-7MB)McDhZQW7FL;+rX%#( z%vc@%57vfDJH7*ou-!XH!-zZ7E`95~(tCOH=g7qr z8qa|xU-`4NaiA~H)ogu2Cj`zr$d(8JB%Z~{P(8!P^?2-ChFKGA)Be7-w)!6+q8Lp} zCqVd&Il6>uDCtnkWea$}_>zcR-bAZltXDwKKSMQ3Fb%xFMnGkK@WyTaAbYtV{rmPg zy-wm9JSVgg!}HIk0Zsb|JkrFV&5wRjrF^wGu}ByHIPcQkf3hq$LVtZdP{pjz%IiEB z7UzoEY>`XiyQQv@QE18L4?bU;W-aQW*9bYSkH{{0BTfxqlGAaE3?+-*mt4B}*u~Gz z9wC&M0tEN#LiT$_l!}!!QD#+oW{qELzP&1?{pdR6JvGex_GI-BYbxVf=)SqF|0a$@ zw-T!Q*{XXBFS_Hve?g9+(h{rmn6B5l0mE5}7Vw%6&+X-IqGuv)FRa2QnGdM5G=Yuz zByQTntS|qtw_o^ye4Nq}mYCH{_~j%#%SFVT#jo5pkjm{1r&Xjf^2nkLJ-g}8H=gnP zyMM;ngmW9`4DV+;it%@7Kf>fReMTe1pAGfwG)Fwhdm^CH_$>U1?C_c((#`-bu83F_ z46|QhiCs3gG+N5&AoUvWCa zhXl)f!q_U^Ek{C7WGk>9YHzp3UR<7?-jehAQ+2=s`|q?=luu?HGhp!$dEM4X>vY=; z5*b|ri6ll7?sb`T=KbY)CC)u7lmNwdLWHotLu%f0;~QcOO?bVogU$H4;+O`V*48Pko$bfq+R_}tWylyVWd1NjQQl%M88Xx=^u{V{Yr;! zy>~;?E^N$wC4RO=#d^n8yyop_a^`=U z7WR4;qlq{IanxMl_Dbl{(ZMB5-MllI0{Bi6mq~gN&Z~T$HqMIpUam~vXM!!{wfDZIn6 z_Di4~qKUv59StibJ{`S_+1!9j4!qC4_a|!F=0?6lO5{%~*D?UfyS;Mfu16e)#+>;> zUq7E`1!@mZSWZYG7DQZNaj-5c^Fb`$j69Mf4b{o?-aZY;yQS+`6rn%(Y` zy<5ZxDfh%9S=UOgpG6NWMs+dY7Vy37L7kpT$ZnlHv*BP8QwkW{3*8`%x%a_tss9w* zGS|4&m6ag`{Fdh8Wb=|G?b=zPzXuL&*_lw_g%G$oP{bo!aigFI|Bv#%Xl?2Fsp`f- zs>07l8-P9_Xxav;crOT8^1Kq!AnsG7e|1%+t$K>kD_zmAt&xR zpt(t7*bCp%iK%^zaNt-!|8rV&`&9nPo8Zj1n zjRSsBoQz()oMt#k>}R#J{>c5`=Pt8t@>1A+qo9q*gk6Z$Q> zC4?#dJV?fffk!3aSb9~x-Y?tAG>T~cuLaC#WW###*Ngb`X$lLSS!qrV&WbVaT>&-^ z9J750!h}6KWFUFW1-`}|zPcIs;`({ch6rLWYTC*G06lN|Li5B~w?3J4fkWErd76MD z4N4dr;XKo6r|lh0?c(?OjQfF{{=^I{w|K*M#O_?)in_US971JYL2F3;sHpW-O~y<| zj!IbO+tgP)JokdYujXlO9u+-gO8**{ZWYUf$bLqU|UDP9q;~E5H~=5wx6W z%3}!HX%XxONq!>Ci)`xU+}}TuXh`GH@0uX-itJmH;tD~+N%&K)m=CFP*FXSYbuj?j zrU*3fG{ezPLBYc8?n!<^eNV8s2}u||SH$>K`L!A*604`e6p`flhFV4u^$BA(*ivK) zn|aC7_vf6w;a*Ld^H)Z9Kp1$7LnBY?gzP(o*}~oC;B2f}&=<@NQu~wR)KF{raE%-H z^3VqK6#gD`5gD+%`<7uMOs8WSLr3=8E@?iq{&`2o|ms(DRInbefhDt zCBvk@i$=V*BWI;Nd96%eQDtWBGnAu=lnWn!U|lEqiF-pK$Yw?!#_@^Hb|6U88kL@^ z-Qu2UXS$^|+CWDYJ*h3Xkg?(9%_htP}w5Ao(CEfj^H@34!vKTn?5UN^W+bfbu)v}3tc2b0@g(3iK0!mvDHGEo2?NozfVMv z*GD_Dapm>x$meT9HhWexXSI9c#$!N;kVzeT&|R+ZK^^$0o(HP)-n#ol`s5h2W~I-p zbD8VToq+5PnjlW}d=+=2y3!o!svj~)wS=?8zbmZ8pzzsJo?a;(?~CdP}XWWt^ zdg=w#PW~;yY7}&-XStZ%Sgw|CR$%7yU`N57{b=n<`udHJa-VwP|LuqTc~R^LV%uNy z>UcPO^*;Jom~7X){8`Iffc1J$C#>b6Wm5U2hq#ON-Fx_(A6xZS%r-J%xWGqw~L10Aq@zD}r^XjtqSnA}s= zb%L^0gu;JO(jX*ecv%A7wEVUs_Q-dlZi%wS^#R_ilAY|_;qrXOhAOxI^M8Q3nx!;4 z?bI%{Z=s#Ji~jXNYNav-?uWKyae7$JO0%P?r#QI#^tp;FY;6@g*Y0fo)IHLdFYnbL zMEJZ4gb&3>c@?X{M1L$()SxKX&_40D?Wd3sUYLyeC--jOcaKG(Z~=H#9cQ+ZjILh%)Lc=Bm@HcHm(yAzQ zHu1;aqF#AVf|tL}J?}*i^KTg%ke|=y=75vEycceJ#}n_IEnue;b$gcM=bmTr{`exC zJ8SUgY5r=@!Ff~HP<6$@rpS#hF&egq$+-SHlb7cfFcOs2(p6aRy2!haG6C;gq~DRq z1uwIvS64Gxz6FKUYbKwEfs!FOyQS^h`8V_tQWHaOGDl?dAUF~+lWsydNM>{)p_Bwd zkJ@=SlQ0%#4eciH(6{xAmI)N`S8LR=QN-91d+`NPB2zY5+-F?bUyuC7; z+}s{7z_~nfI<#*zNmG|kmw$_~_*}154s*NoXBvfy-FoixB*6v{0rpMe2{Hn@)FY1W zUFyHy2EqJvFe?AjseGG3TH#*X1N{#}y>TPIHu8R@(JlDKd2na5sB&+-4(q6vZB0Tc zZ1eK=j%!VIxcBOwPaRmUwOQ|)5h8^L>#@gQG6G6p@JmV4(I(V4G2!D~cUWWxEYLY- zODW3Py5#lx1z8$EYTR675~5}d3ai#gY@?}#`2ZO6ua2Pa*)l^u;+qidZ8aQ-jnio+ zZWF#{9g5fZkMDWyBKxD#8L?E0f{@`#PcOuPktUI!r5CJAW{jCEYTvc1_L;A9vGgx~ z`ezzIg|E$&MtFpf7u18VXBStv+rUtI(@8pU=*)r4Hw6N>93`C7$w!>;Os5wVk{tGo zuK7HAM)<1omT(png|(1@^>H6s3|JPQ*I@Q~m;F_k^OWq-!Y94OMq|aNGNSjBaQGPL z^IqU}VhwS^S53@%p6#D6LyZ=NVb@}wo{Aoot)CPPCvPxeVP zXV^({Bp}v(D!ZuV)w2h%{B4|7QHSPZM_U~D!R$8p}M{J8}*b?|mY^}rz zMSiu zPnBU-!kWM5K#CJ41QiMvLT7v>a&gh!&E&itr5NA%I1o?8RK_ZaG}|GuB~F~+Upv`8 zG>ZIY9^1TbC}W}(X|1I08r-ko@g{kYNz53sG^IYm0sKt7)Wgu$1!3B=n4)y| zoM&zVlx_cRq+}#CmlGr<5q>%f&y$IX@ol&HhS5DOGkN&H@edutkJ5}jeuj6BdOcU# zMJgp{$E{DwPA)5gitX`(Di;7aSlgGp|NnmAGN-i!B^kH5)oH%x@N*;VLW-LZoG!Mx zM8PO>imSfp3xmo@jB(Se)ulCsTY?X7?rr|41|&aWobl!#K#bZf%wJEXKuW1|dDscI zsA=E`%fUkTEc1CsJU9FhwM`t}pz3a#7R; zJ2dYFxq3uR^V5f6N0F=tGD}w+uv@atC;a+KvKyT%w2a9j z5*}F1r*-DO-bzl#MDP#tF0Hu(ci7c~hKEH_jk*aHgc%~}v`u#&3%h){#SRT+fbV`) z>G#xzOLZ~E6$~?cR*mtOH>QbrO1+8K01Ok;x{N1UmMn7mK~bEhDYGs5udjvPx5rFw$&qH^t|i{#owN$L_Uqx;RakSWok&=wP5rXwqrD(|(7%1BW*oT%=yH zm4z`@WezAMW&ITvg0p+Lg2Nn%Vqw6^Ca3 zo4h>O>`M)2?>z)`MF+mVH(CA6;MeN`ta{k}gD7V6p2R@f?83~hXU7`fxdz=9jP_t3 zBwd6ZfDxBqG;jSi$>0XVCrt|3HK z9Tq$Qfr~3G)~05P=3~9d5MZdbjIB`WNHxB^;(bt1*bOI}Vqdw%y8zmeDf6CnGE61b zAU@Ve^S1lnswZAlFPf{(f&QDhV&qgg-a1ryh+2vL+qU71%;=I(|MRHE2dqP9?3A>6>MEM>?K{z6v}$(altF6pv`wJcW~;i9~!#rXKa)^a$bEe z;mP6H(8|I6vBOv2s%0wgl)y0!YQ~>Yp3>zC^lqxsWp3O|s9d(yPp?|A)D zSk0DYs*H|nq+6044g=f5-saW}J<2@PKX~-))-BqnQSauFfxJssJ0B{w8i*Jb4|LHq zHm@Qd^~ltJeK}X*=1xcfSePPaPIU4c`ev1qat1r9#GErqa=rN}bd2hwZQAUHQX}e0 z#TttB<)rmb`sRiad2H+uS?&qx2EUD%W6+0BNhj9M;BUwF-AnFx*`guRWT=j)u zXYfj~cga0t%4B$;(SyH@>$oFME&F?{oyZGg$MlL*r8v)AY+s;>#Tbj2I2!@?_b2HHat*J*TXeY<9TlbQQKTunp+J}Dw4occ6b*84eawo4~5cz9mbJ#LUm>c+(`tTWZKX8P8A4d)Jop z8X#f0%0boXmm{#zeKJ7iN?S2?QkI2Q91`M%bASAO3hjAt zalg6qiucl52&7B;s0Cwl#$T6kS0vgd{uk*0@VzY5XYz>Ue*o5;aG&_auRr;6o4enn zAM6$wp}x{u-zuYvM-Ht-LSbU7;ZV+;S9r&Hq%YlYnZc}xv7k<2;e)gtkj|77Oj)`3fK8(QxuDzQE|mH3;q3I zovVx;0&jys12?^TYaczcii?6;A+1$NxLKQj>$*!v;%FyhTjE?uVf{Qq7iu&Sg_)*9 z?{edFTHlrjgW61gBLmIAc`J!zB>5_~3=&cQ$ zs^W@0lC(eP2mx~h0sS(^S3-XX7EcIpR(JbqHGNQs!l3O(z8)+{sLUQ1i_j%yjJuml zTPg?L`T`^dKN)@xN*pxL<7Oi(enewEP z9j|X^s&M0eS4IOd0OvCu_~B94L~%KB8r+K$mM48=pn=#|0^K8v@^=Ha!OD*m$Vovik8wV{7!{F{v1 zJzKpKA|#9216Q*-O&ugWUHRkcC#Gsh_X47a*B+vAd=Q!Oj)EVwe^r2}GFQZakxUPc zPI6Ci%y_C!V_5v%Td7Bn9IrO5J3yrw}uUcS6ziw+!Did`)zE z;2AQHmruKQ-)=`$N;WVVs>v;r_JYj!+h%qZLr3$OR^xLd z4_iyJx9VkM@i9J=C1w*9Y1n9{;w9Lb>85Zqm2vJ3)1tj3toEkKz_s{&GrF+E9-2Li z0hZUsYzwKE#yz-)K=Mz@0BV>ub;#(m48w_Q0vrs(`t9gMh-1GVSbZj zjSJiwQFn*K51@$S-bISW!da7kFOPKWO{-?~0&(&jlct=lvHFW_q6QH~A*w20<>tE$ z76agXBSi>ho8`UKPe8cXQ>fOX2>))t+q6XS&V;sB zuyQanUqnt5cunGzkW}8E0?`5Q8-?>k@+aHf%nu6q>^cJyvTvgdb*6;rsikGVxW`fG z1R1DDz;CCcr7IR8gn7RAwfMWIs=4~xgB7F zdDDim)Qt|Nrl;7_bz^K}(6`?`7#=+M~)xrM9TJaC1-vLU5?*I z$+s1dadFsw7?mR^h~*#(l^0?*v_@UXRha!!mzU%2f%8y+ZN#A(2SE1lwNGrqj~*@w9x2-o(4;1Z~YJW=|$09IWhAJcgNU zYzasX=Sx(#+P7UY05BUcV))(=gPTavI2*wS584B5u_qg?NrAuS1KPJ#A4ko`{gb)M zow{za*pFEH*#1fe$bY%tNND4IBF>v&ZD&F;y>4%|U8*80No|(~8yXC8LbN!#YV}^2 zKn_D0Z62(lb}*&*AZS&Gb>3b|(Olf_S$fte9$wqN(EA*B+OM@%$JXI_S_KcPt(GxH zs4SH)rq2>$ZH%^C!ZC-WwLjKizM)N@Lz5sJFRoSRZ(o;s#DCm4yq}G&%7Q`XN1G3i zp?4EMazxrjd>6KYNZl;*(|OUEHe3q*G7fAt43^rLn^G*A!+q$|`6(kj`)Ot21>@U* zd>YP(Z)QjOe}J2|DGzhrWKY` z^&Ky~e^ezM)6~K9g~`$g3Dou#Q~|xDMLwzu+J$r;najW*c%k^+Rmqi~it>_UT_We zA$(a~ce+}&P0s&%FC5b4zAT3uBqe^vpYnN*m)m(eL!HR(4km+uu&O7VR$~^9g{~yU z9y!j^x?5kSBMfRpz2W_s71){Q%zjskvND8yd4juzweryN@s+Ovm0UIY!+hcM zx8Hpfd&ZzOHCkn=w>NxR7ht-aGLthi_7{#=z!FyS#B8nGS2O)4H13R$vC~tf0XLCj z_ksf3`#n)sUwqvH7iOlW_Gc$dNbU);p8J#aJ;Pc-va+}1^AcLo#Vu_TZxfWrB!IcG zmTiM?i<&__?;_&)M}OqrrCaZT@4D=hF-Z(l4aPvr&@83$h1?8UA;+dwDk32z9py0Bx8|Gw+=1%;B`$6+V zW9Xr(a~aIYKPH4g8vpPhI9@H-C||)qeG0{N+F$FR*09F1`daTd#KwE?;nOb zI{GOOAN2roicjizpyz3ul_vadcaQtwvWHS2?(}NeF3Xh#Hnl#m5tHJ*D??f{y(|L5 zh(jdz=g$n;e%7<)))TnCBOWuDtAhG92%mCbknX0`QBA%Y@RoX&g{l2=`P`iQhuB9z zT(C-t#Fja9Phjx!c)iNN1rM3dZlPsp8OP1sBR}{!5^bmxg|klRq*u}zWxvvK(l4R< zkgtiq5qdueYo^v~erXrg^!f%c-aJE`O%c0v#X5xDprM8T!N)i_ykhTv02tG6idLJ# zZ63}RSfaX~aktF(m+c*QGahxoNQ&F(zPNxP_#jk4U_IiDp2OtL6DN#PUw(p_`Lyo@LG_UT zN6~q>v-!VmIA&0^ls0MpYjG>2TYyC6`J7WINL)nW-$Ik&|t9=n4zgcr!PT zK8+I0UX5H+ z(f;Os6Pt)mXj`7?XFqxw<`W@koXy>(tVL>RJ|Xye`XiY%PMxA^$YJkB*4($e%RGAR zYRJl%k{$>`u9wOK-jlaSu_eOZ7c{H#u2a8E0er^?KgoSwn&~R2q^|sB^X(X07%#$jEM|*nd^3adI@K*+vSe_WqqQ*D6jQ6+kz#$W%P*es@_tn_QFciYy96T ztT}B>>)UX~Ixig7yj7fV;-QvXAj@ui-VMGX;;&Qs-{OBLR+t0kPX}I?Npt0|#3de) zDsl#)>H@=Qs7Y(zp0HnIX~?6j&w(cOlZ<;Q#zKCx8x?iu0<9KY4{q{okEMe_WQX8f zMaBc>Gm=lzb4<}i&p)-L7ijn@Pv5a*AW~i5c*QWS(yzcGaWUVw} z81o{#r!jb=uTcKg%Jm+}uj(m7kf_)#eXF2Jwmq?7s@Cn@l>oTDT;vROxDvj-*1!uX z`}RA(T2ru!n#OM6+aS;>YzD(;3S8Zr)szX79kPQe5`CKNbxpd8!(K5D??9-BQoOioXhTs~Gxg_1$nMK9@9FC#Fth%#E{ErBtDP_*#>?I#<0KgtS>iVSm!>7%YQ zO7ImmstYQ#>{Koj3>gyAD|o>*X+R$I#BE5 z*O+kQU!e`~S~h>_ZOgaA>Y5$`sRF^_H*|VAimeGZ3eK;7GW4t4FKuG=hnC#D+n5Z5 z`P+~IDf7x%myTUC3N($G)Hf%in$qW|ho+r(n@fN|pvY|)QEeX8IO9Nr{Xh;S*xen- zdEZn#LmT+bkdGRY*Z60dqw5vePFlDgmYNSxJ8q+@8-xE{!?YCJ_5dM#wmH-W-1m2^ zS6`oPIdR&~uhT_MRafpm1?%4o98=n|>nUA`e0}C*f;!EiRgTG&?!Y1XG41|Dc2nh@qAr%G+K zKX@Mt)U7#^?r43sIr6G}$hIiM{3|AM+SLf3Byr{T8cz3><^pUk8ApE!GKIf|v zhweb}CtBi$Kxqu?ctMJ%X4aS3v@rmn9e`z*Ji=|nfW<4U%#=5qACko0Y1X!FMorLI z86?@@a8*bSN4m+0r_~L@SJ7<~t#Obr^rf$nB_HK2yLZZ%n zXTvH|irC_B}fOL8iU4t?OZqd#ow-TJD_KkzfXM@gz0iTvue#sJP& zg-L+b<}BuAskW3BthtUO^7hUT+w8oAz?KqwLo-!z-i6wlDnSgYoqtQOQ9Ou7t(_zk zWKB<9eL~O-#ty%1z9p}3K6UkY6O(w^&kf+fWP1%TNjKF1$2F}{Vm!_5huBFauXf)5 zZaYng5v6mdq}p#u_OC@k=CN$@$5qLUVSgpb0jH3|?9=3AxMCeHGu>W2HFe{CLsS;n zrq5<^_G351Kr#C@9@Hr`5Qqh~%A5XogO}u_K4EYLN%&x5?JrvcK;p9H^r7FooDWt4 z7?i{)y({cz3PwQz+DbYSeJv^Co=adMn$cu-Lwh%DSLSzZ5DAqT5j71hUdp{eP755X zO1<$a%NYCR$0)kkN$1`$&edhlgoe!BSqckfuyMtzH>yv%i^o3qu z+_n!(CO@$aQcPJuRFX|uH|q_B4+C+%AWCr=T;ZX#FrsA|bwsYw*$I~feKbbP0jX{a z443R7`A0rq!X;z`hP7rWd8jh8@h~+iP&JIwfg4dX|KA-3B zw~!ywQo+JdxnUXvH3?WU2pA5;Wi!Y>#3j#)6GbXM(6DxSGHW^7HWZUAP@!4IIWhLz<}BwR-mgX~~G z@*AE{=>J#HclpJSS{X>ov!=W0ia8>i6CrUY!2KEk=4B)>C9xFPKtW$PtGU8t-$$HYXGumnw%7QOsje4$D=v|R&nDVRJ zMluSS3*^_YCBIeDS!`j&R|kFs2v90Se8mwj`BLC%K65O%?2Sx132-idx39QO+AmQlv3nbRh@rNz_wMA3JxEd#l|cIr_@!s!i{wT zGhZ!OIo39V#onW7#4{<|mXe>6{5rO}y|^PBt^v7HXdR^d<&y))3T+sIQt5+*^HDW3 zIahXZTXHI#cRs|03gj(}Q-e&FWD_6DZ3w(8#{R^HhbCVnALL@qx?Bbs@yS>(}QKh#x^zKn$hriaDo3(bpM5HXbt zoIsMYbUN2Ke9x?SuO~g`7bVEX~ zVg|L{sDL=c4G(AS`E2wBiLPG3pGm83TTG`e$?&(etkyA#x3!+ZrDDC>A~a=NM?3lp zC1vJ0QI;PbBJ!f}ZtU@_de~Hhm(o8f65CAv{%0yzhbYG%Z<0ifSE~yxMivn750_H+ zW9B^N`IH-Dyc=8p-Sd={yT(9fEO4M`ME(yToBwBJW1smj?TOp9lxex;Slx{ zbjTm?j(vK9B*ZN)lcSqb>ziQU1{`#dzsUXaP-gUnvgUZtpBubyd6Ze2 z=p_M?7rRzRefWCqLn=|Ixj;e$2{t^F7ZZ+DPQY6p_*Hdhy17IbDHp?r!p7 z53QLIv}bWIZUcQlv(6KS8lfPRbkfuu!p+1}D>q-$Y$k2+nhTVt9X!b2(uCopLo6xt6sS04d&k~T8bLCT6hk>Pq@4jX1xc0ae3jdCTtiZLM z1I=n+)8i*XZwX85W} zLqWn`n)R$YD~)ep#@F=go5YKN-cNDh$`$hoD-6Wl?I1oGK4QtxhGRVcyIQS@OcZ2w zclrFIp!uwjC3=ly4ttdJ!Xo!MKgw2QQ_HR<(7x^BN^_t>SF6F{`p@z7^)#VgiPx?< zyOw<)13A_B&7XB7sZsmTQgBfEdWq%Iz~hz{&Y|bEVuu8zz!HHgB^6MHraDig^i!2I zf{GnKha#nVBqOBp79^rrX_%d zn&3u;$j)|D+o5IQTM$qpgz9%N=R+I_x5Vu+1H9`AQfGqLz)En8ZUa+N;6IZ7}S38@A)K- zLq|#xetCrS*qN@3Mm`9U8ZsKAL|W6 z-DZ;SNU+?q$3r-r|1__mC5(k$zOyiFVK@J21Bbtk?pt=DZP9U3y$YWgQ4LUtM7nWy z&J``i4Vptvi^TCdei0utL#=xjhBFN=V=v>{*4E=zR!jO6rT8-ivO=xVM}3moF(|TA zUEib~!)(gGzJD*$)A9BxQdz5u9T408Rk*pU<&Z*Q2;AJ?iwCD|dD}jEptahHzu}h+ z`>R98Z?7^h+yWMaxy4DQV`lzw->ccfs)#BUWw%9QfG2q$=%wzv$wS#h56Fn;yh;PN z2b(uZL>-=mwp0c~QiaiRgUTK>1hlQUe_UI3!k%jbw{h4Cuz|_UMA{yYT+O_tdBO1C zi+wWJePq!FXij5HU;WaDFUP(lKu2x(VM5uSf|qpxSi|j}iuY}~PtLd&{vC^>>i2YX z++2?x4(w)wj!vk|DXaI2YuCeY#&V+9{eizHLCvw0;N+d}aAqJ_S*d1a4MP>G6xZe| zT)N0_K`J13E{W2=c>ch?=?7;3Av9s>5Bzexj{7CZN38#lSZn`W_wc6TrSGCH*(QRI zRzo=|rt-D<(eCUeo?E3LXN^evQzi3QDQ0p-=HEEj= zXz9kf7=`!g#7b$hJ7XKZl5va*?nM~53}7gjiQiGOu$Y82MnoA9(Aq3V}z5Xm2Kl7EaC2^Ba!W`=muhWQRFh4?MkxS7FrIx43LhH*?sD zNyU)s8>1B>BLAvH40)5?Do*(1wzRpMeM!QVf8&FL>C)@cLyMQnlES5)l#hRy$ZjwI z&U|0!Dl$3%!V>mXU2m)0W0$Tl;qqXPRDeq95NRDByoP6#WetfJ#g^XoT$>y5ac?+T z_%-QO&h5&|<)=IcjYi3W+*~n}4-+7wnu%$dVWV>?Eum-1vGIHB4239#NG;305tvOa zYgZZT*(2hM>t6XvGbPDklzLsIKLich2#1f~yw9HCA{*rgFPR0ONYJqdv-sG+cAF?z z-E6{meY$VEIsT}nReLJleeT-#t2T#+dZ{(j=Dm}{jP-U1opSnZH4*3Z*;cdpcc#^p^kH}K&!8Mw zAt_iRGc>Tl#*5aC0)ZM8O6jF8lJmH|z)Ju(vK5t3&AsgG1Pq+3iwyjnl=-a2)KxIG zZTKbWa|;i4MSI7)b5A$pJps~2d;rwDp*So-*nf_&3FFG%cg4g)dV7Z?UkRhF<9J3Y z><24yC5 z-LMuccZ)})+u~pUm^b16Zw)tJ)k?pTnC3cqQN}^A*sohTIxW=aIKd=ZJrFzevMY+? z$7dUZr~{#Q%Nt;kN~w)*Rvm|MrOBW<>y~kBjzn5Cxz_AU3gLL9SN^~bpk(Abd;dt*`8N7K2sG`!r>y4$@-$N zFvtcKbNN(c&U-{>Ae`}fPR47af*?8G>`U%DiML4oX-eOO%cH;|tVcF$>xT~gR1b9! z1sx!vVQsY7_-mqNa+%&2m{$;hHW$Kza=>9$SpH|~2}UcCq}De_S`9Wtq-$!dlw8aZ<9OQ*mU2p3nL z=JELUzxH7-A}nx$R(dg4TQHl4F+I#i9oT}ZR!F9b`Rg>|-RR%VS`+#1Ite-U!LvnT8Mb=VVs>=W zmpU@xfdPp7oMgOSvvBSDA*`&umkZ`?eqTeh}!f}sg=a&(|R{+(t*h0s>-=TW9!;%@^=?+^?o0fBkp z6=knc^2)4CD!QKuWqS$6g1DHuFxekUZs|Y6S4y^(Sm6w&5i|Idg{T1Mh;(fv$NX1i z$qq`qSwA}yR|WB{uhA@aah5WcUX@8Dfm_9F9$-CPnCNb+5~1J_G3)YjgE3kF7`JVb z)RlR9MmpftzA|1z(k#WHZN;lg9U2#~HnvwAqtMK|+IYGMbU4aJZI1K_i>mw^haC-{-GYO6bHa*z%l}H!KIF3%jrfykT+ulq-QE!@XzhdK5_F6{_B~ zDUBQa+lwS;^M?wzm2D?-UZcV(!24Mv78Ryxb6D{W|qycGHqO$9jE$eRA|gX`#g(Ysz`Z+GF0acxqs>+D zlq077Q188BOIYIQ+e|n1F9e>Bq$^iZ@zwC9nN2_#B1U^Y{#XOKj8rPG)cH))V>pFl zp*$lMZ`<(Y26ZG_FsKF2SFqSR+p>d_KgT;B9m(<$W-cV5CUB9))a!3W8 zaz-=p(b;6b$Jy+}uaD@1(*rBlfog~8@BM)ytf5x_Nwd0qd{#{yjAL$JpsHPAMu6;C zQqSb~!0f9^8FEbR!(pTAqcSsz=no^}Q)x8+gc6^@vg{O+4CHssmXlvo5h+b1k0)l? zgE8;cqFT7z4X)g(>*rb{Id!BBg8nWsK)lMrxZ+;5nad%NBCH@#KW%KkGm3)lDUdEDwl(Qhl3V$oFq4&0O_y(5>Qj)xBiXi^> zxE;fhvipgCPp$UyjijbkW3+`11R7{Y^9WReWNX`3E8W<@MxVLdiB~_`GIxc)YZSQT z9|FqcykF-#LP*n0Y|dqR@CZJuj@J=K^}Mlv?)x5~qVeQ?0HsLZY5Y$2KrxecdEsLD z9@5HhE4_pEcwdduyzBJtdzOZ$!RC&4Y+{~p!f)N|X641LAi*wx18#ZlV`asY$>F#V zMGsSS$US+@Uz3Hr?CatJX92u+dCu2?>pZ}kycL=s{VJQql^z3TDs_9$ZoYV8>scdv z?x(%-qL8U7b$Hq8(6)=lHq(`V8%G~x5gJ?`(mL@geNp+jjh&upNZUCzO@rZYW2dy* zSzdc$N>!8_AzIKQ%JmtqhKJWx#jF4v_%-ZAMW?i!hB?XmE7xN}Ji6d(g>JlV?QvT+ zO-ax*1Gnr?`PW``9tT`S&Bf~L)4T&uPn8!wrsD>UaAjM`Zy(3^&2iRfIEpEQ0>F-) zfAdU)Lwr92x-R%jUF&3TZa~#2Tpx7)sA&=A**I;R%Bx;S-Y<1?{d|H@h?^0RPfrDr z@k84tpoKzbn$d6K?Cvj$&nKbu($OcNqfr{8o$e4#N+z;{Tj%(=fNE?RV2jmj-?!J1 zew4?yqi_XX(#FGoWPogbB923-Go;Yv@-s-f2VK6``fyf^eOF>tvGy-qTRSfd zG5pYWiGp9+Q30w;86p}MNuB-`f*F$GLW1_GGo!p)waWNl|- z7y@ra7EZgE4ITeLK39H@r`&yc^7KLLPz6938<^?OT$!&C`3?Q>e}D>yo>*Gr#%DmB zBT`7!)l0MmQKnWR!=A3SGwsshPGM)JE0WU3hqz~b#NuZv5V+ppVY99$Q{b^}n zVmLf2mKk`rjx$`6zWH^Nz@&n&1(lO{Ldq}ry8_seLRfxGUe29gU%2m#Hdj>p&C4}csaSAi_SO)0lBRKut@iO%Wiq5=Ya~CNPmFcf-DCqIm zat^pREZL%3E#+TuR>)R!Y+#^vPKv$4!HWi-l==3NKwIW+swm&Jq?aq$iIppocm4-Z zeHNNv<-9_bENriYpbNtP2l%dqhr##f*SutH*L3+mZZW`XOM%YJWc#PO@{!umK+^{R zm&{{Sj(3`F)_uK}nV{qS(UK7dlrBR$f~VI9h0U=?tRxg*LpLj~#Pydr&YN=)O>m71 zucxQ1QK;W_dv9I# zu|S^Ez3+{g;cRz9pDk`FH@(%QO3n!)&T?5-H4-#cZ^N63k)AyVU|3xidKHUrKMA$nnn@0DVR5u#&VDm9>6Fc z|9;SJrgHAV&9ysl#ct2$7b!Ot{02))e%JK%geXgN2m%_NTDQ47IIpT{X5$kD1##22 zJMG3l%M1=f(6X!!NnwR#c3| zZxg}2GHtf*eOs;FYK?R3+PsGTl3_+I^C+kO!^g+f$?`iPt9Yq4mA@;U)A7#Q3bP=A ztddA=1;y4D>m^HUB*(#m#XqXofF`Dohh+G>8zO>8C{+*K)k_Wzs>XlH7iQh$0Y9sdzJb+z9kLPm zn`$G;rs1ky!NOU7P3>1)mrmbrp?9eC*Ev%bTO7_k)-E!-jmy0IgkM76xA0(lf2#Jx zb^X(*)vb@$M~Y}x)3^IpII_Kv0uUC+<`lm4&#cDlx5`;Y{Q<4}e|_{Wu60=RX1bRc z1Vpc4PlvLf&(bsSE1GlQZi{EH+{);-H#cystfP@c81d>9|9QWDc_Bvpeq7OZR_H@7 zqR0uAy1aZJ#v?Y>&NIjNT%6PjE)Y{pV%jki?h2x1ZaeTwvkBr&Obg47;u2>QeM+sc zJl+cu=effOmvnXt=!%+$mbmt-4$gmNc?xKD`KkFsa>!|6K&R(dqJ)V%ng5+q>@_$A ztv;qn90zPJb4?+>QG%z4#(m2C*F-sObg%pK6yrH~RTffa#%?^J1l{EKdZ5Qj`||fB zNh)-v3GEzQ|TF)Fnoy`**x?=DUk0oMXgD#{ddRT=O-qt3dMm z{oP#z!GD&r!5=yn;^Uy$4B5)H6wvID(@S*1uTrGXfj6oIJ^vxDxK1lyf2de&nY2_d zon-xam_5wOO`|}w8rUk%;xJ}X!Z+lj*e6FA;9Ts>?Kl=>>54FwwGj@S=lAl}?0fVa z@k31_{3%n9;?L(#5|j^3@`QW9rl|nzmm++DZ?8~zG1H9mJPnlqg!JNWjo_)M0Eq^{ zT0)_8tOi$Hq26MHzG%ZDuY?UozN38`B%{97v?d+wTd-LOw=@w|(n$ZkHgp4h^wHNj zoH5Mm-0um(u;jdm3&|UpDljwj_yx08mm%RmB-5xL6mwBD*t`W}ooKnnmq}~LeT7SE z9(^wS3DSJa{MU(+`3K@-&WTvpsK&~`sUkPeHqX&M@-rBwwuC-&&0i9IKzQw20F_pu z3{_S=*793GyB@XU884P{$SLXYfrT-}n|-4FqxrwR$M8w_Jm$VZOgk$?|Is=d|STJmmvSP1_j8r`HXJ4>z|%dUogg@ zZ@mw*l8Jdy#w5x%(LN$jcjRB=uxHVd#>uE2HvMVcBk(Orf#Hn` z!bXMOwMx&Vbsa=wV|tRUMhYk5K{M9^31A}4AmvI#V{`dD#(E-lJoHO}sKkCfl9KB> zF_x7Vt7C;VF6RF*!&+%ztgPms3sPu#F?aPDYVD2+ec%h)8$dX7MuM%@XkAr0czYK^I&L9`_{9yCI^sE-HJJ z$^hWh2TpnoH0zhi0m*=enSRi;zQ_v$$o4+M;M;*k8*YCreI-#rR4Uj>bS`pxke?Q?Ba|7X$n1iPg=Lt!NpEsx{;se=(3m{-$}gjqs?B&Tvw6jCGi`! z?>MoaOS}!&MfA;iM(BSbOFntb#W`dH_%<>&Q*9P<$)mTdk(p_#OxIW=6(E14@4qMW z``DC(^%72a)J$C?p*w8Lvb6gy3%@3guhYM5Ta5P%D9OrQ*%T*tEIKmtk6#(d$>ryw0G)tc)KTMaH+fNnpoP3~?sx`^0 zAo31>!j(;`E{t6%>0vZKLiU%PxU0JTvb<5{cJ_zq(|;3u1r0|n6RfXtLvIBNu&)CC z2Y8YtLWHmDW98c)QCFna4haP^f2{prvSY!VlVv_45k~ENIO^HNjM0_FxL2c*{dC>8 zCaY5`me8(=4dX*P%J`O4EbgUE*tx&|3%kr&CM(T4OOF09M}#4YU#Nir7?hR1@clx~ zu#6g;6_#R{vAtuEf|ve+?tjb-hU>eg4mU5+PoOo3btX{HVc?(bT6F^jZ7oWL$@{N| zH|i%j_&l<2HggNQFJm^h)W?_`*tr0Ufw1rAZ{PX>LEazg>bF#{XbkvEeu1;oo*e3E zG%CuDs$(a4-*GB*1*ne`+R@3{S|4_;ZY6wu@fy8-OnRbyw9nAsCZ~z?FGjL(eK&-V zz%?%Be)8LT@-{Mr3);+P$Mu@}Ljk0rB*(qQm4DCEq?#S>YOV#wzaojRId+{`^o}V- zC$U@zOs1EBUfq`{F`yWEBxSO`fmQjdtVHxt;**U{17E!r{JZ3ptNFo$ZvC{p!Yu4) z@n*&6_}Z>P1tULoL|6H{VFgAV()&BFtuMopy_H@i7h+P{`AhMq8%>!YvfuFy)^Kkj ziG)N0>SX8)Y*fe>5YA>GD)4M!4I7znrhK@iA(PIl&QFY6J6EQy?3oLpMl6~&G?zmF zf~YO;k`&flpFbKlihswf!sG)T?K>T${Cer1x9yrH)cy~!K<~_w8noO3rs@tWG|PBr@?7p}C@xH;t1P%YYCH2}xr)?XKadTVwHpJZD$2n0@(LZc4 zm?NgRlx(1bi?l5%NsF6Jq|YWi8eF43PYB~Ii5XVXFC-m(ok6}9P-&J+3!?zr$D8qs zp9CC21pW3;D+9c=!@K+(POy`x$-^?Wr!o(v_!FB06s}srlhu|M@)nqhv+WX18m-h{ zoyF}FnhN}kE`T4Uk8a{02FFce1f?5E^-B2>=zs}|V1O|NOf-n+j}u|!*CNywXF{y5 z)SZD;{XnhlXUJfniKK!H(=9SK0Q`sHqi`|cJuCtsf&)?JO6^TO&PPByl;xx0y4Rjaygyy;Prq`tsII z6!a6^rkz6nx zIk#8=?jKbp)MDMyLc?pQRg|X@d9QCnpw0Hqj{feX+(W$RBROq`c(pDC4W z`1-{duA9_5LL;`V3s>eQPo>O=0fo3i-({I0t8}F%23~q>xV$a;YRavZO`<+zR>Fnu ze6=cP_SGZQ6|=!Y^qumOHnP*HlMbIzGdOP`xa=nU!2oTsHgz4HuosOEP^BCSi{BVWCZ zsM=CG|FaTTq1tllK5G9yym+uX0Lox0rDIOOI&@uK|F}{G*E4c{mUr4`%6Swb%x)YG@9rDzg zNP#~D@FUF18fVS}7+>ZY470y?c-Qo|1uv=p>U68~9Lje)U~fM_j=R=CXFuJT<-WBs z54Zxp#+L*TsCO6yL7WxBR^P!SxBAzgBJUggco14b9$(7*ZX##Vn+Nqi$9 z3>j9i{=guN4)Kn~u!AL`|3K5@i#JhJss2Vsh%>G2ZsxZbupr+Xd!386t*Z{>-|)uO zST?=nH`mU!jaCRF&R(VQ0U&>K``5?KK#-E3W7C}c@>HI&-l#+6T!MUl${&Zb)1pts zK2?K;p~;4q+SYXZTU2~75V{M0xr_461=$WP7>`&;Mp!p;^PFCg>e}UW`uqwxjm>lqTu$O%&YKvseY+JGXr&=%6`};+8eM0SflnlJ?OkZRDYHN*CA9R%3kuJ z$(B|Wht6vQ6yh0!As4Z>0!_P$CqOz*`Mnw{3PjsmIQ9Xjlqw}moW=DBYUJ=zVciHJ z2PyJ{s?cTE$ESoUq$iyLWaShzevNBeyO0x6y6adLG}KHo$u)^LTYjl5{l+&3&ZhZH+!Lr%{r$)&I7c@ty>m@WIrZufw6OUpPq&(t8~v!X*M)1^}b{} zbmA+JIetM8paj?3d$lY(dnS52M^XVfqaD$lhTwGV85dhRXvu(>4*l!re+#dVit;Gu zeq;4W`kLd-Csi`{Wx=YJ>&I0v5!{#BW&te@M0~5B;9(r4!p5f3I093qTVZY>de%g5 z&!p?~)DaMJ-Lp_6t)u3Ep6;y3Cm{!Fv~3mDf&$POMb{?j9*s`)EIu%kF9f4eCx|@< zk7w{qWSsmsYq+GUywxa84;u&J?D~Ihusme49MsdS5(8WLolYpEJY~4@Yn;nfrjf)0 zWpg79pYdWN>F1lcfeS%-lh(TXyGz6X)M%h_U6rZ7LZG8bs#F*2<479I##U(`Hgq#r z#oeLgX3z#YU+);LRgc+-Z+P$KjZSF;oGX2as@{jOAIy;4qLLMW_QQ&aiavhy9+_ED z@m|sdO3ePQ4bw`JDvc#@K!7T=_>|m|vHxt z`oiVNOL#Rf3iR)VX5VhOK|wGo1^@wR)nSSYJT=opx!2<{>|JL>&kN@y#eMj0Q3vYd zM`6z|@HD+8LIDdG)*LQnDRAyMGbj1L$S1KQ1Ucv^BL`KtsE zSuA42l5A>&K>cT*VAy;Uk7hhm>(*ptbXMEO!GTX+JB*>fZ93C?K=^kSjfzqjv*Nhr zUb{f{yyh+3Hbwl|jNCTW`VI|7ZT*EpHh0bX9JTV-cY5apgR+{*u1onGW$M^0>LSl~ zPq8!93Ka{L(?~Z@y=a>3O%(zs+tP=PJysxn)kL;*(zOj4s}6EEB)S^bIZOd>wn$&& zelv+XBXP6nvHy*M7LF`ANvb3T`*cLKRq)}b@=;)>!W%xPM9(O8ee>kbBsod$FHSj$ z-v9O3%LO-d(YVsHdhl=0>u93(5sH4gDpBy`pPj56a5LmL+WQ8JOiqd;${?i0jMa$g zWUAw5G&{SY5@wy~-Uj5MLOoI`UbuV%t33JueX#3*I29z8bid!2@+0rd7K64JvHu#O z^L-7|{by;cd;tc6kXzGuZ$4 zwI4W@lt&-gD&;_d&dN7C2oB$aJ>X&hxI#;xFnl~t{MX79aYAV4H$&j>l=qA^)8<+z zK)Q`;#Eg5E)SnbuCCpzBQrp0FY z1N|lvjvJ+OLK`iM_p~13@N7|yB9?a~kdNWsJ(S3%cCr%FKvW$odwn`#F+#jWXod!W z`Rg^v$b7GJf(7U5vv$hQrfwIBZo8g7o#nJ;^JPs`M>{BGo-rHD0_>;e9RgZvA|ip_ z1~w249cT;4A$%TPa5Tz6e9%pr!Jv?y1KT!Tu?uG0JB87i%uk5lj9K) zSV5HT56h3h@P^fytW;O*dq3oJH4={j@1FJ4n!mx7lt$25Wux{-&X`3sIhVG1ixI-Y zT)EkK&G>FAOi~aFG_?sOFJcFS5EHx4eI?`u{>+E5?E3hmiXd)o0Evb~uU#%3EO#7* zpUrQsXrhPFu%27GsG`~H;rFYxQ6G#h<2IKHAHG>^7%PD4?8aw;wO;ZC7uv48%8NLy z^u}3Vr}`>yj#ojv22K@219Stw5W~=6|e7l~QU>i(T86XcH#mBcFzwWv3VF-y-vf zB&Pj}PrS`bO8F-7=yJ|~BEuVD7yk}nUhywt4THnui0?6XqIJ7)eNZ#QnuLmpzV4FW zoj0Jl4K)15`=&3WzE>+wYt`RNxAv!VZQAn!B~vp!Y9h$ue&z$WgTsJK${^6o66>$Q zvT>KCTLWDna#mTo|B4{0jcEHHAjP43SJ7x$f&~~j^o;pI%bD74_d`9y`*i+G=1?Z( z347Wxd5xE6m5+>N2>s5dy_L1g>pD$-WQ24cIbCz##}{sr+KmA`ye)WO7;0mklR(to zHk-S~s_JA2_0kUTSAfieIXxz6gkwzAtWk>H_=Kr zs8Neje|CTWW03mhSn{LyEb{0u#4`W}cUC<0OzwI_c1K-evyACn>baOpAtSWKN-jPj z*+0yKD6Mq>XamP5KC#Mu+oSo-3UrN!nu_+-kydr=^M9Z_X7*@j?`M@{I}7 zXML5p-Jk5IJ`f~x=i>T0UDE8HzC6xOKp{XuADUU3g4xW?t%>IN`+Zp2NTXr&jEQ3L zRg#Clgn!}(d1F7`RnM=r|rY7#BqOX-p~9#htRCS#cDbqIrJTCR1)V)UGR&&JO^z0F+xpz z0a9KfSJ1G?Fcy~Y5p?Uj>CL*^CdCH!-nQ19l8!9_VHc!SDLDnCKvAJC7pFPgTXn%9 z#G}eS$ZU=nG1-6yFQ-1M^fpXkj)*MVHR2=8^ea#?l&>1R7}=NYy912_WpJ8hLE2os zUB0V@oY5?_*UWkNCa{|{S`Om~#cMLt&{pY(J+{HEU2DlL91#v~DLeWiXt=hM5k%y? zgnu@VM=%t-k$%hyh}WuD*a-Nx_3po5u)i$`5H{Y^u`Dl?sJCq#CDm_srPL$JTeN&AFtMFkSB5Fs)0Z+Txu_*Wp`Nh2OZD%*WH3v! z=e;4y!ysT9BmUpxOWF&8v0G5dpgoB$_fWU^@zm|+nx%P+lri|{TQx0w#!ue`*Mo`V zYqJ&$q2p=^uU*@AbV+*D>B6`{1aqq$JFY03rv>4P(qJ8%q%TUyUmsF)yF#Qv} zaW6|Cwy6lucqdYI1D`A6)A!8MWIpWEfy!L<6vALtrK-|f6kRiH5K`hU!I8B7wwUzz z8cinfPq(d7!-8$l=yQ|{w0{w@k&zmFr%jSBG1NMVSp`$A34nUuZdpm@9X&6uovbXs zEjNYu$>Z2+q%=xrWN!5D^Z20l8AOTx<-*!N<2xO){>d#uR_vf&L$?}Tl5w#kY}5I7 zClI>xs_5V)T}=^2OLyXUHY`15#4jWM_PVtoX*%64OoVk1HRIZ9EIaE;5sWZ<`&3-e zm4An#W&YwT4n}Q-`0FRU4*0g22M;urse!+w=0J?s6wr#}c|{D4t;dE+-}kk|rwjIE zc+CzJW9RfDqDHZG1`ou5n!itrE}g908dlW9#=m%o2&C;u8jRU21SGdcnw9Q<)7d;K z!oTPYf|eTPZ{F#`1ZGdPbw_9iv^EhX`VR9s)88=FT$eRzSm2|KWvM)fy$bwU3g&62 zx;7#i%xk2x8MJaku@Bw zYc?qp;)wg=;gd%do=p20-+P<&D;aWASW?q-p_Jq~&nssso}= zQdhhEmsQpe%~s0orAPKy4o;2c=B>rI^cof5;Ct_x4En z?DoTaapJy+^Oy6XVWHnP@|W?aWx!LKTHsWi-8xMYdg#b2g| ziUoP<)L8vC%scLv{2lV>3nDAOw$!!%0Tii3p@y*v`?5y_Z|1K_$A)R#FX@^|1)#pZ zPWHERWdnqT8Bwy1o*aV_EAvW}8>sUGC<=8C``@TX}{Zm2GZ` zXA`&DPJzq+emIlG%NI2y0e=v>QTPJ+p-r4l^QygOjs$H5fh?}naoKGb#UWGq2tBn>fU=n4~v$~ z?L*0Zd(>8LyK#R)1y<2i>Yr0M(7vh1iWGjp*KfRC99?bWgqq9q{ z{Bp6UX_vw8CEx)XNTij8@z&=Y7vXQT2Lsjp)zl1mky!UU9~ImrngHcUtFaNk{rr}> zc+j~x@ONkYl+vceac7YIdIM(dK0I0e%_`O4`KbO=4Q=IFi=X1pMJ)c*+p@*D zR;?B#BraZ}Rd;rkSH<6iFLNw{^FFnXSt(%K37F>W`(0-QIF?WA z6rkmRf=eYxuEg-4{6c2i3(<4_o85Q(FXemvhm5x}Ifxsa=tAlq!K+Ns4MKy*M%CM$ z$b)cP3bU((a`Kf|N151lr!NA{SY_f)SjT^_%bHpQh_G=gWdhQvVg zfk)fw&x2j_q;fqbxz-xw+Tui3bd|JSB~N~5(nG2}bPxjs^7)Y~4D3o3L(d$}h%tlF zH|dk8_);6Q?xIhHk~&Q#V#4!H5LfKavy$jx_#!D0_Vl{a+x+V7As+o8daZ-Jk8Sx^ zvQ&Yu*ND4qix8V zZjEZ>&#@oArfwVEN)F??Oh+tz-@BYoD}i2X(*5gBTwzw#jQt~m04$*;b|~O}`9JNbkTODthno_j3`l%2rCf&i*j*9n^n{ z41dGHZymU3X4SPJ`0%tR!h65kDzN34?Iu7?Gy8f!DsuF_MaJwVjyZr`6zd$s4-IAk zxe0SE{oUfF&(Vwt9Y7#01bDc^ZGyHOolNgJZ4dj4Pp6Y+_d^HtTEIQ%2M4K8BCk{d+zW;m(cPFMml`g;BMwi0=^YgLkY%7b6X)Kc+eDSJUvlo@M#ClCY#F+A~?Dee)n z-EfXjxUa;w@u&}oBeZ_L)|h0wi5WW$k$$t5+P=DHQ z=dE?Q2S`;4m7o{C0(eI2&d@!+ZaP~gX}}cq_*c4lwG(Xfot?Gf$sgv0uL)5~{8 z53~RJzJ4n`$@u}Y&sv{Ce*8?DoYFf3v&=Y?tWmYoldH(W6P#BKmZvosq-Ll-)Ns;MPu<-f+TQ)?Xz zVtdcG90F~LttoLWC<)CCu^?b)B~k1Uz|WXsAbXWY(or|iR^*4D6D>}kUwOG@i>y#b z+UZG~VW#Fwo!3)nZwCCXwT+-jU|uf1|F8N`GsY6fo5GA4H3ToP zgf}qsAdbK|b<7}m^34A4#_}!4CERc(2nMCoXFRO}r{(-z5jd7;aO_eLOP?yzWUC9| zi?mP*{BL5Z@b(Y)8k?qZA43pTZU)Xk(DQimR09>y@S(?N`8$&BQ)=Mk+wmMF{N*pS z8-JWHee{;&%Lhprd>sF>$f0Ic0%T|Dy8>xcVd)dWau1xSQn!Fqt6f+}iQ_lj?)~52 zf<&`G$i8{_cCafFmRn%#cW>FZzFZCQ=971#8`VUe%k~)n1>jW~EbYu2TAihUDnZV%08_hs z2-*5kJCX6lsRENe>?RY_VDG$QM1+q`qH`f|@kHIp>PD}J@>9o>@t;mJ*Br0Ybn0HcylF6+Pq+~D<*VjK24h34Ls7c zsyc*^&Q_(|1^K^=Yh@avFGASrIv zgS}52tUjleZS0?}7o<(PLPboxT2;`Go_^+$G3Z5ar7RiCJaN({w@KSPR9OJ~?IoJ8 zox2CevGhdrH{9w9|Hrtg9vreH&3+#n5h5yHkmLivsj3o6_>p5 z6BL~R;~cg27lY}uOJwz>;A3GH^#JOI=t;HHUVf9wR>|!=WsOj&L~Y0aK&|(OZjLQ| z-OKY5OaCK=nQeJz;bU~!dlTW9#caJ2HU&OXqnFqDckOk+K9u3Qomp>;6<5TC)$e!J z#&d&hUwJ*)w5<6WI?0P0ZIE*d^{Uew1<`E&&+UXu(J#Kvf8rS6k)bO@d8Hp}InbB{ z1MieP*DsEX%^D?NigZm&K1ryOX|2MI#t)rV#KQ*7ShfyK1_AhAgrcdWIA=`ex4cdg zWT~4zNjDTXguU+b66Qd!@Shb`CVZ6v9$gV{VIa*Oyix8h=~?ly*{RH+Svd|DX;nFL zKp8bWv#rqZRCd)AU5>AoF?M|6u}qbuI`&po4uA~g70B2$WnC?kb@D@$4?ozM@$96I zuaplSEclASIZ9_M@zJFxV-uWq&e|X`LZ>pVtb1o<7OfC#+yW1|$EZZF$Qn`-RlzM(c_Ea9Iky^96Qiu0RK?(&g~L4FuB8T?csJ>` z8LBG6ArIy%gal8HD~ojwkJ4wex>8i5?Ut{;Gr(jIQ7Qik{4qB8+=+AhwS~}fC3J4( z1?*-2H2G$p*Pm^Vuqo5BUlEPNP8iaN{9edlX3t zB|wU6UYW)vTD4)?@fH|~w+a_F0qvCcUnCaE;P19uCbGIgipfaiI3R*@yKKerrbp~11@ zufCom8K4;1L1b*o%t0H=W{3@14))awTlB;?OnBx64z1)_tl2i8k3WEW-Oef>1@nCJ zY^npfd7{^h4DQ#5aCIINqohDyW9rkf3>uiJdhe?u_cu1NmN6;KdTLV5mtC2edMRgR zTz#paCm7R=dt!KcjU(M=_1GvTBTrEq!jHF0Y4;o`OMqh{{rg#}XDjq3AcY#TXJQr% zfp`7L^sYOWv-P1wy~Z)Iv7VGK)0$ZHK(G~#H(rPObe$lmeQv9DUb9wt>#M4-%ZIUm z(#nQ%&Q6D$tMlbd0B{>ugtv*}2+QD!N>Rsg;uu9w<$>zRFqGc)8)D{u=##elhxxfC{FE88naPgp(?vtbI*S;b#W;iVfHG9Z1g|4WrBs-55A>E3*KePkTUAh@0d zG4CA?AuiSk7Zz94Q*u`sFHdRCrgtYVC3d^rdzUoDK)jd?mFwl9W58wFFw|UPHETiB zTM za2EgGr(kZ8+h{soGP7V#B1eyPD7lwwz0k=%J4`~7F@EUXP_ z=-8o7QGJ|k7SYx>POzk{Z68ua+M=*>e~3FBFfbmtz6A6Yw(?S@p|h-Q~VKVzMR(g>QV_DgLxf zo=qEvaCG{Z(!iZzdU!9#zaW(>1qnjg2}_ifGa{pj4va=C3l#PV9n^H4tc?0o9?zDd zFj*2{<1pf_g7K4ht}MSXciN!$Gp6xTkG=n<{#^$S$-Ak!%oo3$l2+Ewb$&1Pj@x~n zm;ReD)DVnyPgK&b4UPc-)=g$o1Rx-m2-MSkDUIlv}rx?1j`KVlII>5K3EHHmvS(Z3aI|%xaF@I8MqvJ+}KS zo22+PPqTm21vscII?E1s#MoBy83^48OT9ZEA4Gv9u#ed!ucQb8j#7@-%u&Ndi`cqX zPDZ+j{_g9~L|Zl&`2fxx)Qxi6$9t<4*y;YYelBio2RY|g=k4lk0|)xxzx!p=0ZKAx z_!i}({+L3vrNLl3L#88UEhYKQ2aMf(nnbonKefGqzP7qcPU-NBpW_i~C9`j5$0pr6 zEy_TUY)7rRIx_S@@vYFmI)p;|m!2DRE~dkTY{hD6JfR@ac(MFThCeoMCTx4;Nv=28 zzgj@_c+dzZ$VG=%B4m5XMVj@Qu9DuVL&Mo8{2ieuhurPsR+ z8&${b4q?6d6y;q+R5vQZCKW!SNw96mW}(>N;5Ze6X;gn9X)35(u~%1r_kESbb;xa8 zV0_irnEe%+P_n3#r#hWN{SgIafF2L>RI8P(B(+N|%u&49 zia5T+fV-G-@FNS0lCmhxOv@b3qJ;Oy)qN}$A-7$vA$lm1c|Z?UMgfqHC&)|Rc@rIo zullp~&qwJkT3X|pHGmqMzGWA1bmO47L^tQ7%s%H$Cp~?c9I-}?WLTs&lren@US&PT z-SGIhWHQw_y52Eu@`a$)A*QdQlj$5vJ|r5waVgu^DlIxIbB?wL-AWy6To25c?rC-9 zD7q=4&A9Ppo&a9%jXub0i0NioGZ^G|QMH)|40HP=)u{LxEu!n=S=pL`A1Y~D)b+V` zKN8&aQshbSr@6eRJ8$#ODKg(DoYd!huu{#B{KcK!^<3e7rAReW&hh@AH|8|H!{sNI zIJXeKG8vNDujm03>JJ56@~x*XcGN7IBDl$<|0$t}J!M7#pjg90qcf_+l;yt`!utFA zm_WP?9Ts@Rt=z?2fjy{()&O-vU<#z<(*9Uy@4su$qEEj!1D{}rECWN@;zvVM7R}{{ z2dVPMRc}6ERdK7!1yYpl?i8W&oBAuwQ99ciQ^DR4ABy1~r^^pLjySHCb5=0j)R!K0 zBVh>R@5E#-q2h%<#PM&bGIoj5|4K4**lFA-AEg|rB0-Wd>R~|6Kk)&zeK8=dQe)Td z)s1FVt72lamD)hx%#?>YE)qJFv7Vj(L|eXom_^SU&^P1DGLD#PnuP-@eGcvaOI9Hr zykpfWZPj!|V=}*FjtW{-f@4!=veg7@-p6*YxAimZ;u<8o-7I6jb6v$_r{kWO3B;zX z_S~Z?h?maOZFBP4Zr**Z`a?`xE1Z6j$ozVZJUSM!=`UQhaOk==0L-4}>J9r*Z}|Ft z4_ot6BF{=QJ$zf7_er6~_;YOI=0^oV3Lv~92l`cKY(gDlv-;%eiPW1ml1xl~3PPP5 zh0N`^wIUQK#HXQLoed5!n9?IE{VfP(5t;%w^ zIP_r0($nLD0d?B($s^6PsG?h1ZE)z!(h?O_!AcDl@qtOq)uh4JTk?#-p9%;iq!^<; zF>YP&anXrT0N2g?!}P%^8k0ODredy>*$-e3>OPwqqY=O8%eV??5{bEdP4UdSn~b~K5=lMta7*!k1f8Rq41#)``AZ>vLQ3hT$&U}`JToEq9fY{`TS;E{Uzf2 zJfP(4b6uxnLQQP;LKIxuu}Wh23Ij|d%*q^nxAmyy>8Pd>zc>ro-&b&8>MX6GfV79m zqQP=lEBTg3U=k($_vH0CzkT>_V*iSjEcLStU(s3T*_8htcYp7Sq!gZOcWGNujku5& z@j{cbTU&OC+sDmNmMg?SkagT7D}Xp})7lksOY&yh8K3TuJj?S_W7(vfMOMJ`;CTEK znlRV zq_LthtVFAfJnf9fX*YCZxRv(4He$xb zNQNj)&WnEv04Bebu~_9HvT3`fAKWdTXAjVS{IrhGO0q=4d~F)po1+YNi$!f+yV<`g zjL&-{`#pv@xDsoS_MI#s)qow{36r^>FT-{2Zbn&1u+T^0?xj&{E(tZk=*wNG3Y)!$ z3Q^D5oI%0dLwCLk=WVPNOxv9qE_oMyc@ccz+7V4Kk@os^)r{>aU<$0;58OYddSprE zlKsUR%=4C&s5v#d1#KPOC57wfnSwh5bhUvIs(GcIBwJ{Yu7h?-wpj) zcOKl$GbEgP5s_p=Hus^XuSX$dl(SH@00o4{yHw?CnwDXjb4|5<|dZDH;^v7CP+U@%U7kIN#zAu@;M8!McnzAbIHY~Z}8tioqcLcXQ9f%T~^i?3i}(3sdfr) zVKnN71?OjSOL9%-;7*?Bc!zYX*xmtc!S`QAPlC`H{p#~kA={||s>Uz%t-^#m7{)UnKvNv`7dg<;D%`eTF=fug` zFmhN?7CK~1Q~Wm#iRRNh>QfB-NA^qskq)OKTf-n^Y!onj@>Fv^Xt5{s@keAkfIf5F z(jYcAduzv(UhlkMnz&{l0w>Zf*Cp4D>#3+q4*Id0P!MADR$-UTUWHeF*8vt+Dl7W+ zSqh$LTAU*gbRFzdi&JmovL2f6y_GqieBuIFol4Kc4UYX_#};B+w#^HZE2p_y`JRw| z$XB*OTKR=2-4*BQJWCpTa|jrRDc`zFEmwaB%>sc_*WiO$j>GkCjhK91Lq6Ow7eXSu zy<~o?d02MaSPRinkD|@Xh6Q?Gl}h16Pdo!((1Mcx6h>`wo#oaZZ)hY34rw+AVv~`B zkF9f7g9yl1QJUv5Irl%}c}yFLu21l9@n-<5z*5cfiK7$JN(mJ1UzD^KG*;2BKH=`fe7YphplRvA9gxs;|?~1|TBeQL66jhN7 zS_L~LrP-)3Y-ab_%RD^~Iyx8iyu_85O7@8(!i;P>zwzgjDt38?^bG8J`INO?NV6lC zBR_8EMBhdOxjNfYR}k%X>7Jp zb@E4iIss_sYEaE8J!G(DVK7uA4+0(XeUoo9nIv!7lb6o0JZ0@d8&@3od-*;mk2X60 z4-j-#u9)N33%JRvAbvD{Qlgk-nl@&w-l9TvPP7hNNeocj1;=m~RWN6$ZmbJZUDERq zS;u|HKN20zjLX+y;p!<@*^0A@ox?;=Bv3+kAl8p!;5Sq0;{R3y15wXpt5m5cD$T!< zKHdM~mjAL}3;&=tq_~_t@pZgIj8{2SlbU*zxL)_U6zahFvGsf2eTo@kMg2!7x)h@F z0UbYV8~7MS)45Qe!m4O|^Iy#k=7bYunX5R*9N6@KNpVTTIX*pIdu$p8LdH|?*F??Q0(%iy5%*S zXWh)Au?@4;=83Q0c~q;unk&oTp@Rz2%v-jKYXQV`v;25(W-Yga#PH-B{ZWDVl^Li^ zEBwCHNUMU}lHr{pe=HY%7UR#K?FvqPXgAS~9Q=0UbL^A~%5P2s>KsZFh}tAdtJlX{ zEX|>yJ@j+#mh$I&@kXBPf^7euP@VJ$;s&`~d(qj6=XMuoa>XB-Tz>#~>3vpU% zebG*(L@NvCFnDPpx1*+4|4IWcl=m$?vowBUiY=Kda^;`C?mdvWn9A%SdZ3 zIL189ZP2MlK5W{A^~V1I4EN6Syy9VJSIpipS_TLc*$@8*2$`+m*?oBW8V-3`PyG%A z5Y%lTs&&rmZzpuOn^do|ahv>^)-fA?C&#rYd`7%39=yV^V{9dB4~qV_oaNo8G548* zR8^1YPkY92KI1LHe18ry7U>@$P0{bugfQZ;Q=)3y0MKl6*6sTK*tR%n|HxHgYV3|t z3PNiCQp9%PJLyJ%-g`9EysFh#GMA zejD>aRWF?;QE+SY4m+8V>0mkYtSa!u!UW;uh5(oP20o-N^pVO4m+|IH^P%@v=_dy! zp4WrKSBdbgL&P6>GMs25C57i*lK_2!I|jVDJOh|bW4GdwR>}I_k?PVl%E=z8HddxF zI#E@ae^s>Q`{mm}fs?YWulFMiI?SU*Be=X|NUP+>mY@8(i^P7JO7~OUH(KqJrx>Zzm88P9#;}cA*4^IaH91C zI*Uf}-f(_h)ZOm= zm53Yd;NlkXF$rG5{P(m{xQ3oTzXuwj$be;5nE=pf0I zkveC@njkgbSN;kf#Q24L~nxQ!dy{)XyaLdMIu*Qp88? z$|wOh;%X1{JQvE47(iV`-?>J(-(B}6eAtD57}G9zQrYMZ{W^&+9wNLMl_m{btVQT~ zlytGS$ln3;Eo@>?dw34IgS#MV<0h<6d9OTLz+!IS_x}9Na>)+L&`NUFELxGye9I!& z5dam~+cWq+x8l4?B%@vnH9V7R2$1-k4MSW^7q3cpASnMNyyk5bS%gDMU4KQVPp@ZW z)h_6wSB(~;=?pf?h1ycAVz(hnbQ_{G;vQaO`cm&9hc`|^h4#F+hcm*Ci_$(tmFou@ zEIT_^ayeStm^sG%A=8JhWRv-SF4h6$W1mq%#? z|25b`eeUM6MZ>Wc&FJs`rJWVUQu`9OJ%{FT! z1){*#AnKq5ff+%+e=q=d(QtfaO#-eWE#DKl-#pef`4y)PqvmCXxoRjfsd4Ngv_W;6 zu~(PGjwUAk{aBkajJu<9`8wwnfwS31-Aw+RkmR_!zFCg1l$8*& zN}kEZW6mnvnDu)L;9*(vOCwiM&mE4w6s7LtB5@p-ynPDRY|>tQ34L!gX6_-@*MO~R z{_CjGT_Ti_e8~m*70KHdD6g7nM6BJ26^?b_mJ$X22=_@mp73hCIt64ACf{DQ%KeFU+xKy&AQ}psB!&kk=N~wZcQ-H z<9`UIMG%(g%6BrXA~3UW{d%r3$@T7XsnSAUGZwV>U&DovNK#}ye@lYUJzBuKveSSc zCB{3CIw|OPgd+1lAZdh;`Fh+69bv9S8!4^>emZ(@^8E$V{M;jUA-Z<(G2>*lpXTj{ zlUZ)dS3+;s-#t0tv|PObSSe^L)2V?!(5p&HyG19wKjROjb*sji_96+pm-I$8fN zw3NV3;+q>wxyQb_`ro7G0wRtqZm9VIQXA@|Gf5_j(2Cr`5XN5%aNiKVoOSc%UBt(Z z`Gk~rlYdeR7NYkO{c-i7f^e_HZ-QXV#I?07wYBHbmGHC6&oy+9{>>m`mgpSLiXg5O zL54csw{QK%O=eK}OEs5+mtzv-f>(a8mnHXKKK!-s#c?Q_2sD~3@w=6p(-va-%@)$5 z%tLCvq)OZG=X{eIdSNR#_DtpZ*m;hkkoPvA zc29jZ92NIZr6TT0-<_9rqUo)(2}T}!)wjB1qE>L2QRU%iGK}vF2R#u6%p8!pRHgOs zb&*QHjYD(SoG-0|0qFEM&^(&Y-%!2(i{^H9^JWlcA}N@{a4&k-GmR@UC%)w=q;#d2 z;+bJ$&pBmK(OhfLEgS|_4H~4qP?P8O@z{Eepi$$Q*EWW}pPAPl78u-Z7s8l-NA?Lw z^=M#HgLNBsy{rY#$Ap9#92Ff-0}YMi@@?NvSbuc=9EP24?of#0JNZ$=vVPfl?{K_b zMYb#@K~{*?1;=AmXd7D3b!Y`ujthvrd{!tX^y;{XIh^VzKy@j<-NXzf>y~t(3%a;0 zn%mAUfrG>__(Rs3uv47h`SW+2R&7Xdrer*Jy;{N~~u;JAFZ^Yw?$g8BE|JkCWQiHlgPCWQjSh_$U)6FHuO$`H8s%itQWH^(B| z#R!G$LKor1hJf;2S1#4R2KBb)E|SuT7~I7dYuOa`IH%I7=+V0)zk{1?{F`aO_GfJdGyRPxmCZ1{`P0`lyMAJ9dbkUCN z;oi8tHD_45M76bNlmRw!q={4bNT&2Gr>@i@hyus z*kk8aTu4P|$~LQjXhN&6z>wdNMCKD`-9E&xFVO?y!6e=9`hi=pEKXWZc23 z1RkBB8{wmB;ns(a%qBF_Xiwz}$!Uo2(E+j`<+SpW3m^)$3M=cE+dbqKsJwTLCEmbI z3JTvEfDN>lE`??~3uFdcJ(uRUW|foI*VdREii^>iH+^LO$zb(>x7XG3z;3r}3f=$h z<{PI!Y2M|3J_%o5T+g=p`%(RrD5$2N7QBiJvkvO|dg%n4))MK8HfsC!{kRzXM2(|E zs$5Ianpxv)lub!)k}caIcIU25s&e*0(Ro1uIVMT)Jm4>vo+`}R5Fh?mVas$8$@p`l zRng1es$nRiJFi^QqpbCs*-qmi%i(ZUKQ=EMQ%w?l1uK)JzKjA23!f0hlV1)y1Ek#r zQMYah+zE=J2YX2UENa)A@AW*eyn#5#owMC2ICwOP+93%zbgT2)&z*FHG)w3S%wJLo&jCTN>rtzYyapOKHhA z*l{npW|~KNaD!pp#U6NAK@v>iV#YGeml+9=BAo(}*+?CS^wb`d>IX$zp^ypxk;l3O zS{6*PWs}R)0kdUc#5_qi2$vT4n*EZY=m5n^GIccT47HxCxGZiNPrDN=#3K3wBL&Lk z?sL{6G)^k61njLfdHma4e_NGjhlV+BCdft?G|e4)zcp=4D~m_dk?GT)2mOa>A(WjJ zajbTdbm~HXC*0~l|>0z9>$q6z%h(7y3ju7olIfLO6a=t@G= zMZCBiE#>fgQo%K|oAw=Tuw!yK;wf^G;q7pqQdG~cF92O{@%xs30s*&Odo{fhi_1Bw z)Q5tJxCOC1~>3he?&ON_)H_eMyh@0MgSz&{YVUAL; zQD<1g^h<`f>x?|1X=OM~1|+0!C++#QAfxWi)O8V9UBeYxt#46e2`Z}v6c zl04w4e!XU|a00f>q>JX9B9i$GG}}O;$4Cf!I=SAPRQn`s?ujqQLe8!A%g0-WO;H@i zijw0TT>5uVHp#9QFqklYMy8|ee*o?gKS`NH1DV4=Wx>Uf<{gd2{Jd6y+lrwB;N=JD z4xTA9xICxBX^W%~U7ks$@c+i)&xq-zu5D^US>el01xxg@+&)}1M;gz zYP#V~hHMdosx`|NS6GF}x_@;rA)vD~Pj zVb?E--sYEL`q!WAPm7(qt*bqn*O{<&Kj40Dsu*gSTw>xZnMMR~>~k)s)i3p9M5n*0 zjcf#y_D!*Bax3<-z~wVy0r+*-@d>0t-H}?njD31sHIt|n*nypJdti8zqLn3GKh;s_ zQ)P>@l|b0+CtM;6sb9u>WUmHucC60kvDmW5J6IacMRYos1$g1J3ig^D-j$_uD{3Bm zr0rNMfuUS#{y>N03dB&{nhAFRCQ;~yY%~Fza$Hc7ztr$?t^G9j`{fw>U|`YCN!25y z4TAIL98AE;=l&w&hSEmN@| z8fg{p9`;!8-jDMxZf0%O1AT$*I|aJcqaVP|slT@ig_9)E+VaqK{2`*go;)nLA(gnE zY@+|{(o`64{QyXe>1yZNo|3D7uV+&|#P5R;#JukJR^h4ZfO}KyXBz>jk=Ym)kn3>$RtFv9 zx#CJ0loD)kGAoDb-PjKp@;jb(y^_ijX+6dunw;0zWH71e9Ka*b&;XZi5lS5Lptthi zkXLBLx|BVjx{0S}MHehJZQZX<&kBWo_}&*be=57sp7$w@w+YwI_ga_;>m5_tGM|5c z?97|$Z&#M%HMO>#K#N99<(cL57Zv)uIL@q=O4B8F)5QiHUoiv{xfu!`EX zK^p)A3CNiEigr8rTqNH(7LL0qTgd>`+{klpaT{Id?Z`0r*V5tcunL8DPd5&~Tug6C zIVt(O;CE~IU3sO2!6)-846!H-*Xh6T#Fq*|vQ|oT3&i42Nj!3QwV(@Di{4+GWvNSZ z5Z5cgSH_J}H+0wNyfIUU75@X2Dcpe~;30C}TcTi^8W6$v1MhTk!LC;^^^Ux(R(99k+xq6(V=xqDz{vYb$!N{7Sl_#RckA(Of<(WEhCCuoht+B zmC_5Rr==9?CptmN%PrrPJ02f)P%WzFeI41e!cx7tvvxZvyFEnab?t!rgpE2?+Yabq zHe8^I1Z?OeUb1$q9&HR7gH&?dq9egh_vhhg+u#)08iYc z@%zV@`$&;3OKbc{C+;o1MTs-*Nqf#A#6V(Z;ZV&e*o{jS_p8vZU?a$~vE)?aOUU=c zI=L+n^pC%SX^u@Zdi+7Ah!%tZBCf^oG`~q&_h%*)g8yjUWmy=Li7SvPhiKv6X+9g zs%#2u+y~)lf#8PIhK>%%9By2&K!wnt8gF8X;U?iz9hvpv9f-iVxdm%T1pqWz;vI5B z`+8JmL~*GY9iGr%R42~2RytiV({dT=Kfj{H)`(nCc*2dM-`eR( z&Q-$U{XO2&_%BJWvG3cIZ_TaQKVhiwImX7E=ZYQmfm&Vi6Rd#Hjbcs9sw)1Ela!QR0g5ue|mHIqS1GHx8OgKctbxB7A`Pw?6)fTYYNw z+RU}!-LEvvg_UWjf9$QZ9>A6*grsnCWsLOhUQ%=`Qlx3V*60un9u!j8kTnI^z>_~! z_hnswSm)!gXy7~)owE}?%H?D6E`Lg=P6YS6whEN+7~NNW3zkNWQRrhg?FxQCCo}k` zy7t9clYp=%eM;zqx+%r&Z#ooYT6B&>;GRkLs@Sp3_=a^mYHn5J5VG!=L|}!p2+yXQ zWSFy4C#awPll$y-X3CfxZfO>*N}ng*ozkdl%1ZNk*n=$yHqE~#JM4DEbxR7aBLkplD za4O!`Wl@GP^2R9jjq4aG`hO*vwxj&Ba?g*)O{YTaw~~|?>%0@vhNtouZkyJ zr{TD!`rL&xyYaD8{DBsB4|P?-ia$flzKT5CXoXg|O1`{EOp?9oC43?^87rIkiIH-w zjI4-T=obFZS;17_%S6z`)I7yU2^3|Zt-%H1Xl@*IxF+P^WuL4jVUsrWOaKViQz1>I zDG-haLYzLav0u?Pbsh5wEy&n5E>!7aZ+Wp0qqAc$q=9MA3wUid+LHZm58>vqLb^Pc z=o@jW><53PbpVBG9vL)mR8jx6UdjkyVN5kQSrS``^vHOv)cWTP(>TBO*PAAlrHu^y`8 zBvUxV!nl+c6eh)|=i)eAHD?_oX0JJoa$9g+^)zWI%3zh&7V)`VDCHZ7npA|2vAY&; zp`=agNjbK`;GqvXU&<9`rhl>y$PcDPIu;IPy9GOiMYj6-Ttp5I)F_ zg5#^6E*`xOX_2i$x1}0J=hMq2A6R*cPKU<%35AkZjmNX^chtzF==IGjDr^~pzc)<> zOQccyNE3W#qjyHrJA_?7)S>Ws-*g;;zjx4ACUTEv&=qyNIdg+^3-?=t3^t0uK zANmzw>1w2gOF;`AZCTx_vko;2KBg(jvS(iP_5GD$&J2010{rB;HYkO+sBu0a^G$pc zCn5g@%?7qt&Q>cryz7b2c@4h41RbAD|KiI)P`IlUsuM+lZ;pZ3Ojmras_yMu?;?8= zqpTV=(>WP&a`WQ*~YVa^J;~8IfaP;6~8ha{z@ zflo6PAEl63et?Gf{!9VzFBYLik|pr%FtLz|crViKhSqfTr!-_AnSl>wF>^1!<`SAb z!uJ>ZBX5_6xy!ht?hE@}77+m{g;4}Wdwe=;Puv~h7GMr$R$!t-4s5%U(DLzm;L(v8 z_$e53ZeyOc7Iu8ux9I5Qp}ar#M{WX#65g{i@UFpN-&*Q(JM{XInkR5dq-y=iJ&lK$ z{eQlkMXBZ}92bI{HrHTilw}=n;EOI~YKq=epPK2JzjP?+&%P%JPB|7EJpYg8j?6;} zMgxi%@QIjQf)?%2P#ekYIB{KSOYc|}o{F>;+~%aihf_D;O?T0ZD|?Gj2kXuN9ebPG z`$;pA=BbaCGpX)d6cGq-nJyiT6?Gn_euDO~JWX#M4mQ=6#VN#GpUiG&80GleD@VU3K!=EMn13a-I* zT*gZ}7%NRK^MI}{o|YK*b&!>}l^4D|dT@&sd2@~Az(pfE8C95{DG&;(WDVPB6%AII z{a)eYL1O;81Lbl@d89?z>TK@ss4>N&BmLY5O(gy6b~Y|=98wC5jhqiUWabz=*GRws z?@ti&nLgIzbnh$+`?Sn)a(_imgTb@_`GB*Y8l9@$$?zx9!TmJm6G2-vD+$8>wi1pp z_HbT%)h8mO(Xs!@02#8WFC1$gujMQ=jmdl5484iz+tx1YXQDh7{=4Xsw~jiTd(QvL z>@Ca;dQz$JhYY-K=do_Y8)J{lGn+IdeLg(y?X7cXU&!9%tQc4XEb1sPos*D&sT>!; zQuMUty@V)cgB7Z^*UVSpF7?8}NOe?}7IerQGv^nSwbENTBQWuz1ywF;^jelFxmB?WvV1w@R!vn! zwit}9jQyMA%XX>Dfh``QN^@qT6eqjLIGT?mIy(dlOk*xqX&j+IuucJlRZ{-*jfm;4tTA z_iNq#4R*RJ1C-y#RhO49Vp4VHV?HQI-%mFWE&HC`0TQ09%;koPyy91U_jfWQ1nh#e zjCuEz$REp{Uxz>rrSM$~ewZ0mX;A6ZLumY|Jf5muZV~%Z< zG}`$-#{5fewkMNOguo#uvLiII7MpG^eKivV`2S{>f9}flM-G#TttGop1GvVl_Ml{+ z41VXNg9S}1bI!{3ZSQMp$oCIeMS@q$rQE|lm`!=WqdC(BEf1!CR!UrfrOAt^StvKe z3o<-u1sNZPkB-SJ**R&xOR{)8FFcXl@B3Zfbvc`bJLfNUTKioY%v=;oKB-hvU3rK7 zKZeddo~i$j<8#R*_a@|S6GL*h5xIn!TxRYhAtGe1<(5l?W|(Wt+&0WD$~BQ&=C0iD zsk!7{E=l?J`|ZCy&Yydn^Eu~zc|D&qp9mYZkAJ(_zRX!G50%$JV}F`w+n4K+fJzBn zJ1dEDEdWtX+p+VNUmO0TbjUat51W}_KE{M=!f}e z$2~~}*`MzWn*IBiD5rZTHl(8OOprxZDkuDUUj=$dkesj`Iza;Q-=2X6}N0#s7tk7TOk?ZU+ z8Mr=lx|ZwPfL_sKQiWQjmXnpx3+^9Xt09}Ufw^B)>F1+1VC$|~k8&BO`lg^i#(AdZ zs>UGdJEB%*zRhTX0DB?F-}rD^Xr1Yqv(omXilk~l?Vr#(w86rm98DeuoOqYM?crSQ zC4#w4F(Dn4SYI|=RqwN4XV^l_10&cgh0(T>q-G6n7~ogMeX`9N*7ug(r?K@qkFB6g3hKm;ak9F@RWD{n z?qG0-Y{O01$`@o{T65|^Q=aUFHgAE)~^x2`Ug(4Gq2t!G7}gBWj&WA1%cP6 z{#ws}J}pH?Ztr@KVvJX;j9Ic?xu-W+F2=fqr-k3o4EF1~HBl%W!<`Vf$I!MNWcCqh zK5mOPpVeATEz8c1 z_1k1>AuA3Hb+Ha#rUGNMebn?>jMj&P_O&VWb!{xIqQi4B4(oIbtUiS3I&kF{_Ri#2 zzcV`n(CBP_zdYvHFQ8f1bVarrT^MX5Ss}`)o^TI!)j<8cuojDhx`nPc=K>-ZBO)d$ z&sbQ3%pTlWVpui~e;0tXyYX$J51+A43*~bDV||?v1NRgrgi>yH{Ai$RCq8q$9fIYc ziX}iH6%pSDTHc?9vwPjvYS~**8r4c<$a4)H7bN-Nbs{DX1Y!P4bobS^u`%SAtcHl9 ze0u;tvGJ4OlKX6CzNI3Iz5AE?N)I*?yE@l1q&X_(oyyCX8LovX4mjE(9jzJW2jGmR z2X|MO_AP-sh=6;64FGocru(}~YYW>xlL*Yc>$o0P9}mo%S8UC&{)oxQ^`)Rg8X-S@ z$ivMv@;8+!POe-LMTao8vp*l;zlYJa(RW6I)$%*??QXj7&ri(iGJ<{<=+cw4) z;nedGV5~&|rqx~hU$!`agI9P5-r(GKCy&PCHEfQ$3Gp|GR|%nZ-bmxqs->Nn|ha! z+!Lhf09Z}KCqMcaE$*SLE?5g)id<=O9&!ssjrr6@e9UH^>Kp34fv1+@^1Pb&J?K8VxWMwOb+uE#$IG8f%LGA!@|T4u2`!Do%3 zYN&~?kSg3rgqWj!On`m;QiK@N=AOoen{veEi6U`BptLuz_`tg4NyiO$LI1=?H{}xN z^Dn7td0on1l!ODlQ^oJ>otf;K!Fq*9gdlAK{o%GI4r)RilW4=Zp6Ua9TwcDZ;Lckm=#6R_mb9PRsyLhC-u+H-}Umh&Ci z4-Rd^XgTRW{x1l15VWLr^Eb{*YaDFM-u{eycTPYJO zuXdIc;+TF{`b%$+cTh2J>y2q!j zyAMzV_j=Iib79w5;#7mY2lRn>xahRpJH&72D*AhH%PREYJehlelQFW7Jp*;gcd$KR zHFOJE!XSQy`OnpWY=@L;VXkj`=t0n=>EqV1J-G%F9j&DSoc)A0g&16y2mu~k&0Y8O z59AV%j`2}%#1=NJ$sUGjK>m8xcABZ)Dc?VV^bDoeM+@$tc=awGDFB14BoHb`Vg{(j zVikV~<-3Is+%e457WuBVq~)3b7I&=R!Xm2&q*Fze8y^Jy{yTZUs|y$!G)p#p*&d}Q z4O!s%>_^iV!Uh8=bhHBO%t$-vpBW?IYZ6>Lzyibq;mN?BY>hsURmNwZgkFG3dn;Z_ zgrp<(EFMEE*to9aO@yy&>-$*-h|MIs;iOjb++YF+NM02E`SsS|FO|S5TD37Ve3TLJ zeX}nTE67s7SM$_?^JfvAnU#P*V2MosvL*^mTzI4(ZL6C-$LrYov+kr=FEU2`H@C)g z+xEUGHyh7U#D`E%;UQ>sO-l0w)|FVbt|L9oI6tn3c1# ziu?jdxmMH+mvmj`67i1E7%A*9gJ<66Rp3_GH?~F1WatW4dx&Ce*(6%5AcK#;j)Qk> zIt?LvgW|_(Idw-Vhc2--!LDy4YhnV!2}DD1dLLdF-Ni)KffyzlaU?PcO1F^p8(utc z#l-eU%uveDJYQP+-4!O>w-ko10HqgRT~=5+>85W}p^XD$rlsY_QF4+?9(jT{4_ zi`qx+-lC@4)lCy7@rFr~4i<1OqEP+0tOM#Z-15WTWuok*;Q6A00IDq49W+U{7Z-Xw zSW_m=e{h|L$8Ous4ZcM3DpA$i^UzO7-tPP1;aG|TQqAfUG+g|BAYVCPUdij zFWCP;4ldF8_+So^C(J=V5j1oWT`t9^mCI%FaW|8>S9zaMe^0gWBOZG_oK$Q(;};8U zjL(_~QvRTZUlKS!J4+Kuy|N00oZKI{MnDb}6s8!{%SMxOqYMZY-$$%C|LJ^4A^$mr z8aMxEG9|l)d(j+@wp9_58T9=*n=cq7L0#6qz?@1I=IMr46}-$0YuO2OZ{4)41Fj5= zee-soKWq+DhXGq=^2qv3jfb#5la~DzY&39eD=nXN@D55rUVjtDkQv4V)PABSdMQRR zh!~HLZloz1$#lhO(#pM)Hize_Qz11Q-xkfzfO3{oXo2LUTZ;EjEl_5ueI9g;p&*c~ zW3+g50W7lBmL$xOxF2EjKfrLOy_U+YaP?LSris%oOv_wrLRP|;{#+0fv#r!z5dDFy zm3^OUieyDUM1=8i<#3K}k0rEwya98(-?N14lqVsi;V{vu|ETwG^-(j-^zTMLfKo3V z*g=B^4X-CHyW;-M$p!|9z~!_d1*jnVNN`@w(@q_ z%2#})P1$dUQ3trQ%bF|+^cxMcolQQM%fqN+FO{os0MkJ3BX`N!Z zu8(W`PtJx_TSM>++4BA-}mWdBG#`Z3qhr~U3-g=I74PeV}s8=!U_wI z^~;3L^}i0YNFW)8PAZem^ZwNo;Tvp85BpbLR$VLoa`#@*mc7ZcwBIG4Erh#~{`n>o{G*|KO8kZQO(&FlG0GYr z%)_JAE*Y`CW(p@vP5TVL@)v$TG%MI>RABSI>*-)+(J-%wQI^Jx32IuzeUN8rMSGA4R;;YP8AoRCZe5Oo=T3 zq{C0Et=^o^(?n8jmXCM}Keppa>-faKdY4-hl`^pk4DK-V~Uq9*Ux z$UGW1&D1ia+a;RVxbAoKp|!`(#D4HS*nf4N=@xQx6P+HIH)a$us~0{L6x(&OWj}Ey z+m~*CEc&W6bLEeK&3l^(D5CGivh0`Llzmb+i3bA z*GPP!@-kpbRha z{|a%h{O8R zUHeG00lW8T?t6-Ji+l_NyR&G}An8aTaquksq-IWAP?T>S>*N zEItS~^?e^i8M7`5AN{NUZnG}J>Jo@-iIuPTg^V^fOLnX- z+Ixw+3wypJ+p0u%@LX3lulb2x6YDQ~gdbt)XZ9faK!S6n3%f#Lpvn>>gj_sflYDz7 zc?oq&telxF80k9RTWPumStMXD_XB-K8+zz7>~Hj6orjXTWf|K+=7g_ucXv&VY(D!H zAo?TzOk>1(Vp!nagOoam;F6wi@Tl!mn^@S+6wlrFKg$YSuEL4Na?Ez zdbF7ghbwnZMA#;{t15(Bd}ov~CY^o;*(E<4edcJ43f2CIQAJfL92YH8sce=*usLsXy@Q@$b_IeULOxQH$-NuA48W+ zxCTrXac!XKXDTsmz~9MR$ae8G?|Vu{5&yE5*WWRu=|asWv5nhWa0$i)-;hnY#Epz; zH1j6#qy!1+%D}-#Io8|P@YXou$=K$FkWZhlhY9@FH`xSdpaw=NFnXm@#piEvnxL1*(f1~1{`#dDo#U$l9{#53m27mvLF`GcEE+1}PcrAPTl zPJ~_V?CE>}2-MnC9b{SC8ah3uRAB0V(LRLxyGt40;SBW2`Z`h=pM4BAxoCN@f~Vsh zX2T1jPmn%blYv3GIAA}j4T z_f7QOP{I}A(*p|}Y(VNmAza@*f!1MWA|+?|9r;23MsA7V>8Q5;FfN93W$HP_bA0%t zs%FpEl(nlkFV6xNDojd~oip!SepOH$CztBp_80gX=X`Pf1t)@gyqUv|Cu$L_Cg_jX z1dX1IyPK~hn81N#RYm*7x(g3Uogh0iVBCNG7q`rU>7|1P>_A_nc9I?x8Tjpr5cm#4 zzjwj9{N!~_rQ)?FW7(cy8F4MR$l2+&?%z zd4N+Q2F-<*AK1eBWv%xDu)(6{04chXCG$1fOkv%b^ZIt=wK9aZ1UujZ=!l$<>;9ukjlitwMrQ93? zxpHdG5dH^v5dUuJaWPo@@1!a0)^-y18NZKlI=@)&fjO^NUFeBm&E#EuJGZqMPI}Wz zFvQ4}7AySHADU!XX%N3Z zzpDJC>w2?ub>)$OAr5uJ#jEweqf*0u_@9Zg(!MYj=`ZeU~orN9H!wa0On<7dkLJE6hiWZb=Z>PJx zwl{J(onX?%qtHl2rX$r7H<@|=C2N1OQT@UbucAuzDeT^_te?DEID4V$cM@NW^fJBOqW*2hI+O2Ou0v=r<)DaUNeR6xN&cC0TnG&4R zwH7mfyn~3nYlF!gpCQ|^w&~=JlOYAan?VKNlU_Chc5iWw<dA_)wCChL>CsW)v2 zgUhOrJz&9rVdi}fX z!4)?juxS0Ak|`k^nw$VrkR}bJnX;GX``p5~sjm{3juck3PRR@W5O#+CDDT>9LT&%D z0xR#9Uz?m~D)Y#;7%SqD6*vWxnd38vUm{eEx*6OIB4#wq_A2+H1Tq+duuKz~(pnfo z$hT~Vz$HI08BxI3Z>;^+k#eo(*Y)oMr+b(=9xNMRh`Wteth&)FYDbLumJcu<*qi&T zU?+0nEnn`X9PtP?%VO76f3TXMjdq)Kes(M1R2Xft&Fko#VYfE^%=|KAyFLKXr-6tJyO7eOhO^lST7n+DcpY9~Wc!Kq z{^LUEQCxTmm>#_w|A4fMT!qn1vieRi;gC@)li>j~jcO^S=YTc5CIjjqkg64E2F<%d zeQmIX?1J_HxG1%7P&S^!ukt*RDhRsvt?%gVTc=~^ z-6sX!ExOf<6GkB%L|iws#qI7(W)SZX6!+q7KOrpS$;n*;A3YsLF5dkZ`cJS{#{SCE z6Y*8H!N!>nPv3OZ-T6ox5GF)hSA)}QM0nw|S_*ZZxcShn66Ty+7JGL;*;%M+8@4bxV!I_r+s>!qcIqpqx3ExAUk zrc_HCE=6Q4P#|@aQ+_&SIaXj=C7r#L0SJ*!0KV=}=yn_vr!TTM0ZpTSh>k3A6>Sgd*5!frCIpA71DswU%zTWcpEgre_LahQ-FG;Xe*jn z>a9_fE4PSCEI&NdI2yMp&$0{%2AM~PVCkFZ&3!&;&?ad@`3x!2OZv(m3X2P zQ)a$OTibw0xQ&tXYvM2c2&LgHtG+cr_|P{( z(oLW3fkB@nfA=G>`xfz5ZIEXD-TAf5?di$8rs<&ylW9F|)wGSb{s6@_%tvo?yHE@3 zpxMaIgx6fHoEL@O&SBERw|jZ!xTDVa2ERY=>h)yRepC~agX-egGBnnx&@G>Iys~$= zQ@E&qx^=s5s4E6Be$SD6zsomhT!gYdXtm5ngzcf#7hBMF98nwU-k>$Vv3*5D*;Rs{ zKfyD{_6v8GYt$3U?H6thXZAmgG(VT7eQ5IzENKsuSxg*v3{spc=6yCE?k_<1LRTmr zuCePJ+zTg_U3uVs}-5cDQg$wQ>gcVGfgQy}8@n&lP zDtx2pZD#gaVqLE4ZJPy>f)O14FB{^kOu>cXwapZHOWtC`agD2N_mc(2jJ0K*LS1fa zFE)RxcRufxN^=e_Rflc>SRbqjhmsVmulUM{jDnRy771bp4C#-Msf``PngRzOjoppA zBlhvwpIxdACG$dU3)HIkF7nf%a!q!3?T2;@)?Du+ME{*QqSyU5a{U4u7FT!`!x98n zZe^Ri)7TC~e22CLrm!UlXh(VD{n^OPmB*C?+-s^qw zp-T*(Vx57y>iJLY}F>dd(#Gah{qpGxtK_petqIg ztK}(-mv39rnrNPLw_??LLEq+I6igBvw|vAuP=4&ck*asE1Ga18$8~=Vr8bV3&XG%Ik8>MUgnQHVE@+ zK#93SgaC*y?Y=blONYvU0B0HY=QwiA45^V5)95`AWHiZGvlLrImRDl^%Fr1Q&R5Q8 zu;=^c&mVMhzdF{v;@UgydBZCQHU36dc}FhG8(UV8<>cgD>%uZq%L#Zx9<3N#67Ts= zMkcOp%lZ95?$T7?hmvc9&OtGnMLvOuhWHj{;`G(Vg09uI{{eVP!w`9gp`5LP)oa)S zVr_b@$15R|4GOk=f=k%d>YX2xV3&yYwu*GoDV=*^_E~SxnKQ_ty1Yog8Ek|~?WGJ> z+_`GU1Rmaxpko3Eq8qc3}c6a8v+SBUv_d>XVAv$bz|F(4OWQtKn z?^j)}?F(=>&xP@HW1VSC3G=Vd`6dfG2G$o9?bs}C;7}F@X=Qp8M~IGj9jT+MK9`U8OvP`k7rC?^m%BoW zFFe>h5Y4Ve;n%~f{}~z^Qj~QCaYhXPA|6PMrnf0P^8Enr^^sPlfZv1YF$#p_%IbtY#2sBuV6-^6wWa+4yffDCD~_T zcmx<;p}3;K$oL<;hOCLtRp?LFOLIRrV8>v2GEwi>yV*dL&4sMjKhmEZSe}g(9LDFH zXp9~>k9t>&UH!M4E#*`W3^M8kxUJ^U^+8a?Iuegr>;NyZxIA@>2n8)n9&GalX6I2C z3uAt*;a0Ln`>*hvW1l4_Zyi&H6ouY!^NfX0xjs!Yjuiegi^OKxDYs6MJuz>@J>?tP zHEyXJEj+QTy2w$4ULh^N{kv%Ly$nV!h?FZVR@Y$v#nJ)Oo4>mqNZDHAwMpO2cIMK3 z=J@EEllKzK6Kc4J)mvA|^#K}F?VUGS8P8uZd$<>uaw-H`JnNFI6-q)Gts39}T`Ku@t5X=Ie^To>AeoITXEEAP)=$Unk-Ow8CwWssQGqy@PbB0_ zx$VqACu*GU5|bb}_TS()lG$kCmoQ;=O#X^RgZZIdo7gaf9E8Wj$f}|gbUD(!?JjkI zmvh`tC|01u#9K3B$QMZU(-4D4nbD=@*ydKfBd-_>#%#a-F8-iU2=SrJkdt%^V^RB+ z_31aOnDJ|EOZ?ieps;%=eSvRh%5yu!4+)BiJp62n?YRE|Qq7ptu5#<%e3ofu_L-8^ zaQMTbz8XWYX}OpFB`TpgJ{VIrn%Hm7!E2PV7Gq?Ann-ezYgPEREP&-Pd4boBaNXo1 zZSo_>J><0i#=4TB!!Xly##$3g#=l({*#>|ggK@-Zmaf` z8l}rIQEg%8lz#EvH7hz1_ClE79DtLK=Z*=(V+iiGhNtgZuPrtW+RI}qWp_SG7lK*? z5j4^Aw3Pvdv3;F`aKtyQfadjhH_kid*LRlN{g_$rpo16z{P9031g zc}Z;L^1zu1W8U`9!HrFDv!Ov&@!p8FcX<*mGcb{Li#{bu8$rK`Tou}YgzlN=d~>Kj zxVEb0o}Xg18n=7#7?svT8MYa#c>x?*5FK8tU;6T*iC6Vb(E7kCE}k*}%@y4_*`*(b zNbceb_5>U;yWqW0%1lo*Ell9KA0*M{_@r_gFgE3N5Enj043hK5Os1BdO(!g%Uki-s z)_#?KtG}L|B7aFdfE;B@e9j_bO`FXZRllVuAm(UnoSJwDjQnGZ&aaTu=HQJIWKQDF zJZd=IGN(hzWDg^VCyo@m=a(Vl|mo|7L29EUM4L0E?*S_gEYtCIQj zlpOkCXkQ`%09VB~*k`0GSgab}d1PdoUA)nhvVX;3JkKF~vq^ou0I&z~YC;OyhGAda ze0&|(IB(F<1x`b*gA7}}Lgc<^@0v-q#_p69S@V6=a>+x?`W%-_>t;yjby zTWB>+ys0T;)3I!Oy#P;R-X@#zNd??N61V~Ev{2oNVUK|ho>WeT;hi!E*J`2na*3J{ z@92=?>TBzZ@d>nR#n+77ig_8nHz~1qiED9LMLlHucD=^pE$2y%TkXiow}}NwxLZW@ zT?dsGS07MwWiWI(VM<9C*_D@ zr`7<=ebjAinI8|(;w^X|2fLbB>g+?`+!}4vfS*^bwM}5`re?FLdW$TGK@RLjX-{dw zAh6Qs6@lCQP=NDAhi;uIo|TG8Nj8!-AGYGn?m8NVj^89;Y#?`_OpyE*@Z}s1>YZ>K zZw;mY0qj}qDut&OP(Bt7rH&76kMvuu(Xq?#=pssiYDT*TVRQ!TS<4!3qd<~dgOiw@ zRaewes@d{6KKouSFk=DltnBs36+@WR-~(f!TULSsk=0n&lM3LdoRePbplZ_XDr?rS z8Hm4QeXjpO|LV9G_MQAeTf@c#j=De(O0xD>Pe=W%4#N}Qkv;|`GO?5LZ|epfexQKs zv?)KoCU-$Hs38Bb0M78Muc$dQPASUnZ1MQY?}dt+(zhG~W0u2s7Fk}TpZPAvPz65T zD1;jr6$+uP3g@evhm-!e!XtV!Y}Ot zeoF~KF8!=|EdPCbeV05QJzcp9k#e9@z^8M)z!wBpGtMGruoV|i2gNk1 zS?#&5*zoF%Dc4EC_s#NEU5o)2N3{!6js~=$ZHpgDWMRynZHwM_cig6@`&G&apsaMw zHP?x}U(Jf4%P!luImdK2d|}Cl*e~tbT_Pru?_?`jNXKT} z@!VDH3niD%ImTRQh@pL&P;{+{_B|e~NOnNyUc$ws_~@+afo}~puRtYy!MLI)JO@@B z#s33v({5V%ON--zifSdY_F!NltY&)35kJ@D^@;UxoSEK=e)0)y4T&*19+mLT7`H$f zGc*v5)f6HWo;N+HtfA)!HrvV-;7c`%Q9gR$!5F95@d>;!8);4W&rH=Mt`Z!TJ}oHC z923O>=gEc3Ys=W&KjN9CRQS6gRx>8mQe5^XIc%l}7B7t3YR^s(NQ_)LT?~ZH6pZay zIA$gvYaU?cCqw>`K-@KG)(xl~r;LIbt|(VXPh^{P+du$8ndV@){IZrC8Tt8*Q)<)F zBlQ!e`+t~H?(TAi(!HTJo6?gVLO63}{s}^njMUuy)msBg$1JZ>U&qzaj~v@fNRdl_ z+*3i{C?CHMmW!C$?8omGwYSCsblDI)hZAqP!~fmg%0L?5q^%J4K(&>pXB=RRG&7S` zc~^x*0=(0&&Ym4-9DbjQSkQ&#<@B5OVE)eU$g$)ZXf!O~LZM(JAhg##61ce%O}%t!P_`>%O-`@n!7V zK_>NH7_=3bZ&Un+OIE_GcOo^~#-M{|AzY}7sReYWz?O+PYq4xAjHY_b+;Tl*2f2Pe z+85J#!nVb+>^orKhc28u7kmZE3`#l$+TMO7F4WB) zaWzw-9@+ePCZB1)`(*n`g-n3GQoropsF3|*Iu!MH z0?52>;MM7Ur{D(@0LnGAB)r*in~<~H!CQaxc1HH&$g3U{Y}E_qFx4OS_!{bWZ+g^r zHJ!@msO|4r&{=lr{C%87hnfc@op0_>yv1+=)u!UHOh+hg9%NMZ(&|pj{R;oXIrzcW zZ9JeTByFOw{ow_~Mz(W|{STE%(B_SYHRc8BaS0}@edwuvR4ZmF$Se#Z9MDO!E|SGE zwaz#nqI|$8U$^uwyuj6)D2&;2KdBs$ z@2dN`>*FA_4)ZT;(ATO2GXI=uTnlvm4ymc@a~0aJZV*ZSXT3I5a^?`hLwriIl}Kh+ ze0Fm(-;?WYoF+Z2*xtL`c2T_%j9IVm@)Y@xG6ag8(~dwJ)bC|3s-9=IY@G6O>`tX% zzDsPvIA-e}jt>AhV#4#S`tTp?WtBH!(x7}qR$db9=H>BkK6>KGfQ7DOpkT4-dh5Q* z4DopmOs5eJ_xW|*$KVKf3rekf$g5zlT(3Qfm{7_12by9q9?}p#vRIIj(-oSul)AUh zFiXH}8D~`$uhL*+f!<$}v>CJ$B;3j_w7~~H-d%D-8dysNa_$B*Up3(_fdK_iO3v=( zuDi;ZIIDko&lPF?chn)bs$DNJP2Ohk)(giVar7AGq@>fAEBd%1$RljWWYULUYCl0} z&G`bILNXDbAe^|2Q(DLz^<=-e096-WFL-<_uLNy!ci#>L@vR&H;}FFy!*N`{r#?=_ zbfh6)$cJ$jCVD@5!+cOYy9821pG|%fQ^yp!BlEDn=7@dh=eN?*%=9RD$&CnIZ*p-@ zFXn>NB8Y6m?JpfrYVxL-0UNB7)$b|byARt*nc;e+s_j?#$)4BfThOPg`SSj^10VVd?X>TV#ECmt#s{k z4j@WSL(tGsOL3VO%p$NbTJ-I>G9`6WC|2i05tY_)@KMzBzd0fLGZ66D3h$JvJw8hH z3Hr)?-`p`x)gLUKv4p<4+?NR9){IuVW3V?rGfNIRGSN~ppl9dgv4xfrtdQ_}N?oa*jkt%Wl-sNF= ziBr?spS63D5NHPXfG?)2>`j!kLp}w5`6Or}m(l*;0@r|POn6X!;DBX=?apscf?fCn z+(qF(6YtwxVnI3BBoktIOL4{ebJsoXaIbtHg}yIaRAf4GsDjyjmai)EoqfeT6F|R# zBXe6r``Nt$RFb)F39$yGEDrtQch95!ISj zu%7fNKQYMr>X5X&_@kUu%+3&NbjtM>XQ5i~qegS}kL{JWVGn$kYfRqGVq98JDrCJj zScfj2jLOA*)b(Gcd|$5Xu3!3Pr{mng>hg-Jw(#5Y(9o5^jmu3gKK6kC zt%R1c8>zZZx~G`!`!hwhyRx+mAv0w5cH;Q=4C2(435V&feG-}=C=Dh)Qn4s>z;w|n z4;<5F#Mybd;A$UHZLdRCsE<v zvsHEZG(^(y;o;MB?^WWw&hZJ>NFXzQvBM!|GoWh$KCt6RseFXdsvY|B)cl*tI5N0< zj-xuwF`LGAwh3&8rmW*G!}tm?c>SE_yU&xLz=*=mskOA><%3Ub!oGsONBsZ_V1<-9 zSYe!_5Go3Qe`i8lX+Q)y4_^CZ7eKrMz)c#XfZZ{rbC(Z}m2z#)&y%y= zfwEdr6FxQ%mg5Vlu_?)S^#mo1?@UoR=LKIzamwauTA1QY&8U3h3Z|~28o{cI39@0t z=QKWvsO=Bx0XjeSP)kN(EY~v*>;x89lsgGE_pP>4KMD{zOs}ZlPXo{(CzbQ>OG!*0 zZ%7M$KvLkhFpvK*PtU}Y2O?MBq!}O_1h~6)Pq(2XwV#5umF{FLW_eb9P<_R@aLs_O zS4rq!*=RGfqMeS!is))<8~?U5!*ppG=?cQ@9$RPI=U%XR8^;lRe-Hk52c6Qs?o1wK z-|cyWul?L1SKfSQU{M$*V)P8T(P$?HQc%=nn0Qxh%SMPD*h;B-`?9k1R5rEc_UHPH z=Hj#5mLS_)EX)dnDs5y_exm(1-&WqBWl5WQQd6aebROIdnb+uyGZlgZ_80$K$x`c) zd+PN>ZY-3ZxO}qMB9;C2OD(VB10g$~I*gr1(?d*@XiwpYO(NpEU5A|3?J`*wP4vzG zNa>uc|9MaF=Zo|`(4ztQvKRdaUX&q%eWlhIm8OEp9_;P!I9IK`<(LY4z6uS;yKDdir>{=|F@BSPCq z-xrBs3;z-QQ@TX-I3YVbhUwaK<~V`-F*^<}r|WzL?Y@xbl54!WaN*<1eRfQoQ^3B@ zLvBgY%{r6vy3abhe^+rA)Z{uJ&@(#}?Ac5PKArq5=}>mWANrK(?=;iEK$qeIe=+EVR#I;g)k@oYToT41eTm+umNn5q zsn*niMdq((5CKdbGOiEwSfJ36}5~Z&bze> z?r)**t*6!QuUd2b9RWs(v3H06+|s?Bt)H1d-S8I0i1ITNm4QBHwCG*ligH8mE4gL} zpS^llEa`HNOSX_of8o&=kpy$(c^}l^zd^MrBZI#$sj~vpxL;|~y17=r-J8w|iII6J|?dKMK5Qz>`PH;}` zIFxmKp`r3=Mq!YH{bSeiVF)vw-s0-5PLqd&CrBB#2BH8!fJLn&1sEXC^o1-;iP$hB zV?5ocfOukmnQ3V5hAWqLs%dKRU@H${Ed?>G2uM#z?y|6O#Q2ZN>C=L1uRyBTix;Ko z^+Hfe`m<^+UDgO1SuvfuzYnIP#s%+tqPzML=zMS)=CP6I)PxlC!hCNMP9DPIg(k|$T7zc$2_7dr z^=AsE9-+kmPy&o5K(f(lj!zG_E=!2?pv#cSj@R4K-yyW=R2~qPF^p*iuR6E@0pN_u z@;-ON@!F%v`aR+LWnyPjK5imh;RA*jA6`2&{+JlZ{%SJ>L2gcs*G{fLJ}+4l4m&NO z=j&l8T!&8`8B}|}d9BIAzshozCS8lDL1qgf4$NFNZ-(9yc?R7;LW!8x;Pj&&YXWu;_JJuqe8drgqvyPF!|jX%^y$I#18)_Rlc z-Ty*HZTF$iY$aeZY4B4cQ2KKj4BM6*emKk?gr2+u^Ggr0RDsiB=8)&Vk-?R*HtgC&hN-OR*_9 z)K&4bpt&Xm&JmdJ4Fm#X1s+OG#Kxw>yGVgA?wGaoSj4`*uq{&op_(L8a{}~sQbYqV0%A(S^qa0i$#SSR z#-d~m{jxHh z{n>Bcf)!Pwi-YcMNL*+>g5>4NZ=@=@DJW8d{`Q_bFJ@@-ort{~{lrn`+SxBIAMNT^GoRHQg4M__Q&R5j6L z#wt)CvUjmrR!zCab(i^A+gYb_}RPJULM5p9NN7q znl0e5={+bGl6+v6dl_NPeqnW!^2aJ^ff+5~d}G8Z<%L?QWAeS6Q>ldqR#oS*IcmHW z1)60o@H5P8#R*w7a6n1mFlpSyVx}VIz5H8Kx-jd%)u*GA|{Jp=9L6R;CC+1WRtx0hl2sxG(hx*Gqt z8F}NRVu-2r!r-V`$f=+5^%re~Gth2(3p+X(>{a1`oi#O&p)vQp`U^VYjZh0AurQxWm7-t!lqJW|lX z-GKmYobk16k28(42z4BM$FZBt4}{FKh40=}{))1P6k;Y*Y%`VM97kTSTWaa6^$*|z zJJ>*3gCpZXfGG9DOqGglWO?$nbP7hOPjRvSsq{?Yhc&;ybW){(uxsla?6~5}nIJv9 z9SWATte4k-}Li7Hf%p z+m#gnfuBDRXFu<4D`^>{eM<1Gc_p8=9zczO4^;ga5ggRF7DMIdczzKT*x#g2jCe-6 zl-QJxYw}Z~4^^>I6Y9!x>dt&%AZXqiU=;L4{KyJ%Sh-YIE)_)ITlJ zw8O1&-6eOz|Ajc@8$~jV>thgJUC{cX=;;&+Ya_X3&HGxX5LZAZg29(PSU3|ERTcr_ zN=TzTUN=u&mhiR{7Iv>yH%*@ljPY7@o6sxj{&z!&n{9{ytoQm zMSAGdi_GizvWhK-Lki?i-G={82~+F``Q8f0Uoi+%P&qZjEe{ zx5s=D@wq5C!-rlFCQ1D^FOJDlGtP36x zdqQv3?fsvk^NeTnf7@`>2x_!S8x=}puM#UMF>1vo_Gqg{)k-A@V$^PFti%>uY>Jvy zN{tvbilSDvcCBB{>iR!<-sh7S8TWmEuj@RIWBhVh!Ot;0Vgp0d*3JSkovSI7-GEXB zK@zBy7CW;=>B3KV?T+{L&Uo2+@Bp}mgQxVh&0gN2su}^0;B?B!WMQ}?!~X!1b+?~q zSB_lmWvY8i80}CEN{D(Ni@+lGKUd73LVUp z@-eRw|LN+82EyEj5O-}X$S!qVqpwZ(a5p@cz9#$kQZD=eSpOybj82w|925T6RJK4%w3iWW2uv2oq#k}LrO{A*3y~#@MyyKw>6o;wgoGra zHil3&F7ZksOS>5@H3Ta@xU7dwyb{nupIfE%3ipfTJ%ry&0$rk)|N8_uA{4cLN{cSq zk59beeN9eGZCv2<9QV)7^%Zj|TfiwPer%8Kx2bu5^EQ2fp116*&XhHR0n`9oN3;c7o-$v$Nt zV=&vpR~X^!srp|}%k0`pTi3{|F4=a2NGl;LH%>#H_Oy1u)ntrgTj09MUVhuH$lC$Z zwDT_afJs79|F6*LT$2h_%opxyS#ISCf5S3~8VRW76Z#F)wP;SfKP)Nb)w`$oB=^h* zeIpZa@W*Q#t*gJ#O1Z?mBT17*t@oabK6b=jL5hc59Ee#}%0!zO5zp!;(zi?Vs2eZa4)7Vc85wvNdV!i}LZ z#W(Q`awvV;p(yS1_>JV|#_@yfCx5z2J?U>(mA&olE=Ae^)^Aa+4zvu*(kV(O-E>|P zi_{f_3c*3Zaz@r+byw9dE(TX5{eD8KlsJA|8Ge+4_aALR3a(9MY>7iH%)UCPpYt!b zUWaxFYXIBu%8bj$XhcN%XW_IC$-B5qY4=lPt62^ZQW}BFmuIl-IbyH6)Qy??TuMC? z1R0jPb1D?O?fb;g>3J=6m2Z}rD=vS?9$r(V$c3Qq{*_3O@;~}fP)@eb5{mbqs)i)L#hZ>>?@`A%(y{dhvJ;@ahq4-J^RK+t)~{I zJ2Tiv?lfqMp21SBC$nWz*^h}9K@KP;#dS>3r7T*G9j*de5yDY@hX(QI6d*reLHhd- zSUYEq6BeZK97Sn&#_I^AMi&=?v8v!+PuoTS1Glk!C)8l(EEu5iQ%sxH$f|pp^RytWB3M)L$og z(UHDzD*uqLSb3fp*@xcy$DI~gwrLtF&@9qdDJ(9tn`rJ}EdM|?-1|n!C!Wv)2|nt| z9}@`A1ONRf(__v@F-t#8mL8@>CAVNKJaG)C4Yjraw{KB#+dqM$5yBdF{4khY4zJP#MqL1?)IB|i*Po07VH=doB3jdQTI5OKdBcT)Kh zNl-^2ss`!;Ca-lU@R!0RX@dc}Hnw%rRQBss=0|CZimybMi}9z!`!;jJxQ1zgm&04h z1t;+N#WoDVC7b`nlC9^sf~hoKg=G%DK8qz45U_6;}T>KDs+!W5LFD6FDRNV+GphYI>1fR)ghg`jB=(nHKeX9-R( zmgq=kL)v{?-Rxq51$WQ5pKmg_E1hKtm37cbaaP9%pwVnnsbD=jsaKhOSpFPODAM-EP7s z%ao~Bnse9%h;>Qaf&oFjVg-zP{4poJz<2o6PH<#4Jt5aq>X>EtW!L3EU>i5>cy4A2 zFPHL>zC^tH!wlQo2K|$-dw;I@ZgClhsUK}`O!n|x4=QiPH}o7D<6t`}+7@FxeA?LM zUql!mY!G20nQBXplt`YZjpFA|%Jtv=AZ(GXY3HzcK3s=fl8PTvAU>)kp?B00^sW*R z053K>RF0afLTsCrFow^c^Sbl>$Ig4v`YUjNOQ0RV>ELgyx!CL$RJF0Wau2)BYe{qj zen~W`HnSMxi*eiEPlc5O-Hab$Y&vefUcyrX?C4nc**d6VQ>Dph*5_b>@@)PrIGq-J z45l)Iiv!NS$`M4+*0dFr$7{B@XVa$&~R+x4lUu)*nmkY{l{pK znnUYWwAQ}Z6cJ1gN_1^DARy@w{xqgIYb64(KO2i%b(QpncgZF?NEQDWx)N3kLJiq^ z3jG)QYx;8g$g1lMt2dgS59GX z_1DkO=&>YNm*=5%LKkmORhbtFa2k_sAAPkuGb4#HgdZBNS^E249z=M*`fsK)SN+~` zOzud{`JJVO{Es_t9?w{ebN}`;dFmJ=xqp1uKhm4iFsuC25@1lu<@RDP>lN1u{PE7n z&VWx)U6A`+io8JgBHk*q@+Km#-#PHKTspS?eFXYFx$!Q5j=_VRd>WYl?OTr8f<06- zQeLEYKpGqMM;l0ylwJNjs97%Tz3KL+@0D2MEJc4WBcre2hi9@4#9!5qda2ylnJseV z6L+;^>{orKo4L@vLRsVNvp>6v8J~=NIL0Bv=H~K)9A;HjHv_D{`h8xVkzC?b;N|}= zlCB!r6K$}1JmB-K!xrlhdb=N!FqgofuSP;{^I%P_1WK|EMtPE2Q-=OZ{5N(M6VIe^ z7B1P*;d{MRp(~RRCIPOZHCID#zP?tBjurn_Gsttb^ExeFBqa|=6$PD^SHoKPQ$4GM zEcm_x)+!N~f|W;`m2s{rrG`7NN^ zDt?$k?HQ|=Z44PgFV;PHpjC(Jn?ch$LIHXgj*vNiPhr7U1BT>+^x__KemOHh!Au;c z&2fkuqYfLvm)ddB1JaNUM|d~35H1|kBRRc3 z>KX=3PLY~6+z9sn4RjptqXy+Pg}LyzEX^+%x#b@n-|8&z^2xqfFGOe5biFe3Z}hzS z&tPb)JEFNxfCI~14krmlGCx?Kbn_ta0JiGf)(*;+dsS;1KdZ&{o`QB!HMaomAnhap;)}>B&uhuti>*E7VG(X* zmH+3jcLd5ncZIVHN}IZ^28vCQJM|@@3cU!4Uh%fEj?%D&c@Oe1bkE$1@Gap!vrJ?K zYykGbj}E{_o+2o7z{D7CnK@V_8fE@o;wIut+~D*ZYv4=4W41)-)Fs18HPS56w(re> zAO{_!PG#KPXOLy$!v5fo0p`Jnit@eme(KEwd5_%1 zWSQ*4tKk0jXWLdz9nCsK*P>rP=20P$S;@+PI13-Y(aCLBX4 z4`iB8-0H3@wiLPs-Olbc7hiW3PFu+2?@ck+SlCBpp^y+nvL_b%E~vOrsZjDZHQUcm zYc`l4~$&qT>p54J>u902QJ zgRa9i!Y*mW=0#h)+g>=F3-(sD-dYd;nBJbS7HRq&1-X;miy>KSTH zTW5riBZukAjJM>aIla;bKY`Hr1NC%eExpy4-r;hy*4xTqquWoq|GYw}E5qbufg&jg zNfp1|;}fv|X;q{PJ#80Fg#D3ZB>7*taKcp?+IHfEeot78Q-gTf4=1O)oqTB;j*~L3 z>m)FT{B&-#!2^YSa&pCtHC*4$2t)Br;J*FZRT8li)?>?x6bx5D8D19|9+Xc7IuLk# zJN@_?6%F7H-}{zTd>Of}6C&Tqb8oL*Wn8i=)HXWSzXgFGv~W}E-OOo;rQ5HoZtyi5 zhi{bk4?G-002My~mNj`d!o4scdIWNJOcC^jFP;gjU__LaYS%L~elcP;!pzE{KRTw@ z)B25;iQugo;(H0Eo1cNQ_xN#edhKmm+Bn!bv>EDMG|{_p43_FsN5@rHXX3D+bwKDZ8}gsAht59( z?lCL`(VbF=#`5dRp3*(KE^fo%$0V=uJ!_=ovKfB3g15siZ=mU+f={qG?is$6nsrUV z&A&%UkTgbTtqq@fU*ma6}wB zxDoFTw*i=Ts1BJpx4~&z^O@H=^(kK?O=DvJyXLVH+Ge2<9Ca>nITZ%m7Pss7>1kY8 zeh#a6&d@#~R?I{MSF8xOQ6zL{3cc08kqjOPt-p1D2m}&x2{lmSjV)jr+1aW-(G(O` zT3|4sEXNk)2C^kLd|b$Z^$aqg!$r+olrs@=%53Mp3f@Eir0&6ZSWDNW{DeDcx?)45Yx6?>oiqU`a>wJgUpBgyxEE^t9Yj47&z$y}2kh!5^v z8H@Q+pq`%RnzqRP{A3(ZO>pNM{`+nA3GE#W?yrVV>Em@@uFH_qQfcg`Wo(E>)S;>M z;_##7(n*`F>HMaX2YW#f17Vg%7m*jc1t#*Y@^0N)-w|Hc1a%fH3oooJgGnz0(owf2 zYds-Sl~EU1&R;fepPis*$g5t&gK;MDAKXbGtw- zeR6OJghM~Z^tk9V+)Us%F23I&zhns^3-`BbO=wT%X54~i!PZx8Cy$O4_g{SrdE0hw z!FS;)1)5n8n0Qu)aEt%yAOUcL5R$v2({eQpt8AP+4o=G!en|KqrG~4{zRp8o9MMK5 zq6x$7;@A&8kNlR{SVQ-*+?=V$%~rQ<}&|GT;YFis!9aE%KoHo3%=Xx2%)q3I%@Bml}N%?&}i;l$< z6ir)v@s$1AdZOxSgTu}Hfdlw-!3QYMChM;uLf_N+6o@$@ewazi@|+w^fbXr5Y(4+> zRL6!xlWV>sg*^z4&)$U$Jjpk-0UklXJ5Ot z>T*Y_GjY@cuB$XMEzv2X6GoT8PB^c+61OlwXF2njsG4?ezy=ijW%>AV&=MzT2()7f zbelfVNWhj%9Gv?x1HaViDk%GnPN&hzMGgrD>4#LUAp~ca=#EYfd$h(|jSRUvMq=E1qSY}`0(?>ZSp&AsTuz1fx^4H(*lJg`oHHMKRPJ2Ykmh0zJTIq8zE*d6 zww&_tt*3e1qi#)V{gnK@k+OF%hIQAjdmD*c4a)UG!h_1L2wZY=8&_H5airGZL3a5l zaUDGp(4#ivMoJ&F!X4U=>BUO z6`TrGQlDEs%lyQz{HAL#?lSMueA+htahkQTCO`5KNqgjh8Z@=+WB`Kv@$5?PX|0!y zr9oFb#ryNsiyT#J|Lt%u2^KgTC)k(UD6r*)m{&|6?M5CXUwNM9h zlTh|TT{+dPqE3DYoY6zmW#qbvV5wDK8xsxAuP|fVPfFCMSofb;mX|aO{0{(Qko|PR zzazXT?CKLtW4(`}M*{`2D+?Y!IxQr ziJl|;-JZM~sT|!uD;Kaaa2K-{4wOk{*HAk8@DUQ|XDzsOK(cOvvt{?5R+SO$Z-|Gr z@()!Xn@IPF9$?PjpZt;XZhL*oh3nuhent-vx=;Yb~DsF9l;IajooT=U4z#5T$SsO$>&2VJ@0(N-=|0Tma=KiQi zxY|$(jlc$%$+YU;V}?!8#x4R6B3$DT_fE@=RMHo-X*ADYGgDPTqf3~LAe|IRc_8>- z3%EpHGF3ipXh3I58Q>hU$EYc5XfPVImHdgkA;Kr}{mI&h@h0@A)HxnJ1tTPVfu8*e z_gs0bCG%y*O2Bjdk{+Tn+`HK5GbOm($|-Lqy@Yz5AKN~zkCG(R3&X6PIq{hWJ^gMC z2rWp;c#YzR4qoZ-IKPpSdd6T1b)IV@vhVefhy9;_-q$-b}U8#WZ-pxq{Em#_ZnXOl9AGx8xZXZl3qFafg-r zoArO%X%;z`t9aKr4c~bN9~CRM>Bcmaf9pU1znWUx#I~+**4bW$xQ3Np9-_mTCVw5K z&a5V9fX_@+4g=U_DvL_4Wo*MKjDDq_eF0nyeQ*<}I1}X3jJh z^joovq~PIpzn{Gps%wLjEYXw;4`t1K>=qvRUzgUQ`N%enG;1#PhFlu(D_ikZWx07# zbZjR7bB81hIF<+DKLD@r`w~h&2WB;s&>eD4^WW4Np4Uh;CODz>x5TqqR9cZ9*X7lC$69E zu(!EBOLKG3hJ&To++Gb8osQ{lHr&Ys{lb-bM>o;@;Z*uABl6?@>rXP~|5Q3_Y9y2o z-)76WU$-=Mk!@~Dw=~i!G4B9vBjc%3pQ- z-l50>;~M(}&N|Y6>N=a#p$YK>?wV$z;Oyz>_`J=+Jh3*6X&}nxFJo(2x69t*x!G}< zGl)wcku_Tky_)QY854NKd903*QV&%Um9l?=T)ao9bUG18Cv0jOsD_41yz_!dBZUQG z&D{hZ(xSIx`cPYvOj#TU5e%R{LPLfjp)2eyE=({gdjnC-bPBrB_yhBf+o4IyGgHloS!3UAPyucaDmuk=CT@c<9 zHr+`#O6K$D1q|KJ_s!cr^liXSDo2rho9W&7YXk7dzN;Se{Fr;WCWf1y=)0OK9-xPK z&CgP?J!eYSh9-Jpkl6y^C*x4)-SZ02X#Q}s>W+)%vNrCl`12)n-_3;0u)wu<+?zRx zCl}%0GfeNRu!xtb$qBlJb;qY=rF2lcHKK~KZ4-MS-N`nDfM1><-tgp3cFgTlQSpN1XJad(GB zb;h1jd7i5{a@d5XynoGQ8;v=w;x$j{7}_t$phqXPr*`Wzq-@+H(us_J9rG*;3@r)3 z7jN|Peopq%wbohZphW?hTt`nKEdt)$!i|6*V^<3mI#Us~rcI)pPNAp_bDpgK0p`pH zO_zW$Dn+P66_-h!O7|*jxg5x|pok5rqUYe4((f4b65J9bWzx47jX2UF*Sc&qWPbgL zQe6Hh9AQtQ3#J;HSHE4IadGL`N-;(q{#^+=`73GrHfs9-J|ixY#lCAIU$h<*tw5Mk zEaPEp3J>?BSBSRnq59aoTz+jVbCzHQAqXu}dCSDBSwOCniCRMDj%qkq<=a8HYPZvA z?ca*G2m6=@zpmTQc}qr3tFby;yS~SUPSZDaEa@XSF-T$G$m{FVn;UQ5OxB3+CD8F- zO4avLVd8~&@{eg}EfPO(CEA1j>+R#n7f%s>lTdadiqk%)6aLpM{rq?PUNEgYT-1n` zpART5i-=21?x1qRKifCSOlD_)GV*=A1wJpAdUZ?I|K5jQfD;%qG^Uh4^m`dTF78_s zq}W0dbB?^y2RKvD0HccvvwjSE5+;O3!2(Mtg)K%$nhL$GYt7}xW4j=o@9n(%daf?G z=!(f1c7;r-nCaW;A4b;k$K-&rY6-(Brrh~7zma(q^C1#AV(Se)A5aLbxz_p4(Eq+6 zA74ZJw(88Wzs#BBu-Cu>J)=mMAG=W#4^Rqoi+S+z?NZCScmX#D$ zdnGQXk82+B%hEwln#nIRB9QDpETt>d68=1r=UM7G1rqe%@oqtLpD4HN-mOOloBY4q z$j<_1$8o*}bzuo}sE0E5FPyGUb2~#11Y-&qb&lYeaj2I)Xw_}2<96wSSfHrQD@-hd zu{VsX!vH!ipNV)bqXI zC!O0W^?e`bf>q6cAjA#;mCcGgQKvbxKyrctpSgc-xW<1OaB>KZZN4t3Lf`DMQg$!V z01cz^Jn-yxoq!LnN_@8`d1|OQeJjl?G>s1OTJMKcS@Xk(%S(mmg(c`y3_Y@km}N*v z7WW15w2qUgytub!W9f8D6$y>+KfVFHRY z{bp9-Wgw#3a2J2e!TUigN2Yt~2(``F4Oh7$e{%zB+ohi$bI8LVTw?F2A)#s}rbN!| z+Mdbh<=@T8Z8-Q`uujj^438@GXf{a+at3$l`g4F z>m^oF89NIx$g-L%j^uy}$(LF8?yogUCzkm_VB2_eqUe7N9?5^b)Ea45_Btu`O;yuL z)yZlp?oXec#(CDHU*A<8FxR}adGqj4Y8!w1co+Y)rX9F%mU4w zBPpHK2+1pZME5+B>57#HIX6p1rl4%GQCW)~rZ{yK)WCbn@Smj6rUwLcrnrt<=qIl= z@<2On6TF8oS&zh?jy!Y7(G0X1MvQwkrp0(1x-L>oYuck7S)Z{^=Vg>PPvV|%O9=pP z*Tz3I)wRt?@Nu(>zV}?1e09l6qE~cwT)}XPury-4YT$IoY_Rp)!_>@;=YroF0zB<*L#_+r z1L`so*8M)u?BYB z(qtYf@JZRITF9R5Ce%EWOt%C)a!mYP55Nrn)iB=&%mG4pDhhAT=3KD(!eGY zJ)c$&_lpm)RlI=kJr}}0+eT2(paczQqd;t$tiso9MEnSH`)B>Z%i}yb4Xdhx->Fv+ zUtbOUWvf)__BzCedn*glg0sk9Ss+`lm$b+}F~|T(IxDFnQ*9&8$_-KRQ0NI z82Fr5COOKOQa-eSL5y310y8JRRp)y67<2xfI5mmG9mC5*8ds%_+sC>q;(1Q-YUonU#B?2>;7TQ1;_CBmG?S;iBZzugKznKEJl7n zhGSC_035WtZ%)cs2R{qL)rFKQ>mb&tY|@cnB0kiTmM4F7@!a9w^T+y|%T*&kUo;Fm zN9=pDcJCL&bt0JDXSiws{8|-MLHUg=2LJt&%5@hl391XU(4$@Qr<)gjJSn#pV|Ed{@FC&RH(ZPw&OIMYle z=9bjog}`?DRxQeJd0o|qo8Ln!KjuX7E`-2%xC%vb9TH`fO29XvUzH0uoh+3TcoXl8 z2MeDL7+$(y4ceDgD12C_Pk;d$rR5yz4@o&1LKPpn#)k9TFm0Y-BCPza7v_k^a{7;F zlUv7SA|f0{vH#$O#p8HL=%u-j*U;AJ5^Y%UaGGH!SNqw%MV~b42D9B-C!5tfg#)ol z-txA?TYPM8Sc9DuuTR6_8zG6?>r!GPK#B^3yiZCVMHR=w*KIQdDt#nO7Y_(5BjLFy z;qlErT3a$ZraD4*x8|p9#}@3}-AFTmw+ubSJU$%kfB)-QUadRm;P`9lsW%jt>ceo< z(IaqrEAysP0r%-}**xygSY!Be#aWvnq2uIre|x>Lc4R)6C__r;IqD4%o3VLo<@F)A14)kD?O=S^Wl;~XHHu<<`N z#brKqkMa(a6ZiQs-4Q6P+E+uOWYE z@LC#|`g1o|2WBnRCvj*R#hkXNss$Ic)-zhuGl8wFn;z6+VyMgeHjux2T1|9lX72Z$ zNI&_)*__P~F}3{@ffnnVm9@)pV;_hKclB%q-w6g#FTF@`iU%D|C!z;~h)%?@ziTNY zO_MqeIOtjU82_Vb4%Qjh%4Ab?Y20#IBm2y0lA^SWbOF2qi|pMU5=K>@ZV`gYqnSrmW$|g2 zdl&f^FC4^*xIU7aw-8A1lmvrvh(PR`;suC{kG9D^y>33ZKDZpLL|$VxF#l}G`)hO}1YkxfDY8|~c!cE+z2J9bN$Ox3a&l+~Vv<0w=O*dX=ytQ2U!LV<0 z3n6dF#KM0CliX2asB9Fe=0JpGFw@GmoWW4vVHsmj*?+r$_hk` z%$h0}cAu~W?AZc*fA_2rF=J{q5cC5*7zOFduRy?0MRRIL?G$*;T)2*$JguC2e}RJl z*Tp|@gh=HIsHBnDXk@$Z;zyPwu=91*WO&s~y{5&`t|=7NWTZRe+kDU}loZx;;q%Hk z_sL4_2#{6PAGM^z6R&4m#fmX|c_+i1Zr{`85U{_hgNaljB{CDS`#^=oWx@F+OK zI`%O|)-GX?#w&3h=C~V3iB%OaOoeYg*BsH}7+X!Z)9)bI)D9kaFqXrGm+bw>Kt%-uF6^rCK}sezpqh=>^f?cZxL zcU)$k=Jy=NUmcWWzAD@E>^Z`dsQV5C;0pJaL`$^m9%u)BlJu zu!RdP&@~N`7IbUK;M`SbO%Z(7nHOtDb>%{1=pM#xsXpyl-|n*W66 z5>s`oh-Sm{TNGml?0ITyMrYEZ$b!$k7yuEpx{42-c450M4X0O|*(iNcE;kQ9sVqYs z$!o>Awx{6VR7*%SpNPoFOh%5i{D-So74Xu$g^sxYSAHR*4q|^b*1NMxl#)E}%O3B< z>F|wgl_eF_UHY;6@d;lJOaCaye{jB+o`;vuo%Olj_t1YlV(D&hhILeG21k!K47 zj-}Nvw^ah_$ADc`ocHsoZv1cC0VdEi%0Nv97)PgZ6Q)a_AccmTM5W z4VxUW3sv!WGqdYCdtQ5AC;Ct1@=)cO0uxF*b2nKsq+}tFCL7!;IJt~zC$@``Ghx4G z(;w&h%KXk6b6dwsZ?MSb?9t9;A4m<*JFLOd2J z!nB#$u3u}t>TO#Y;T+Yl?riGrA=2e)s!A0qG^TJcT{^M&azy)pj%(`Dz6)+ml1l!S z$cKqI>#y-bpueRXCVmfVUFg#Ym|j3G7+(h_=S(OjzkQ?yM_|k^P*Mu$<>rWc)z~JJ zYbv1MBWtsEEBY3a;9Koo`m?oVvC*B;TNQOSIFq5}`F+rCZqD?EE735(*(RLg0w-3Tet@oDBecJnrd+C2(NPU`)-XCY~i+1{xupR-p02 zEVag618AzPw_ot^t_e}sBzB7pFK{ZHCRHjYT(2+}87=|;tyEuo(`hu@>)%eh4_;o8 zv;+lnng0LlpG#Kwjl5zg7$kFO2l$-wWGQT+5{-tY3}u42#LNfu5GhX6X@7eBdK0!K zAcPur8l-W5AzJ;zVix@A1B@vem52J6D4|rop7ZFY-!+7Zx`ABJYp(wRRuGc!Cf

1-DOHhC*%8(bo!7>@k`mu{{w_gJ2>fSV>yMBeTU~%UF_F z>U%{|gC0mmoXPREKxNk5IUr(Wn$`4LDJkX+F-s*4yOD0Ud9QI}Mq zf`p+>qW%*~5#wA*d2>~Ua;TOefq-N#xO2F!mK0EHcbdVaJl!q7P!PcQ|}|V=!NBz)A<DyLu`#yy&g;L%-TNK$JJK` zYX*12S{pWDV$fENgMOLooW)_meZ=VtAf!Bg{$VaDIc62^MCaYxQWXi zReG-jJU<@O`M_^g!zQqc8h&HWtBON>uYIh^_aSO+cnt&6NGtnWR*;*GJ-tc$p_!XS zWH@ZJNdRH|thojEe{klB&2wZ}vo=E5I6`MeEMp6DiCLEj^-Q-?-zNq`N6KhC!O#mML=TC{01{r;CfmooE` zeB0rWMKw#~>LXFN3)`QXRb{Pr{^&e=;ABw!DWT)oQ&WGev90?!LtxD$!)b4ld|lusFXFrXmEyCg`o z+bjEMvkzUpVsbfwj^5HSd3!d8KOc*xFQFurZ`>gMI@`v`H)cZ zZ@gwXmF{b9vCplfj#N8tyg%!yK$A4YdmfbMbiM5(MJ}iK+kBDq&Hmix(J`d2G#-#Ejy~nQM@!+a+ba)ka=J*DcmNUv&h|*fn=aEpoxY1qf zkxx$NZ#3mFL?5oCN>~!w_^U=1p~%lWY4+o&&U=&o>4K-i1VTagCysA=cD|PiHqPRO z3or#U?-bUErE@$chOz?#PZYV#1#Zw1d_ULJ$Z6Bu-#VjI-@PxnAiGAj6<71!q!Ze|v5 zitCLWg@>9`(cF=$QHhq##1JaR#Qd|&aj1;`+XbR4Zu|CVrlcuiO#GQR{ktH9{4CMt z@fL`8*OadGf+p#$^BG)d=yrLtk%u-jwn$&;19%jd!(F~YBhsOFkDJ5&4XX5wqFdKi zbkQpQ$X?u!v_a3&tC!nf-C7w_q5?cf)`zmuZy)sWw9&^TTFL<#)>AA@_+qXw$Pg_ zu?Ac8EkYwFKG(On8JxE;8gWl5#`xGjqeVC7{S4^eQB=oGnaA<2b<$DMSNJwg${E}R zxpX}|ObuvY1lV_t52#?V?=)VUI7)wQOcF9o)WiIIT=FExuF;12s6a9|@Ors-W)H95 zJY4upaq2Ht^NgY+c%+I+d?@89NGQaE3sq!B4SzKxWsQCZ026QOrkT+I6TYj?|ExBL z!bo!sJhJ0I+>|QyR+Fg(o6pk^F8nlU)rL}K)4O=fha2jpE6rHaVli6c0CKktNUtb$ zM^G8zsT}9*XVxNt!fFZHpweG8OeOV*Ld_tPmfa@1X{SuNl-5-b^>69_EvBrR7@7Vl z^{%-wmSkI@$X1g8|? z_o%|tnxCVW>OHHck`s7F`J8MdFGUe&;(Ebk=gpMtR(Zln+0{lL<%kv;6L04w)HhAj zy_5)XPisr|lW#d2*=4JZmcyb2LuP^zflgD)LL=`JtmEaQOrdOB<*Js}xKu6pA+k3+ zZE;TVyTp?hX6-cRo3j5Czutr>En8b+(rRk-Up>hk#O|%W( zq(#)y(&>O8p8+o|LQH!6PfnWyV;dwa0_vJAjq!Dc4Ofu4T|4KbY3tnA5s$IXibFuf`CQ(tAS_|?EMWGR5)oO`dip`H4{eTs9 z_cph!h;-+MTO0fL_O%BYL4yVp<(~E`;;NlCQ-r*?=FNtGdmT3gZ<_bMjP_GcpCr8O z8A38FJ^5zp^Ei+|ck|5eQjpkG{lReat<>V^N;dp432Em>KCj?; zykvF{_N@d!3}Pevl^EaEOE5jxDY-{`Xq#(+s6X6t_fU@kpbB$1L9|NC3**S^6G{>? z2P!Sp8}w@6XAUa$@3Fz~0nu^ZkO>Q|q-;9Ecv zY2UeArfsm!CU5!|}Ffg|tDh#z_8pqvoFSmAh8T`>n+#OWsI` z8eQj1qCP2^Wui_Bc)yI`Pbz4xuM_ZNJ{+#_6dC_)vC*|B6zEe>F~=`qoO5cC+?*OO z6W=p|^<2Ac%yx39SjitAUIQ?q@~OIc$ljs{`uCS8^;VU z_b{1m$Mh%y#kxlDU!gfQm_Cgoo;=tMA8qQQMslNv*zU4E!E_c`AT1VEEkQIke5_jq zBuH)MXiPM_86TZ?{_M7dQ5KM%=Bi~{s+ZRhtWjYg{7B3h@r4piXTgR3!qLmeNRiPa zO~lS3Tdn_5{Y-Vx0t!|NyRD_enyy*)%Q znpy$48B0BmE;>d@>qlQ9eL-xa2m)_nvy|5xBx%6N$+?GLU2bZ%v;*NvL;ZH$3cu#= zf6XSKWUZ4!>Fj2!4iwLnD}rhe`ep%FpMyq{ODR4MPES+HwN7ghLIUQOge)dWj+u?= zv?u(P&9~bXw=7>Tf4Uu<{TgjfPt)hb|NS2zG>BgUw*^GgMqQP19Ls-sxs`Gs2!VVq*}2rJe$`^5$S1XLDbB>{O?5V{G*?E^XQ7x+ zYdg3do;t=-xDWcJ<&QToI}0f)-b`r?73HBb(aUTP2dIim9rrFh6)0$#6R#+9oz}W9 zJbc^D#c!bVhiSt5Mh0Ie%&xiKXuCLy@+P-qytij@8nLS%Jm9%Lyg6`Y$seEJ`j0ol>Boe_cKOz=kkXWE+!>oEB9oL4 zp(6#InEOe&XlocC?Mr37wjs<-Q$FTm?mqgT1^AW|s^-I*M~9VlX1Eapi{_f ziTs7OkXaRvxL!tt9&6XRwTk#?rr}`LMi4T|&fq%p;B?x)C0!$iaEbPBA~>T#46gMO zqZ}W=Wy;Es~1|0cmrGpTF@CQoh<-B?eovje`Ewgi? zyMMBH#R(#bGQ;HSNC{T}XQe#2kuVbkbjPh_A96NgaJsl;kl+vp(vTosj5GLlr4JxY zrvPWAIxyU}+$b39Qzs=Wpp4fotR7}T0QKUcJAh!LE;;6&7cY=O>(-MVX9Mqgj^eR( zCf(RQ9njs58AGNBP#Hn#O?}My`?wrbu%1euTxUG@rJQ9{ZqK3qmC*$zyQV2gsVj{C z08*t}__}+FaX?hC1Oe3JwIplujl&^M0nZt!22}_L3diOY;bi$zvavg|CQ%+Y9Os;h z3vR|3oP(ZeWjkb2z~S-C!2^g`TH#2~;Wx?-GB2hX_k*EFG6J2}Wqecwt(3j2zk+*MPOZpKbME=EGg zrIkR(P$|%bDTm>Yr8!$;ebS)%bfy@Hmx1!1Uero1H&0VU+R%2*<+9i~@6wpOwo7uo zz^P8q$8g|sDFIUZa6vtVX48ZeN>19be8K?*LBQ;Jq_`t!E5i;2F=NGPJ2!MN#_jX% zDfs4`&RM|7>GwqqCILL3L(o)vyw>T@a4VhN>D8GvFOZEc7z}P~;N!Q}owTt7r>-bz zL6uI$TyP5arA?v9E%P5!Ter&|X0LN+?yHeGkPtSJ=mDn^{HamJNOrbL_0J?8KMDy| za?IFVbQOZCrBjurtWs&MNR~3kE)=)wK9xF48o$W7#Y9L$ouxx{IHep6kGr1rN?fk) z{)TSqEihum&H&rjC)R{gIW55L*iwD>#s)iz2bSYvvXj>U)0=uknO@dULCV;FkP(iw z)_u}2$Oo?!@hHhF_dA*dd0dhPdE&E@QR>3!Ewu(IByEf_9+c!_M#o?=$30CVM2w}2 zEicMQ+6PYJhMe|VBCU01F?SZhLae`c-lIT#)4L^)Wil;l1mRH@h z1!2K7`F8!{&A{L<6%>1&$#1*$sh~~al&~ars+C6;(m^ERxtNI~N{4XhI)h8F#q*93 zj<~4<1d&3a0DeNC^GT5I``wb1V5Gg~E@bvv4lH6SSB35>CuT+>GD@DgsYF1zcIl3U z_o!t@ML6JlP^AdyQd;UYPE@hNp-wW=lPkD-i&&ob*(;2t6<{@~<#VK-6-iz32xb7qHa^Eptpiu122GfQ9l_BMc z36@{tq9Kw=QWLg1S1W_P;iZSq)Nw+nxFGX_TCM0o0YgIK7_Gj`~Umn@&VsTqmJ<`~*~ z{M4x)?BTc_K{VK-67S0Zap~5TV?g0|BC>QIwX|&(+ue!ZXRy)pY$fr5^LFN%=*9A< zDoA}W0XfYyZek! zd@gLlL z!Tg7t2eDtU{wZT!etGau8ABXR6ClVhAPD3a0SfXz;}-x5i30fr{cQ~%u?00#r>Up(NTTl{+jG4lRn1To6~%Lropo1a?DfAjpb@UPzf zmr=X_&l>$bn&?r#Uj!%s9^&BO;yieWi;Ihg_wW$`>0<(Xd;%(B5<*fsY6f~bYFgT7 z%)D&R7`d5fY1zd%xcLQyg@qZ|B&5X!rFeye1%G#ffrp1jfKNdA_%Ws6bK2*E|6{oS z6F~G35Dn^8TRVFPM^7(rpEtgK{vSfaK8Ama zh)jScCMBn&ronP@^YRM{i;7FCYijH28ycIMySjUN`}zmqgAgf37^z8iN^6Ix-Xj}VRtba@PzsN;|mJ1Ub8w(rvw_F&QZ_qmy5%z=U0yxBS zTDX?(B#eUZ9+Jw(f351oV-nInB(w4ue?-nKyvl<5E!tm_{r3cW|Nlv{e+%{>axDM| zu+ZjBghd391tg2!u77b8gT-4vnwRF3!9ISspaA}iG8$N*A#NMQm}z8)pe_^ab+8H- zlyv7dHH}r-%SYUDBH01|yFDKlCm~T!#f^JW zfTS;oG6c9+9;i^L_?6zROk4t|G3go6AJbE$W^oElD0s#$)Yp0O?e%2@;Xp`? z}AI?K*B;EJ6v3Pb2GR-Rt^-g<<}@^ya#xN#Ju@2FUoum z=+Cn_ANYb4WxF$beh+AWAmi|cf>B)aLiyxS=r;GJ1W!uVu}sv$Itce-_6r?r|6P#f zZ!{(cQMT;r-t6-SGJjEde-8-tA7wz@j*jWt$u(fF9m~GG2T-37?zKp{yD;1yaTKc6 z?Z2kH2fU4x$aeQ&8gUi&U5&0@T7NedTbI7EU#U7(I|Q-gW&A^)BqP8e>t&H} z*3>67A23Z?hyjl@oFW&5G%_Vi(`J$~V}|J>=MW5iA^D{HEEqMizp{}^YK1hhfD&Efo;rB>e9EzP!OnN1?uDQNg`J`{iFYQqyHGj$_G%R&YRe@f>7~T z@dAmp#74|qTgpusX4cnZqoITFOM^79d3xZV^WeMHJH1WqQ;~TETMzwn{mSX^YzW{%#4m56a z#az6zBs`OPWAY-2`4Oc*?Ye>XY+%sBs#HL!8ejY?(uene8G%uq0kWqTQCa=iO9Eg0 z$NXUw<*uGtUspRWA9UXREFW{@!s=E5>SBkuJzA0GilGa7V$loSUrF;M&|jqRNaj`! zSgUdgR4X49wj_O-|IMA;Q`>hbd!Josau9JWQo5RcEjDRYPy8%XZYlh|->&g?ZUEKJ zMpFt~WZlEMY?esB=Us_hi@UqpPUakK)l=U^H!z=Jzi)y|&5)OlMieZBY&7<7fl-uw z4WiN%_W(IERnF}cHb}vAtERBOcivf;T!wXmPy=0u?1t7(Fl$RVxH_4xlzF!)R%ns| zVQQJSK=!GMJ@2!$knvR|kTuzJWI{HHwpf_g_P_AWKD`I@RJE5IR!%hY|5_6$ZKffYn!gPIP~SqDzQ(!oS?U+#tRDh7=>^T{ItenU-3u*+jmDhiIE_?>h7nEm z=wLnC4xdan_o7kc(LI1u;rO$VX@ZLLBW8l@NI5F;qUmM7-dOS%YysjI= z>h@FuRJiGV$9xD}4u9sk3co$wQ)9m{U$E8?O-8cnw4-9=> z#QC{*SC{)biAlI^(+yS~zXrNh?7q@kV;^#grI2vz7$UPXe%Bwd@dssc(n~~zyN;6& zT7)hIJY5M%(Vqd+7JA!i#zN`IY#;Sw`lvJ>mIrBttf>@;U9)veR9uv*`X1yq$KZi* zDBq2T-vdl8b^Xh0KXfm+v;WDb6Ps2TFdsS7%(tyQU-52ZrTO8~H^~v9VM{0Ai^)uz zkD7uDnvL`80eV$=%cd9p5{$~WF;Ne&61X@DTCyJQ!EJSAIU%3zn3U-Vd7M zqXgdzI=0B`W2Z<7FxI}VjVd(}r(1LNY{AN>5Y?$j!t&GXT!+jGPt|`bJ8k-!6EYxv z3x=plh*x}2sY|AlBz~?vFV6UlWhc01Y=hpLgk)qjCAqB2mNU$4_eRc z(VH?LeIr5L@U)MsIK6AeN^qd8koM_(86lHHpQ9ztKrwTzurnFBL)ueGrtj&@CAW%n z45@fa0<3E14I41}9&pI8@$#YkW8i+s8boX?gfrs8cr$(;&|5-*6AD{yV83QGX|I1gmYX>~A}2%J|3D^`Edj*S=ZajHHR zej7D}{py`u%*#HEVvd5$P?f3|f08lGBObRZx5VkhI`%utb9`VF;Mn7cdE~Dbt)r=G zuY~{UY2O@{c%^9LYWl8uwtElwq*9=9BYoG*OVo}hXdF|N8F!_g5k>jd||E@AaD{~0CYPZ^K?NLQSW^v~qYf}cSeqYrY5 zjltElkTx>Yb>=ev<NSg}Ch4fT)EtLK@Idjlx$=V_vyZ20)Qa!&u?>GS!ePZPC&)q9f!h1|9Y< z20&tmXs0X}P2^7?YkX|1>`Es#lE;{!` z=7{026u-z<%lByY#%1mvpqg?G>DuP6Qi%O&LXXyF%adPCa;>jDvy&&DpE6I<^ffG( z@Av-<>8lO@)GGDGC6q9al#p~ge#@F~^xO(F%J0EFpw+q|x{er!v4P=`Q;nbtmXYqCG}x1q2;?&>XMquQ2op&+T}~VxI&`xvV=ZI^ffe&>D|T z|6s_k)bI;^I4U_a1K$sIw~a=$L}jKTT?B4A`il9UJ1q56k2J+y+Rr0XL$0R!r%(Hs zZRKLSi0;TL0&SdCZu~))k(Q{i4kwVTfTnq8p(iz1)4*DC;YHhMGVVzU&D_zl)7SJ~ z_knz+To1`_WjLQD*eKyh6CHunrS&QBdE88a9-Pcum}~drGJ)LZ6PCB7#ouz9QVbY9 z0Hu7Z!x|#oudoS~adHe*KR-lj(VVd6CvRM^*u*{Z9VWf@HOd({%_-Gk9<^v6J&Q-1 zg^oZ%9nU@BCbZ)x<`+n;l4o0-JRPY1?ZZFI2r1=gd>ywx!_qWfw}Hz?^hvdp0RP*)Gy?@vZFA^%V^d!@cwP9T z>zO*L*Bz@|(7=+*GH%Ow)aupVsM@u)CRLwIK@(oRbWfN+xp0RMn*P=NM=n(Y)cIBYO>WLgMep9S0lpAr=l69y)L* z!oq(30EburmqbpB(bE0lUm1zN6A~1^^AY2#hvdRKlq?DfIVcfP$omOaPiXar&@Oa; zH0Xf(zf${~91bq}A}0}=4b0#0JMKoKp%WlzV$X>Mu;oa!NErn!nS>t5yKBF@|1Y8W zoaczFpsH%R=If9B7!6}dss6bllnf#0C&_r+N7)uaCpZzkSPwE)WF-e zpJGk;3YW{I9VR+wK5I*_Vi5U@awrN9D9@3wo|g6{VadFwZJ@v+E*H14)K(;N?$S&_ zf#bm1Dih>vRj6J=nyp=6*K`&|BYsepe8$KS=8r`pWTkxjU{Af}b7mU%K5zlDWb-W| zwuJ;}!Wz%v5{V9C*`eZ1$?3o99-FB0+cGq?BS zccW+jxn8XRPU`KQ)XblzFVSq4%9h#T-6A1dpJ_>W}di>svOImo)6q>b**j2>+z7x^ppmGAb`i`i~~Cd|qJC zyZ~VO002bj16t`X0Dw6F0R8*l29j?8z}x>WHV(RTV28N?V>awn{g5?*e))KD&4zA>Q^KeH8mFiC1- zrGHLtxEKW~bSm_iUMeNDHf5Iws4t+zthkOf+1_I;@8tRK0S;6$m9vl; zt)BIk!P&f@yRi-@+2}CBStwhtq-_@RXGN;5Pi$s?M|iggF_woC|`bRzQDJRSQcpo2z=suJF?Ul<_>$JNm13FrF1}uGLG@g!VhF-v%V?wuIuUa> zD;}g8K*{iVseJZDWK1!g8x?D4B!G47s$G;s&s3gV%XxY|hnt#ca<}VKA(DlcE9$3N zuF~Dg=4I$cwcyN|dDoTNX)^1>OPS|nXWUt7j?pcoq87C79T!!@3{&dfyjz| zJq`a+LWDnZ@GP=fDkiJ{vxh>du%yN$$9g?PC;D!DMm*qX!R5f^(7HYw^4(rUs1~-k zbOHmhVgK-?ZSkr~Xn+NtlU90)k=6?@`03QxePD%?ZV9&-J0EW3MHj(^ogkb%MhiJ< zsqx>`tc zsy96SomA(HigE|YNs z=T%`$>CQh~e__`=yz93hQ zJC9|BzWRubsbv3**JN~RktWd6@I9MHHT-Os`H-ZP%-d%oV)E7Qh!IJ!vZiKh!l(9X z=c^4D&Yu2u$=PcV;}|pz+ZRb=`*YZYO2&pu#7u7oI5OpU#yP~pDs(fomn7_zRjdfw z_19mXSBE?I*6Ao}3Py_Hn~1H*59!}pi)Dy?5Mwnj7G+8cMvB`nZ;19H^JHKk!(h2-Lv4v%4G@^Y>YCkIVVnmueg$W+6!okLMVRCMsoi=$lVa}=f@luLV zF1bd$$d(RXC|qB zp5QDwlH{V+=%pF|zweF%0My@-C=$TvvAq)FnJW+oF)i&RVt|(bjO9z9Rj&z8Wd2-; zQem7&Z{I7fmRV^5 z_ZCK~wSca(Y7}}Q?3KE=nwWX7oSJrVvD5#|mAZs1t5jdorpFc_f~k;mhwhXorz%0; zmt~*sID#@HL2C!Jpvz|N@{S`ojg*YQ;gVJ*n|^jkCxykW5`|R5lGzqry_AMvj98No zT_8)%e1?T4;`PH`GvgrV`jgO*+qDbdm%>P|}W38@*jr&1Jp(NbU-V zwh)YXjgzfzljS>k=K%3)FOaF})4&Z|^4yw&x80Pzz8)vP`&!|IK!5;_uZLDMP+i%@_4-Asf;8w?z4CGNOlO47y%bQ@hM9;wm|O z#{qYJcT#zoH5;xPaB2DA!o;l#*{JZtz{aaxR?RRaTBsJ{pxuuG+U<^bf0AXuc1u(| z<@wRvGNZ=EBc{d8quDk?sPCkIC{|lkdvs>6vfL;pTrh)2;A#?hx z;2F?a39r&mZh}%-jFlE82`jZRsU@a*<558J?1p%}(#9uCa`v<}R0nnTO1@{fm+yL% z+DKKztsdB`lKc@uQ5F>Em0vX~B?kXUCGu#OIpOw6XbbHfsI2)-u=Eew$|8vtx$_kw z@j?wAwcvifM1Si^licFtICEayEG_T(HNq zC|&ernX+I#GY3HMI$xgL5$AX`QJ^Q*MxoZEp;&2oQc~jhiRwT}3;P8C=k5REWd5I@Fx=2_ zOpf3IV?cCE^6Eb6Pe4lXSZFC@F+oc_j+hobTpKv|@||K{b9 zTM|$-P)s%+_SnCD-9wX`Y@{@xzj0k$<57&7)IH$Q*=5E(fY-9;C8ea&V+r{fyfbHynMys1M#kXjQuY1i zJlYVYBo2bq_P#Wt za;nk&RW*egTxIw=&}3YVqWxnB2|fp|ur^av^hzCHOIi@`(#bSzK7InW!=IAlawUYs zX_6S38vCRzo*L0~OYW;9G89O^xzonOK*geMv8+NT$eWCSq^6%2=29GO^?T0h^c0!4 zU2QXcZu%>HC}I1YsnAF|#xfXjggu1^GcqEtXI~yZ`-KCaF^FfP$r-Y~G>}jo9T_&* z1z$*0%Tp03Brbj|H1a09GnjT|$HBCa4hNmUGoy&8Qrn5|W`LuZ=z^cxw z?xhbhg2Tv~r%qql@6ItjkiqC-dzu<)!ka}%08Ew3bNE;)r%|-o^M;FH@k)o@NoggU z42A3qG|*nX@c(ft5pq^fAedD|uba`gi2^H#|lMZf^nDZvhxz{s*zx-);Z@{NjxP0Mq~g){Eb(F8&jc z5Dz>B6JXgtf1dDQ38F$TYm-yv+xxAjO%2?Lm?$guw4lykLSi>|jfZL?1*of`ca&_K+krJiZIp=|Ye-cqVudnl^T68PKOp{i>RF@6M<4^QdnQWY{h$PaiCe#qgV?z*-N6|i!3mmv~j^nmT!)4fMXGf#pNcMdw`DNv}l~dX(4%6gS@ab z5%b#;HpcL!7N(q(rAHsb==MUNz5T7f$7qX1XAeFD0LFjC{ePzg@P04B`WIxPmq7hf zR{y7-6Sk}m&+SR5)}056pf6!b>+l@2A=&zksY0L zQPmgJ<@5q4Pysna;;*%;qPJ%pHYO&85~0djQgxJZCNjd)U=3@2`mE?KuiEWJ* zD#KI48vZY4fV6p}zP7&2+!-Cxduf~w?K|f<Q<-QF!51= z85w~ra#(b+u=gETmazsy(J*CGqugM8PaQNl*GLMwpaXTzjdhr~OmeaEg0E497j z9cI9Z6-TH_4^KHz`Bk1-psu>Os}(i+bal3TwiO$`eOZ1dy0?HWrWnP_8iSSGD-rNy znX&1NYXnI%4bf22&^Hm;F_^G5;c%|-SPD!h1^%VBZ(X8o>fbi|mvaA){ip}TVQS~S z#CV0(IrgD@m8Z+O&T+}QNO6)1&ZN5leY%Y45XC{r^FjHTJ+{T_oK>JeGm|=MRaX9D zq(J~Riz9$B_u9j zJ$#}B?A9|YLy=luW~oKZ#Pj5r4k_FQ{Z<15B~R}1BSq95Qd07PW_Y#MT|Ut-t8cWG zN{(!-0@674t0HjG4z#w(V}XT~{0;Wj=6oEa*^jE}TJc2wUTu>A+FU5}M(?X;Q|Q^! z?m}?1FNCJqY{X!&UBY4f=RJV0zD|PioApiw?2X;yweof**mR(#wa;EQEimZNGa}P;@t);dWB?&Up4Si4!rpu$1YbI{wCr^~Lm<>dfDy^C*xJqnj z*c0ssf+DMhKZcgP1th)tKW3Z%?}VwbyfJ+^1P-M3=(s2iqZ>q5MINS})0aO=B5|SS z&$j+T{OyY1^ZcJoLu6kds@`>Y8anHS{2m+KRC7FrKtY$E=gIl2GF*N0syRN zdqqEC4AH(X+D}1mUu1YTQ@)Qz=Do5sNDw)2W+H|gUGh1A#+^mw^Nb#bwIE^BskyH` z8SB|UvIwiiCvgv`H6 z(Ptl8#^s)#zvDIFurYra^^LQkP=|zVTS%AjKqT#M;hB{{I@uWmlIC#~YY}$(T*<_> zl_NuMRg{FQ&1Ths15 z#)V9W=w&7nVPL+kx&3(TImeI{e|2a6B1EfCP#?w?9n1+E_}v z2P9-p3oAC+2_+_aO}I)U4Ubc(HT%t95h{I1_6A00Ql9t;itXg=o(hRbWtWXZc89*g zA`hlOt*ImRZ1j5TQwll5H;w*Y`BA~k(b0h&vtb)YEF1l;3B<=QtKD5Tfebm-`W&(f zGp|-riHQP;`deb&dqB6uDV{3O;iN%7x60zkDg+ma2uusWP2tm1X$og`LNyK@80C|v zYyaUA{FPTT%ljUX0vov24hXvxAGOaA+h1+QGaU7d>UQNy*oc#ZIo*+17957e*!9vT zjGxGr7K%)DJpUy_e^%`#(I7`BnMuJHCZ&L@?!aVOZ1L}h+)*!!4|0z3`NlGWAG_PcuEYvliaE2v5gm}jjVq7#>{r`% zI`;sDh4UB?lJ1&KS(yRHd)}=WGFivrqaJnCShygIV^PRzXvb1(a`VY|y`}dq9PNJ4 zxM$&g)P{da*II6MDh}??x~{#-u!$*Xquw)#;~sP+M$J$AnMVZhBkig?yNctAb{dD*N5g%2dIjXv=-&&um|5Hm+!-+J1rtL-i8D_E)$RZ)xQ$HH>Oe1J}LFd~;?hZx`T}?u{H36VZ`q&4=&( z=&QgyX<}O836{UK&}njLAC+?Tvq&qQR3SdqU%ctqaXksf7}CT(vW?2TV|mi^Bc=bE z1o2~Xiy{WPK6F!gB9k8eZcM}6RZoPqw9vM_pvCB?Oa&Fqqz2VL)M0CP?2!hyTo`><0E#sWFtc z-2-0qZ@O=s@%42SJ_>&{qj`v|mK`YY4@}LQT3egVl}QT!K!xfe%Oaia4c-8bVlhem zc;X9Jg(j|gAMhOuEQCZsHxJ&K8lT9#L&#ujYCdek?9DPSan};|lcHT4Asn9QBGTH? z(p|g^QY(aa4VQK>aGW5_m`^gZKVFa(O?R$OZzMnPrqxp2UGCVkMe)^aavK6q{O7F) zTDm#!V(^14Xq)HmWI_t@x1W~)a}G@+6}X~ni+e)^GYfcMV_y`i=haS_|DZNF;m&4? zy-ogoUo3n>N~e$=w!|FHPV+EdNt*l$iLdO0OKFN~#I@M${IJ0>x^z3Q3yI@6IWE`2 z%^M!LQ6TJ7>9+nMV8ZYju?*BN#AF}1hcM=f3fw%`;F~muq(n}G(Ewk;Em| znQ?0O#ux5WDBh`u*xdLDlUYvu_=-e%SUjEf3i_c2Wiu(tr{BsOyO8ViW*}UqweHBQ z&AkU`@$rh^mS<2Ih-{~P^QtLul%m{Jr=tFtAd!1#52oR!$8(R7VM!6{aUd>|6#IIw zeX+0`O$+9#ZGW0m*h~1-1y8>K`$?H#$3}G453`6nWrn|QNie(kIrxz`hp$*4kS3w8 z9lU(k!}q{9SzS8lsrLS)7yM3zVc%jEJ~V+=!R}#7^oXGE2~?H0oizzfU3~3=i7iDf zfhaB{)L}I2RAqJOK+2asT#S8JxB2-;*AS7HX0psE7tNm&^=-GfH>p7r!BQRIhdR=1 zcK`&@&dvnfYww4bVG~xQvb2$a8ugVCMGD?oc5gOvV;iWclfNFL5tu2G5b}~HBbeHW zEkc#rLBs&*TyYaCy=$8xA#tv7qW%#Ev`z2I5-19iQFP}!woZDs7EI=DhOZ(1wX}Z+ zb#4J=LQlk#7aq3~@zQ*A+kD-RmDTC3^$o30`zLKATE(Uvw0B}v_}Xph%wSo5R*cF_Aj9)rccrG@i8J{-(-7Mmqo95$*0^S} zkg}sdFGs_k^>!1kS>>{2miYCsmW=P+(8W=E)*pm6MTeuGe)iAg6dpy19Igj*BxtLF z#Pe?^<{xjw?FCB}PL8~*opz&Bj-N49CEScQ=sx0IgmSmXyH!O#sF}15_Z=&xfox}e z!fMqv4=oD(n7U6BdLS5c#uF=|z&@V)L^^;4t_l`Ns5hKAFbK{+u86OhL9ke>tnp~& zz&mn`m8jXa)t)!APC2tED83KCIg9iykCIKgeU#Y1*B`U4(Lg?&vR@Q5z^aaVP!KstK- z?%=ewp~VvJbB8_1dbgj;;>F}WfHo-ZJKm1Cc_9sG$^2JU-?5y$i-mUk_TG)HVAcmg zCp(I&0dLqlR{pGU~b zhlf?laTl!2`F(4RnDu(4@r0)!=10QL;70zg&&--$u(3n)<2S^Us_rg6DqoY|gF6&0 zcZ6er((MAMxDU3gty^V7Nn&&g$4q=7-j}oouIoV}=;@JLMTQm_$I?`)>L6RH zGVH%B*_owvav~`u;Rg}jID(XwQbj$#a*1M5{*+TyT|Tc9+ozbk;h|JrsymH8A?el2 z{kgX8g#a;T;$Oom7);5bN9kKtl;`Z_YsTTDBFo@ZeKHaohrKn+ z&F`^4HM8kMOZlaQKhlC3V%01p;A(%R%(fk^$DDxI3*u6&Rm|#jB2x)NvM%Kp_N`yH zC)w)L)8t2+>Qj0RHJ7KRevft;GfRqzN@~>gyhKgNOGqQCn!0m4BOmeiQufa?W)OKK zrG3_oJX$u1g-#^oB`CQ~SZdeBaxR~p@>nvwh$pXcmlyw;03y$64d|(Qe)5tTdH}sj zeia?STvYPf@|)}@H9{(RG3VFHY{hyJMieHGsf4G=3g;|Yg>0<3OPxT~F`7@t9Ji*k zl?sPsk2Oh6ZjD)``=HMC8c?rt2RBPIag+k}S+uqsd#B4w2a}xQUyRIiQMKctY*RVq zX@{_cy;oLIs^2q#E++IneF_er>B6)P6oY7-@M^=%y38U)L}Ma^(HX~aFA)>Unv>`L z6!3}GO6P`RPil#zTp}PuX{_GIcVxH9jyIu5de4r9O+5}OF;6#CzfhESfr+Ul3b_ChNs~Gzp=*T zt0 z`9z&@Bp1(8*2M+++}(R!yZdR=K^%OxRw1h+R9k*OJbO2nPrY(Q89r5|K*ssp-(HA* zoV}`-ZV6<|Fhg6*w|+!*MWwVp1b@zQKm~I>l0is2-Pi;-}V*@7m%e^#-M!c4Xw4 zka&T?EajaorkQ&6YWpN_igKlOT2etLLGlLntr-8S9bFeM6!QI7DX+}3SOTpWKX?9yL4{gD%XSdo2(K2%%S?vIDmMF~mp?7oL(&ZsLYTT8Pf9hjwA3KQ z?zf6=4*AVHK~Ralw$rV&snxEz^_wU}a<1uD`v^$R0SuRPc#_-*N{Vmu$%1DEaWS1R zs9YBNewy?N`U|tzm{N;}%lZn-F?3O^bdT7x(z(qd%0nBWj?IQ%$wl)|$l{Oz~;*+Is(AN0CrxT_Hx26Z@!jI*H+1Uyl&{SQ|Yc? zE*>PzKSP>z+f4iMOP2)-t`SFPCoh;EnIu{t{xZy+rZ2k5YhZGx&r)n4&+>yIO#;#% zt6;%%;p54ZX44c%6nlx!!eO;lF=^tEi58-VI^1Ss4rZlRS-po5Ph$t_ISeQ9br&0o z*QF-9dvqC*AlJ5$ueejOW^muc)0qxpvyuD{w25RL3ZlMd%|9rlEejV+!Ky&oiTAFm zJSF<>F=|d)qRTDInS*L2JTl)mT2Y;=-6Ds{EQUuWH{X|xQ@|a(CecGDJ*!5*VsE3C zzRIdiaa)NYL8MpPC^%-UH9<8yCMD4{UU=+BQ?!NvLYI%OWakqqau*LV*ENMKU)HK|Un&)q zDH^+2P+ucA+A`AOCRY$YB|guI!VYdfIHn0U2sO zS1x*V)J@yg{r#wa+TY?Pq*w13`hy;5RZ>*X2wx-zOJT||BIH==?YK?Ihq!ydIy%Ue zZ9WHvkXtGHwXL@{3a^syYn3*(!Kd3hx!)fSx*s#r^wGPz2g+l9a`BQFpeMlM(AOOPdSxQ z)3scTEMG|o@W7+hRyBaJwb6a zY`fsW$*iK>W+u_k9$CrC!_$SsgN*ZN+obDqQ1fOEW_|e&gC2u_JizOr)&%INNjt{ z;+RHltq<>{Uo^{Ib4GZ3Q?rWbz(V}nY@Xk&{iN@^ZV`cy9=H4uY5{K<#=|A>No$&Q z8xviuRzz(@Kii?DBtt^K+>~z-qCOo|cRtWJc~QmQeF3uzZsWV6JyfZ-@pFe@ufu0* z@3;<^QvIthQ>#Oejmvj7-%xyVMZ3Nm>_w#)$$JQ$gQu>7bxU!*5gjb;%MiZEi&bF% zdoZ7mR(kJz9ob{XfY-05Hoy6Vn}y$qYv#X!a`=1QGDKboTE5mPOqPnO{!sfpI+*Pc z$rmeOwR3GOAsGPOVKua3^||)u&f-8qF8DPpB!JxJ9QLM+E8GzcU=}ZruQ|+!Ua!IC z_QIZJ@`wFHI^S)kV`uIF0@dTuY1q>3m)l9S`O z-rNkE{VABB>;xO(!fFES_K7vufyioC94E3Gh4td72ob%WeJmZHnYZaeUpz5HCS2az z-p>sF61|?c0M%UYxe*7A9al6JZ646&B}5sR}Gi5=zvrzDYXe@hVIGrjJ9%S&rD?_n@sqRZ&mX|<*asQ zglwNux5x}lgZA$M@(pWZ&&ad8`VaZJ!Ibitiw(B*s;R=^X6~AzP2CowxY8{tARgkm%fT ztfJq-4$M4g+|Gi;x4k8*cxxC3ADLKvle^=w-I0ofu99q+-I>;)A?tne<#zPHSebmy>rL{GD%f$dfn* zO@3G%&H!;ETq_XKZ{;e1mE!Iz9@=vNn=3OZxUouI&5d`p;4--OBY z_4fuN8J0rVd3e5 zGPglzaS0wrG&Qm#cA`X`zc}t!!cl+5l~qb}dP^t^)hh1A&#=zr^Rir@SufN^ud`5I z{NAcb4UK%mJFQF~EcQ^0vbW(_Sa51Y(4!-2sRv$?-Zq>7!gmxOX<@CD%E(l5d3oIY zX$3@MdhEJ4ZS69g$@>Hmf5hf!E+VhWwQa_#$9v|~Cm`Go$Sf#L0Ahx3O;la^t&~hsan6rR5VYqie6hvt?&Xk!%u4@=I2P#s zF=u*|{OrO_Y-woHBf~elKfxnZnhU+WlXgS6I4fHr|Hv&bEt|)vWU^=M=ixPInr0}z z(j<2bDPb3mggit{_Ih2l|JrfpUkjipqT&UXtGXR7^D=Z6_EQ|>lzsmQ6EKnE8|VP% zAM4dX;y~odop#FcMOoqW&MwydRQ)r8`dZ;19E6Wr{hi$`*t6o15SE2@#d2X&puK7~ zm|M8<=VCNtHvI7hFPw&Id(lOSuy9Nb1=3R5mz>mHHPO;n|9^-&>#!#G|NnE29zBSt zw6t`LkPZQrW|WL(gl-HNjP5=vJ#xTCBi*sltssoi-64z?kdhKPzkNQ}=X?G3$Nt@} z`?~M<{dzy+@dk!OEpLrEPoeiq7#@0tvUOjAU;+MYQUe)!fcpYOYx_d<(AJIi$KO4s znbb(2c;U!?v+dIN`rx4u9>TQe9T1_~s86gQtR)2#;%^=b4dE2as z7{!Wmb{6?G{zID>0rIs4X&eRQYpHc_qLq5=+r{w{B`xUsn73m_s7eJy>+9xH<|cI3 za7Gg^#uupD~4ibY!G9sw-VAx4+Cql4kF<<~-5#?l0;|)gC|IhsdY}Tv^qi zoq*@S3LOx^B zMB|Omqwfh8>J`xr#9V#MBekOu5z(DdEhC82*)clDxni-Uf~7OXbldgiQM#Lp%lfrU zYj0T=WUtD4^h}|>U}XeDY)n4vu&?SE1hWMquOUpO`A3n^MMON?ndhBSK{oty2_w+9MLOjE6p z0N~Pkf!Z=9uxx%umO*gOFW&em)KRoO7nJm--U&FjJ7$m+`1-3vj0m~l@(+T zTTFs{L4y{kLse~MwS*^MbUoN~Rw~9UyEh}s%h*1$bGq#iv=5(x%WufjU#1G5)rnC2 z3YtyOM>!J7rB2jxeFx);gglUehY7`b1D9L|5t&S}#)2Q_DKRPa0nxpi6VO4@;Fv*< z(euBii9VI+k)3pR@Y_8ZJX+7{OtPQUPON97wLJ4%c1e!!pWF4f*DdJFV^xyHw*vVq zUMBICy7ss(Zng)>n2=^K;n2^6&v#C>N=d52!Q6F`TadG9Dg*na4&0+Uy;}=@+^cup zN!Ni)P`XX_3;n*uS3(F4Pe_Q|^O(haQ8x# zSf0lzqSU%j!SwDS-?u64g^!h3Bjlvyb(-^d;Dk`aduHM)zT`YVG^ShpsHY%1!!dFk zi^W=!W-Xrj<9}TQS&8ju8JL*w+OPjMC17K73&c6{M}^TWaX0y+6=El=lwqy6#FFpj z4Ka!xZH#HnA-Q)0+}FZ5e{<0$CTD2xzKpnC<xXj^P=1GvD9rN?{eKO_`9%!I!{q3P03)ir@;b# zwl%ql7lpshuapmJDH%^-*%o!^oBtVa&0aFCj@vzkSxU%7_u&z-!wUcJ%A zah*U9*=EQi80FXwTcm-J%`6Z!+<+cE%5HL_wMR#5lssVRl1FKumCNdt;zE zZ!W*e`(yGF{+&7kpKhgVOLqR|BZ;rv#K=fT?um|XGx#Z1Dy#giSGzjVqoGnD>}sHwO3q{5jO&cB&oWX7*+xqz>5`R>s3Zvi#rmxsBW z37Cf!)5O$5uA`c`;h?9qMF&$!t0}Hye%%=7-u8Klp4gztUb*`TB+!T5+I#@R>1%JE zYo>O~JJGPgO}tw6@U;-)y8O)^IO-cFKc7#;#;q=1$r0br@&&^g=4Th^bx>|omM%)+ zpRQ8oc39(u>;9Ll>`Xc4)%Z&cziThMn1}&U|IJZo_#RrVK|wc!xVcd+6!UvLKGqtqI2WuGxzX13_a7UR45m zFBu3f!5o`v0o32hem!;p@xB9WXR$pwedM>Agk-3}Cxto*;lKTO4hwJhd;1$IM6#hb ze79Q7x|E|+^N;bPatf?l_9z1jOAqZUw8P}@uhW-mL)UuM*|btrF^$JCWEY`+G#~XS zQv}b5sne6aatX@pBW9BrNe`zKs-}fpTOb=Did#aVYZ>uf_Do872ApP79e40r?H)?@ zU)C<3Yjfg77&C;g383G)`A4}4S9+kyFQz9~F{63%#>RiIcSN1+bEbvl&G5y#cB93zZygPv+)Lor( z_`Sw&!h7z*uQv{T3qKZwy0@3RP<`HBGiCeI))No>zLwopmRxjH5G^ZU@7A|^Qi3=f zWeN$?|1)Em-sO8yh`6j?Nq5e(kOIp zGaO=aApBmDv)IQDzYrY1w8u*f3uU-+SpRl5KLeNmz83A;!cxy_x}Cqi`}TvDz-N)I z0G$VuIxcpi_ZptQo5om?>n~7wUuXOHU0d;}dWAp;F{{1E#KG?UB+#vR+v3jC8%eaL zx{_yXZg6#chcH9t{KIBXlPTk*d_TxWT9AN?0VXTMYSL;r@>-$yY1<{}2dQLyFW048 zn{wuJW>~y-Zja?c?C^Sq_QW|qVeLL$|5P64(QUlG>)igFmpifv>+~T3GUQWCkt{5HXOa1TaBmb-A`Z`V-rJzo~w_kKZAHdsE;}9 zr)*$u->dA4sJ9Uany|H*!VGvp%<(XbSHR625vSjTUAdh19}daVPY!Zf@TG#$sZGRD z@Gr;=dG$5|Xj|R#J9CrlFhGsDste(axk5NSgpAy(uUPj_@F81)Aa!>kib~SNg28jv zqfbqiU+FeiVqpD)hsmh^pkHepsawbSur(^@?5A1nRI0Dc0;SN3(9H~2ham^?;(R-n8!YUtQT}i-~>@7q$6{l6`mh669h>i6t3a%XaQlJNz zXPm25XNwv}YZnV^pns=_u(A|Zm8!o`SFGmYNLRoY1JM*jm%#z7hFAbWauQ zP4szzkk?eZ4Tni);F*l5W`3Isud`?mPV$&2+UR8A8z1H_Q3qcNe(3+s8!_qjTLQ** z=j*Pr{KF@qF`#-+0etDMH9xGc7GAr&x#v-16z@4V-J77NFLnD&Gc+o;#>>#ZoL{(NxP}*xjo|Q3J^}6EzLzQ^Zc9M@^4%OHZPl~Qw$`xANrND3 zQai?wdZb)pZuj#t*6x62O2xz!vhP*>A#!(4Flxaib@Da&jTZe~NJ?_Pz2kRSTtgf$ zH4RIdFAfF(Q^7v?lyDEUR*fT)gU8CH2gC`sQQGT2pbbttoVsGIr4>aeK+f_!*hgC1 zWgyee@)TD&zR%!p`9XXs%Vi8(ai2-G$983j!8e_)%$Laq0uV?? ziH+J_FKcLJzIT5GIVB^hV>DN$OgPEK287e|N5*$&`B9tnp(QQQ8};cfvU^PBvD9ab z>gj@#efeHBn(^m%OukCN{GoN-k}6RL)Oo>SY0Qp9ia?qT@k>bcX1&exS!^Q%dXnc$ zjf!Xy6^Xk^5kJ)X1_6s1oC2M3R1GxbHHc6CVLIC^eY&XqB>R*t-XxTysl!}kZX5Y+};{Iu%H$uFbFQar zvA{W6Eud;(_Ckam(%67i+Kl)L#mB8(M2)xgH$pBHQ+N&VX|2rtV0C>}pf+qlUxfkU zs9rZpgd@yf&GZDSmGiJeT126o2Dr|MN>O8rYE%msSBZy-@ID_L()=Mh<#>{+$L-8% z*8)tPxJ;I>GYCWgRT~^|&p+*cS}L1l5P4J&we4PamRBRhNlNZAJ8?zhF4v42Ma?E^ z*_F%C+2UNqF=yiZ)ck|xam&=QQ>O3A-Yjz)-_>Yvy$fqolbBS$wX?e6@leZ@nWS2; z3iHcQheT6HLhMYaYp105HIk>#B-j+g-SR}VlA; zBV-AcyX6%cRrN}}oyd1;MQC zX( z+bH)q1fZ6*&{~sA)q$DKuy@087$!TRygqFR*DHQPi?~?IAvF-NE-rrfJFh)^2bv1ogfbA z(k?4Hx|Zbk<$#D6ORZws*jz;>)6$K0C41^UJ(Pyl7xF%(?H3z7LDmB2yMbJ#>dy;u z2?ukR3rE2pODp|0ejD^(-n5VKq*wpeo5jx6K@C45mtU%TSi>hZG*S%9Dk%0fRroe8dO<)`LKqG^;}HyY6_K5E}qOe&H?7&$e?Rgw?q$f zjDtyK*s7EzjApbe%!Ba|V25Z*)#YwO6}3?Fili6(t!+w#UI-$=^i~BS5B7yp>0po}?q2SW8zvw&VNpdpJbrvCx|s3@8?QR0MC> z-8~$=H=UE2i&h9)?9EF64AYfmp0fM=@EjtH`&{fIEzV20b_G(Z9w+;ljQ?$NA&~AV zKv;69P9!5IMXleGk&zhF&qyuRf9@jP_s7j$=n&c_ki{b%s%dvtX*oXr0XXRAD)x+z zVshXq@oBHJ0HSm~hrN%TNOE_|fG_%fv$vexL$asGP=;*Z*#>(g&0fy!Ik$XEx@Fg% zFBpTrU7Cv{ST`GCYm{k6;ERT^UnOZIb0Y@uyY(&g@5ARV#oWZc4tq0e~AuK zE5Gxr7p|Au=;?xF43Xl{EO9`xjXIy#_^xAkRt45JNvA_4P+2~jHU*DSkEYke3P(8- z28s+-AFZoV2)s!}^Y04$TO+sN#&Gn7+26V+pi#+bOsPw<}b(1H6QI`kue7aAj z8O{*g`O^JG=L}Q+s_~gL|B_7-Ih&Z@ff*_2zv{EnaMQ)F1H$tcinUF2V&)QwsxW%+G7t5BS#P*%Z#ol`q?Y=7NmbLRt;Lq~NWtCtR0{x{yqtY#?sG(d^_sBtP!|Qx#I`Wq z@`St7j(Mu_K>q5EaD1;>_}XJRBvS_9Gf{vrt|qs)af_(VDzch zeH!I*a+z#CEN7h}yV$;hTuknhp;bRTv=HC8ztzdw!?)^55dByL zw%3X^4#>LI3d&AM@D2;kpU~jhMobL$@l9K4JIB`uAw82%vzUl2Mf~-vUFC8w*{zM| zuf&HeZt3_ab)+2Xbrd*HO?l{v=@TTY0cYn?3>XMQVrkYZdCKT#N zpGQ9X-q}4o(;IAb4j>3*g?ZlFuMVW^Q6UZx(IUg`;%bFITJlb*e=^Av@OAYf#&(S> z0}j>ZRMq&esX^MIr0~u96Ph^`j+q3A5_XZ^+i4mNFPduNA7rK<@Y$&v^sr1eN!Ru< zEVS?k_Inl@3zZ8Tat$*oZKidv>XdGk9?Gnw=m^+p`Em^NI8R8wtr+O}?i~+A_iri* zc_REhKRWU$4Boed(aHP(i>Dle-<)-&shZL@E+0mNJW@6`76a?3tp>SG`P9n-b|a?c7|Ou=U^!l+ zei4G2IaF_OQD6WcGkvzNVx<4ZBDimi|GzcoyNSTVKNPvo$#^qVi(q3$ypkQr_3D_t zCFs1LGszW<8S#iojwxI%%Kr8KtzoPU>{Qk?JSoCjAd|VeGnKpJV(D;6#GG>-HTNy3 zP2p_+#{aiWbSi6mhc>mraX;O6k* zn%+PMJmC}Th~L#QK0=isvg`(fi|`&yd1a~BxLQp^Qe7HUxWV;1>Mw!_ZqK~V zX}WEZ(?-)|Ct65w-1D)&6CW^tivF8O>HzM|sdh{4D0>lHJs6dEwUxRK!kucp z{$u&Fs(!1!K&*v|jy6^hqPU+Cct{yiRQIOb)=+jnNp>~Qa%SUl_<$KQLfa@-(&Q=a z1br+HPLR|#vnb;s=UL8`x{Q?D*cuM#&q#qy>aI*T9dvC4bCh`nEw9tVk~3vvQ(q9k zL8KSDxWC2v&9C3kp;qNumwC$Z*~RFEbeEwZtT@k7g^)8P1JsOQcE^^|tA$z(BtosF z;nDRp$g$+D*@EL&hCcRpzCsD_Ad$O;JpYnKH3*Q_W>?S}3HEa9oW6xB2<#U3f|phA zTXy(liBwF%f0FnARG_dfiZ|O__EBK*7Moo6=Mzcm1tZ2cj~|BVZAcT^j=3DP%^u8m( z$2WShrA}Nn$Us?Z(WlKHY`%`|7XC}Nnb$?9eH9jHs0`+3=)Mwqhir3bZp5oRjFErVT2{dW>m%}#=G|JHrQ?K|yS+fvg| zgFOlVt>Ck-3z;2ynyMHV#v&Bv! zVNqv+B6xt<0d5I&Au!Ty0#q$cy6=GF3I6-%())B3Lk#r~9>k8@!J&tX*`SbuHp}`# zXt-&cyfsD%uHkK`r^7SoQbV~S+Bo97PRn(%pkjJNc zWL9l-e!qnd`t!ggiTA4z22!UKoJ-x%qK-(#1}=4v-1358p1#dxIF{b;f&^QOoUd~8 zHtBT$e;I1yy1G$ex~uqKSQvoTd4G^tNl2(qr(S358iI^~k<(Zct+d`B#?lu_Cb~u# zxTGmej?X1#vjiucOVy7)sqYwQU;#^Odi?~|sL&|nZa{&mmivab?xOXP^0wnUM@J8- zwf6FH+acxT`(4sq&~5uR`RxTmri2%8?jjcp{)Ns}mU#8)Y-`bDK=z<-YIq>+rZA#{ zyNv00$+p~<>rfl!iBdVB1scPslas{zH)}tRr2a$3{PsVEY!ZY@lj&Ldfutl9g4U>Q ztds<4Hc|^}wz1MpLak`NbUa>>Jue|e#_q95SsygmjAu`(B^Seu=lj~(hmrSmRe9V~ zCg8uaF_9G*P~bJ2{T9qs%C}RxizUFCod+I}xg=W#24_5?aW$Z@FGkK)uv*mdG@q-D z??bzdhSFY`IIXHCLG~r7EMRHNDQ4LsOhU$UY3O%qFMOg9e>=2-c=p3Q$b+J6l!&fy z{W3bJ`Q3pSg!`eHsxhZ#?U)GhK|~w%*GYhCVotZTl9YKS6Lm*SWLRmY@^~^SW^0ruz1#RI)pz8h zP723cKbC^$;`6p(X%x9Uc8yjP5Jbw}wmal`K> zYdx#p(!r^5L6nHnT<_vP)8W8eEyY$(2eA)R{>tPbC!?uFM^o)kJ}mpof+6t1POh@W zC;Ic?JQo!#>JzU;b+6#6m%g33W+ZzOA{Q4{>GFlnwvBq6vvPEe-vxPc&M%0roPY`= z*8rM$p}rl3B*>OfHif{Gc_p8U36_|}yuv2B3XycgSs~5by%vB_Hr)!*7G~Ofxsfg8 zF;~LX_#%*Ycx**=qNP>6%Rq5xsd_v*gPc?0Hris?C{uswYW6Eac2>eMhkwFlIiSmM zXV}8(5qf*1{i@U=$9|^%K;4SrOg{H9K)70FB%@Cu$#PTe3I(#0*4y@EZhG2;(8&!? zcBVjW-cve*A0QpO$Epk-zf<^b5+?xSPg!IGVVST&RSNGl|H?~T0Y^yM%BQAuq(cJf z!1;4n3I9(X7JiG8ew_lnLBr?d{9itqXwwn zzP;_6Y^U@O8Qs(Wij35SV{+zXAoczv}WE^A{%$xsyG@yN2npa4R(doa240^$w+!!a^hJw-;jN?(&UDf7`q*xNkM{fo4^z^ zbhr&BZe%$hUOBSH$Zu-w9J0RTQ$0JdB7gk!nEgq^fSf|_hv&Vkwo}eU*SC$H5j(4% z@sxTAX_xWBuny3u3<`8>x4b&Ooa4)VQDfMIkH9ANwOHcHTn0R7W=zq#HA%(Le6wno z*q{XWZQ*kOdLK>>yxX8k{h!pw|2}triqDBBP3FP#&j!UR?BtVSm*OH-=YYB*oV;)N zb*%fSkhs>%uQhEiG#;&px$DIJ_Z&H-wcJGIL}|sTsAGq za77d_*BDNJS*ROyz)lhE3wvH@j`qqNl<=x*AIqrA2V$W1%KGy%MLTUQz;9g!#HKP6 zP%y7m6(a=$R5&dy#x6WKLMNhfT*yd&C_br_T4F&Vz zUkH;(eaI>+Wsy9N`{2pu4uHQ-t+e7EP$wdy@9W(tjK>?q;C1aYs=N6LkcUzfws}Gt z1zvNw7*=^@tt8&C@~uYd$V{yI&N;fL3j)8x1y%+?*f#c6<`mSTI9OIZ=+JZ1Pt6T_Wf#?88qO(*&!T-{G+CF;bOgsI6A5-XKPm;Y`*W zS^yhXr7A&VGPZoGjpu?%yg4;NcDX(amu$W~jMH06(=}VeRONLxN{k>rR`Ood<@hm}$>1!W8rf_b}+KYzncy%ffw$^7(g(&kby2K4$aQcU#xb;gTVLyzI*(;0a8iw z;R-ckmXkg)juq|%vJ&*dc@$#~#Q>bQJnFM-+A&gQ#v7Uo$|(*d0(6Tdx$ERrcHqNJ zJGrD9R89?-^%*p4sKmR8opgVveEv@p?LRmzJrcK$B*jTGW;{&UB#8#Zequ|>BmplJ zLTWEbyIn)K@QogWQ_*`}hDbHuz(E-gyi4c!7 zZ6{Q~@Huv?dP~)#Sh&31YdAJp<;x*N9oCGS!j#$K3M>MYY=(}$pPj}82Rn8)djCw4 zjJGE+AuO`KE6f^wx~1ER4`<|sY>v1ZjICwhU7PvXN*hcah*^tqYs7RS|Jh_={P4sG zY(3Wf+YFpLdjsXmj>eN5sk4*16&+JoHlav8vhPH?eq(y9ih^ z98n;Iw1bXL)wuIWweH>^=CnP*)iyNj%+fj?N(RU8c}9a&*7s1md)~lZpPSO{Q=j>< zptppFS=&_xj)n<60({F^=kSu2`SrHm{@L>)>d^4`CQi6PP-!LK(!Kt2Wpo+f@YOmM zkc{k~|1DKyew)ZLS;hv$8skWn9BI?Oh!{N-xbiL}Em=BwZyB)cGfN*n6C?jgv19?TEjt z8*1^bSBy`L45BUSIQbVv)n-Pr>G@#rM~Ud$IF3n1v3uGOcRI&Zl#msrk5o25UvKe) zCelksHQg);ocyZaBmc%@L6{ObrG`q4Mo;p0e*Iu_=dJMFWr~oE0JK?}6YuVmXa_#6 zJQr=q@}FD*B3~%S1(GMBP#=q^R>nW0goe-^8^%`^n8*N6Cat91Lh0(iGdv$IJ>V}1`7!lF?h(a$ zh;R9p&dBXk9$K$X))nu*tL3*xRYqYMxcwvnm&O;K!m{oA_%-RwbhIkL66_(X(uE5^nYY0(w$5qwB6n36?aEDwMxIqH8Q-A ziojD>x?j_;rN+qF7Y(SZlAgVS>E<9pxA1rxYFId9?hvafSmAFrt?r0wT2RON8}{b;A4cQOj&4sb91YiDI_I=@9w z#DLzdw)RAfgt_{KR`71I>`=`wA2^^@+B{tpn6jxMw}aT4mk6}XB4n=2kT@lrk#MvQ}ohKQ$^D&W_A1KaZ`Lx7f1ql z?A}AMezcO|vGzl(XAPBSuoVad((WAim&~)z&Lr?(vZs=dBTr3C<-AE6d9U7YX1SZ? z>>(+lkozg#+?evoug5%UhF-`#!Pvod9B%%lM{yi=S#4D!+3WuCM)H zdbf@Co#mhezLU+HhShJG#KqvekNCe=q3*?wN#)(UL2>9v-{!f!*NTm4%jY86r+{89 z1ep4&y!IH3CZ`@r92b5yPMdZ?KCM;(scG&m6J&fLl2JrPW{5F;YtB|U=WQ;V^w>=& z_w@_5RPZ5e7nJC!Ylj}A_2tnWa|B0 z(-x`blM*|t_Z6HwDT6Wskr1PP45V=f&Xb+2?J_U3W6X$F*GjT2KJ#ki3>1a9#B2iu z>*~8@x`ra&C$jCfs_au>DQ~_!?*Np!M7L43ar5j)h2+Po8Q3K}N#^bNLsLGggQ=j7 zue_)1`TX7T$=%ul?*|Kr?6fD@AH9^>_@Gn5$xBJEbjbcm{iBsWqJrZhuc@BnIddVv zIcA5Sdiu#zq*qGiKRhlD$@z#%)eE7Je3SKMpaYJ&!NG3dtp53}p{9mAjCNjT=|lAX zs%i=%ymnthz0y@pJduz(9h*&sMx`tE7mHt^+M=ILkg=H4OOG*8TSYo^8={mKKrLs; zSz8%Ir1CkvH^LZYdd56v4iLiZoRkLlA{y}SmRgC86;AKueMM{)BaV5e&yvJ4^K1!U z(~S*Xv2mp~giTVU}xlK!R`*pYzj+LtER0-$MvgK|_H1hN;M=$3DTeEKzW$7gelc zVxDRUU=NIYf->Tc%!*mWN;W66Z zSCLF&3Wsp9iNt0ZO^B@Ov`xl*0uf?K49`;d(o>O5Ch)_Y+YL?hBnQV{P&9uE z%*eKm-N48&Wr}TXII7PT(xN$vnx{&{V?5@8s~%;(`~x+84hhXwW(Ve!1}480jm9k} zM3dBYvnhAb*pswVA6r|ng&3Hj+}~(VCXOlF!zB zR%S#_h$_w5?vG#d>zjP`rN^TBihN4$bGlM|6$I{#s?3I8lKwvN+blC;1k$49gi{<> zo!OiaOv+a?Hx_Mq?4^(x3qhc0;Sa=H$;h7kchR}8*N=E}cb^^#gZ4C&AHeO%`C-VP z0HGd+EnZX8{(U8?U81lZVzM}e)^xV(T>db7Mook5C?4oGWxIFzZ7LwNW&To$FUL_I zr%*!r(M79&$r9{|afj@mD;M0hrv;_pAZZpc6K#R?65Sy>2DMb^YRkI zRE;)tnv-!$riuG)Ph>pgHA~+s4${U%$CjqS!iq&fcMp;cc_)^in|u-UT|!R)Fq)+v zXB=(!_Nm!?RH;Hf%5$K21ihF1`Za!`8Yznq;Eo8F)Fg85D8dU}kxkz~QQQ?8n2Ia% zkvEcSpeIp|Q?Zijzj#VomuMU5I!cZD`h4pLeCA@Es4hfK#(+x>tuWiUPA%)zZtgY; z`W=>t;{~P9s3Z}R;nBp(NI6GFQJYb(Ma2`xA^BHu_l{6gsCv@l+79E|(b{lxBuL+o zJ{k}vHBYCC>V%F=ykg9=nCsL_OzERi`nsGtRVXAFT~711(v%OXseZxBD}?0MtgRiB zFyS|&Rji)#O(zlOJwj9Ikfwc3Ee>?GF@M|zW8^aS^!;IXfnUN8fEOnxzJsZsB% zwZiceW!QU(jnvhojWPe*;BYJtu#ZDr>%G9FI)dHuB^MZ1#T5*QAfMtB;gaefhg>SHE;8!87gj zW=gg@esoP|6fcT#!6@D)$bE36(MtfAIGVkkE#LR&|3zwj*?ymR-4ya6D5nsc8M%^< z#er-3t&8=GwrZAqQ{3?0C10Knx|%HB#B)T?TNc(;x`IuI1lH3-RF&k89r z_hr!B&!Hnl&L4?Is!lDYbPbI(edZh6WIptCd9`*t?$&Pe;}9h;O7Zy^Uv_b(kV_c! zU-;oRy2}&rw5d!uS-LuSPCg<4IKmr?{wThF3;y@!{osEt1EIS{$~d{x%c!SEJt8 zd2``?$EQ#@ukF^o2 z0ju=Ll;qh2nws+YHp^Ir`P1#IWY|?g-lZ(ZFQ*jCXXJ}ZN!*?O(6D}E-IkHc&nJb?XaZ^1mW-EdFF0S*%*jUuCQALIDGFi6iN5nmexUKjT!{es^C#7e zNFr7flG8c|L!Xm->sGNwdI|afz2H&vusS;J;6&Thj<8kJBBVc@2#~FVjFXIc~|;*F_>J zpc8YNRIH*lR_%kTnO3xyZfjKH@@G>{L&5a9MwQ;!<@|=)Ws^9+?M=E>2bdvBzXef< z@qxfFUw5c^0FVds^ri*{^2%LF;tpWdH7zZXO~xj1-X<~JK(eGo4KG{34l20xswum$ z&ht^@o6cOZ3#GUjaF2BL#F>)!wlMRAd$y`&Yir@AZ}3R&zhvy*IeH}d=;=v|$(F)K zYKNr|_OYUW^LlY%J82GC8cicCyTi9yIt z_jCI|=bjsqZshgt|KqYrPX@(vl^RLYp+$8HY|WVZsSQqAi;|07>W3CEBIa4@TpPVD z1{z3;I(?0o~O^dz{Z)=)aS=zn^DYCdw*F>02c4c>6v%Wg&e<2;ey}>Iz@I5Hj7jON5ymKbNF2WKoM9^9tZM2HgS|yYBCfLUTo9yhD zN-pdp?o(P?yFXjeCv$zbo53U2|uQu~6O|1aTd)Aip~w;F>9 z(25@PQS#aLc0#;P(6Kf)PRgNw0Bw=_)3TGoxeuVeCxQTzc z7E)6a!QXImAno1BoOI;~@bdeYELDmCZTaFG>mpX+aHb&tNH+CWJ^3|q2-R?%6Y(HF zvEA^%$9Fe9-Xu~@)++z!(rWC|Lh_eGGh_)eN4;+xzBKWuK~2Pn&wBk5;hfC4 z$XLhDQik!i;3Vc-CQY|Ig0yhJB$a)xyY_F2GXzGP(1-~=uM1^O+p5nq_|Ehb| zpcira;E#?Elj8IijJA7X^682&pO`_cWoe$R?N6IB@ou5-I1(`IosYSoPg7NxeT!lC zpHMDD_zS-A6oIkh>>BraX}cXQ!mNk5Uf6emM(#aTpmn$0gL&Chdt*-8%JO-ELvv1; zxepNLt76VT;|xiq-gYP`WtnGd6(s1pYz7BX*h(8K_m4yv@*~m)g9&{ATY&|-4P~HX zOxA8*y+d0mQovk>Rd3d#LfX%3?m;&7rtOe!z2f}c#9x$l(e*1|R<2XRf&e@j(wz^?3)5a;^#MvJ;7y*W5`@GZO z(`I$NI}m~z{Qehb8f=fTUrW+i*q=$w#kINGX-P{5`8d{m*4Eo}s*jNQsc4VAMIsMz zHtJc=iQbZwqHki{Ty1gAR9D0qB{NMwbroc^!&SWh&agRvW5QS~pB8?e@9XXCW} zHXs5gF3T4A*0CQE2wiA|b#-6T+}@?Kvj=P7(Ad z(opJn=XoEbC*Y&r80~4 zl*l9tFPCYiWQx4e#N0)eFy->RiRf9altW6+3@C-1wjI z)$4?fYj;JD87T?^(v)8)`fn(x^%wLU5uN-;Ca)P`2Mb&OlFeF@VlZ)pgO*)c7ilb$ zu0$Mns>JvX)Xa1&tHG=p$}1Qh`0118pu3ltsT3lt6lXwPT7%dA#u@#93oPCu2>EF- z7nI4_eAuH|R$(JHqZo;gleQHCejs86WBuq)$ln32VpAWyp0FFGtco>_kaFgL7RN2B z8+|GTO87bK*%ycVP`!&R7q=OTQPCRj5VJ2q1~>BOpvm`R_cK$P=N5z;J|^puvfL{? zl&At2f2uxpB8GL^#3VB6Xi0uq$yv!k-S0%L&j3|Fd1l|YBH;&1?m2wxs!u)`wpVQt zlyGHJ$$S;6KlIBaz)SiFo|rzm^zmK6K6Q6I5ZAmfo~8RP(1pL+LDf_Fwzxc!8v& z$jBr~=zWqp@+Wl3c1PLplTNF}UDByYZ~h-q?-|!rx`ll+GtM|Ff+Et(NQ-po1Sv-m zFjQ%wgn)EH51|uaMpUFmYNSSL=oorv8HFT-P^5Q|-b?7+C+9rB_kH%K`)jh3z1Cjq zy8hQBM0Agoh9(9CYQe_|zl)fsjlpu73Gae2GtM04v4PiEi|@U~X;061uwN;&ybfL# z*5}7hrT-+dP5I9q(qF=N(_4`I3rejj-ZBa0E}J~5$;GfQMD3CZ7{E)id+&H4%=3%1 zH*x)bEU%1K4#0vZ;NhPqk{@#9WAx?O@`l7wpEp;y-pQs9%Q}d0-grCkF8Q+`i^-Qg z)pf~KBfO(C;)Ja?l&##;?m0jZTD@RAh@}bZPI=~78;KZt4n)o5u?2+p-yycX_Bih&cV8C= zR-wsECSyWHRk^v|4b)grM5%EdT4Rsr6LN%DS3@Rr)<|Bz*KayN<6ls@H`*3Qo{@(5 z`LvWLffn~@QR%@h@~fTc;0v7_HgjW+zw*2B*}he0Y|cCmKH>7+w|f<#@7laoF3?pQ>~{%76me*z&CX@))Ttss#2>S0bJVMXnZ;yhOq}SpoG7~Z zTIF3h71`O#WMBiAjx~$-p%sai1Z-WsY;wPluQsfy_J6T2)H2Y2hQau&mL}+#Voob< ze90j%S0;Zl)PeJ5E7kw8j*JsAEIK!lBuA;XvF$IS8ozftieC0He{26fUZbo7DPDsB z9_wz-xvP{Rg%jo8 zrp`+a=Wok9OPatZSo;Tir4f0~S=eDxZe*YZaB>HF$BOw?b7MH^eX$bQ?dVdEEsphI zg~DTr!-~?=ICWzC7lS0`QGqghrs5Q4HV!5jRc8PS=Y=a1iC7I0OS5Nun_h!{% z`lCJI?ghL>1CnDSLE597uto=c>B)(}o*K!p)U)oE7}bIHwFU#WksT1n!La{RPpnj) z&hQW|Lalf{*w)KXixDMK#`IvPX+Q}DEkKB7REd}3 zTwIm%P>>~NTGb^HqD5X>M_O;O^XbjTt!j9Gz55*F!qQg|mh1R8!s70Vgq}3hsOGDd zLI1H4wcdX7wh4>e=Hj%>BT-~my3>jFUqJtI?_`0X?WayuV~+Ba{8Bh0tT1CWxcUj~ zu(s5|q^%9gr}W{pwvxLksUX3>=oOzYx73(7&GK`5Wwl;W?9h20oT0>QK(U!qDDgZmmqmvzM8^yYB1bzRxv9uT_e=WHO)N;ofGm@vamZ<27GYUh+XBsGfj2_Qx6eU{lXrkR z!lx4*O~VDzrT}cONPd9^JyjZviE$XwEMpqO8=(0;icQX4OPi7p!amV@iW|aisSaPn z$p@NH4_K^=xZ76%7~5h+FO!6+sc8?HTFq{f(*eFkEZsW1578STv)69ZcSze9afOab z8};lp_t)`ZB}?2M-3(K29ETCp;!l#j=J*<9+DA_YC1}LGc=6;M%la8@Lrk4`ukUOq)p33tvq7E6#a6%X!TwEBh@m@+kapvlKJ+w{(iU#OS+`kjVeVP4?BsnRgL2?`&Mz8o8 z!e|(F#%vmlCV{WSa!)Gk{$z-V&gh^6GKDK9gSBmw?Pjh_h1Fd)xWSr*$T(U%6f~Lz%8u3P1dne+dQQBN=3Hlo>lgH}et30w~qJr{NUGYWE zs&TGNl%GGm|Ndek(lF#lrXNVIn&yc%)aWM%>+S(X)nexyrt8{n_w@|DtvnV>Umi?L z?aDHG==5$Uwum<_JGmy~C1i3du*~>=XUz*vAM?PG!@C^cJB(!~>Ct>kZ_IefDOKOo zrYH7VZNof90u@S)TbDi6z3b=ZU)s>7UmVZCC7P-|ii^B-8Io zM(1VG;IF2C5jSgD_TP5;}aw^k+$1<*gL-FQupcsv4R<@Hm<1fVG zxHm;+R>j{Nxjhild^yA+Exkfx9&V<(_h#@yvToE^!MR6`+ax$1wjNr&U3P*KKecOWi6HjU2|WH7>BsY2394U~Q-w;gT84M|s9A@`HedwEta1DRFC(-r znD<_>x5);-DbDqiL2^J%Va+83CiSh=xm`&YIjqUw6)7tHoXAUMdrIGwCck@kcbUE9 z?sC4W@k%uxz{OVCKkci$-R-(4Yo)Zxe#z1*!I%zOs9^DYmam0{&bwt*C}$QNJlbqYCYv1yHr! zRj~T!WNsWOuGs3ng#$rfm4$}MVPjshniS<}X2*xno5?D!l z*!Qtz{o#uRvjJq|ee$@ccW127hqVaO^Ju)-!!^733BUE~{&)40*V@(UoQqyfbtsU8 zf4rArnhUCDB!1Ynp0+v}1mdv?(o3RNi@b!6_?K__#(!LQ{T}J@XaCJ7z7-9ws+a8uJwHqn(2MIRU^6kC{$oBP>frSoq)4SWZ5^EE4kTmCM6HCLt^WOgVK=c1 zzdZiijp{J%-E9tK?{H$vl|&%~ALu#qscqHVUP=O+7Bw|v-j-v{lcfVBhb@kt2EMno zS={Oa&Wl;rg8Yw^Aaqom>6gV*Sgyq~B*de>WAr|OD8D&8;pT8YByXc3oBJYDjVZ&_ z{5h?6rn<5YP-9#4UQtPRBI#CuU{NAeT;+93(jY0X>OYiYo);yqk5u2v`jdR@B}3yx zEnXjF3d<$&K35zUkqP0t*wOn{5N+2KHvaNEmRDEK1a?FRI5d!7C#S0mOjJ)>;GwBT=JkQts8_<7mf- zZqVPak*V1Lq6JV08j{kx5 zxXCf!9B#{)M2(X-OU>WrzuO^Z)W%!>uawvD!ic-Fy8cY41-}v>&}VQ5V{}wqnw7=Z ziiW$wo5Sy-U*+e>aao#5gb>f?_cT;BaB$6aRy4L z=*93ShlsPF`Jv4EygF*j~S zFSJ*`#DO6pEx4H1J5D}NSz&~`sW-G3Rf)IDsJra_>OXm@^n1GEycErqxQ=;oD%xpV zo|Z0O*jlQr6egE*AhY4j73?=d3y7{Jj#xOWYCJS<*&~UwX4gnww6Qctq@Cy?5UI;=L2b0)Psfd_@)s@ zzkq|YOl*qdfW4}#p=}5R+>kXb2;d#i$%2xsBp>KW<<=&hwU|?FEZ95|r&8H=jvMX2 zkbU7&+)?VPR3X4aLMhFg5!0D?xOIM~W5%E6>lvV!+6W2+&WW6Qh+OmRVqfRB@Ca48 zUw=MIav#!(PA|6N#Vehm+eLYql0)R2*T}zn8x3&6SN5CTrk-X32}WO)y|LzKf%mGf ze9Efk@~@1t&&G&Sg1td+WJALN6#^&d;YgO&XT+W%YXg9de-qZ*Yq0A&m#mr_Ua|qV z7n;fW;3e5fw+1IUYqcuXTJ!zXloU zfgQ<8*s2LoUyY@iW)*d}Hmtq@dC2uT62r#IBe6$vgieRn(aJ{!F_908SA!w=rt`oaK>w@ zm1A@xXnN7l`ShTvaS>TO8+ECx0PVDSE_qyF`RP7N^1^_aQ86m|JilU@=d2VldInV( ztRx_ctbvgqvBk@Eq~d-Ey2C}zjUcfjBA+8ypJ>P<(UL|DKeldukFNM-+T=_yL~BH6Z(tMdB`52&*IB?TK|ljy`42%Eg%GvDzE?O0D%h(x>x z-k?J}#(2DuQKhi`xv+~N$DlZEG6;)Z1_3uh!=xRj7yr#~dY0c>AVF@nuK&&gfH^1{+-Ud4PTKLGciWR^PcH)&X-;dI z9?fb-%w7BI_JHaA;KkvA4P{gKpq8FHclsfjR=MxeR`LF8UzdJAZ#?XyWy6iN;qK=F z-gjdyUgrq!P@wM&Nk)E7gYK6`4ok7PN^0_W+>4^X|7=^<8K+II{gc0z`0-_a_F#$_ z#jSn}^rFz*>BX^jmJ_z^H~Zf`YdOmr^>Bp)QjcyVk7sc0U6oL525i#UC=Z>?*{G81 zne9dwuQzB*3)9Scb|fN7M0@khX%KSdK+iv06|D=uf80vtJdnPPN*@aK!a@{=j|u1# z^?+tZu|K>ZrYxc@apF*!@a`2kS~?dSqUO-XM2Qp2 z)ZZtF|77qAY$8w{I|PwcPb^ z2Y-F1#}u}005s-NpwQpk_gfql+^hvs8Ccrw6QAC$X)qb^T*d39FP>`~uZCPO9`Rs^ zd(Y}6GCh;bCU@C4kf3w}r{rVT>FnX`CO(`U(!>t8cU;5rzFfkoOxHl+pw^Y#u=C`g zSIkqJ^zb}OzT=CIFZ4qjNj|UBdb(bGi_aWaBwLl~v&9D>Af?UW^ zuhSy{Z)8xWo3YhB#6>hqI0cntui4Yc)^2p%kfxjux+e(V0uD!byN|{P=2U|149F5)#`paTb&Ss}FV_PzFH`Jti&_?&gDc9i(J?P4%nJ z!)w2tW-Fua4!IYAoXMOcGuF+rt*2F6D-n#e5n_nAQLL5C!Mf01e|fV7{3`Q`*-K)0 zrncYJo72W;s2X)lvPh*hs@C{{wSM0_!}-n8XKQWz3Qie^s5o9LJh$EV)bgT+D|Qog zuN3_?B*c##fWlNHV_&FFr73C#`nxd3mpGf8$+ex{lFGFi6}gsfwYC$p+gA@Yz`A>nB57!*s7*G&0Cl;*L7ZR$ddcTDz{ft5-%dAxd#e@z6Hag1zRjvg?(JcJyhZ z>dA-NxTPvl&V~XB1FzjR-!JHH#pTdyG^G4q#?=e3t;i{Wcxfek>M2m z9b{A|pCNQexxXqU;lkUuTC+0PuFUU;ENLT8$u4(QW2OHx%;N`P;yc`Znf(-Xck!m2 z9y{~k-lgn%u1Bu!?$CsEf8_TgJy{@gOh)rrqEC65I1kLu5kvFcU(PzW>rMZ%zQlbZ zo@|gHTILMyew3IKJk9hqx(s;u`mKnO&{|pNcJ*^uFU)*^@M@%hqFidD8r}3T4c> z4sU8N97Dt$1QS{*LqDj&>viPHbfq9y5n419V@{ICWmdc*`X0~hUNNPu*p>FGTJ`f} zw(+o7a41Ez{A4(0pYP{`f%-MdbJdqvE zEsPtl4A&N>>)EB`iggKW#{o@>KPnb3dxEm7Fuz|{{A5s+U(Zg-^%Fh#!yRqm)3rVW z6?a6@M(H}`qePQUbe81YFe(~#Qil=P=sOtB4a;w9c*y2Y{@6tWcUnDO!0a6HCU-_J#T6FRBZ7&Epepgh5CpoQ^&{`_;{9S zy=1~oJPRZt!C1SpxILX1sHP;XQ*|FU1ig|tXj&-r3FeCw7f6V(&t)@AqbjbeJ}4^U zF6FD%yYacyJ4F4L1gBUEXKlkLHIqItFk*e%bYJ)yr?>482;}x-*kZocjdC zQeaKUG*MS~z{v`1jCAV2Az2ETWb-c($6}vyYv#GkWVL+L(vueJ&AO`KHPmq{-2`RF zV$YpV6N381dJdN;zYGnqcVdJ&RTV@W>AWNZ>dau-7m^bL$X6KJm!`th>eAVZK;Qv( zhFb=04G-}-sR(&t+tUES*%zbOj~%0ewi^f67)Ll@PnW;?#03{ds)TJmXJ z$$lM&%uj|5qsXq~aDKtB!RR}b0&LC3)S>De&n$ecosJSeQ@RAbw;F=0&1})e|#B^{(PmaH&hxkh_e*EH~S+zkG|~}n)!a~*q-fE z*Ndx!C%i`d?w9y)bJlM#djN@4@6m=YdsB23iz}J zb5bcgBC7?Cw^gB!e!aSxQ!#nEWM*W(<5+rkWXq$Yp3^+>C02uYOFBsn#4*`s246@a zJm2N^P(ZdESEmCvnygbzGviaOA>@F->#&IUvli8$r%IFJsQwQJ@5ANZ(iVnFhymTh zIYG8vi=2J{>7;fKYnOVIuzr<0)m7dc@FIBK8e8Kc-;%zZ1*LOHe*X`{A0O$t^K?JU@Z^)EFJCw@hEp$OC z#s*1rhDVCP0^54sV1Lr{Tir%ZC@;!2_tJ`*)0gGGy~k3e%A}bvfof)DuoQrp4lFXC ztvDA{W)D0tuA8ZC7uCmxCZa@u(Uaz%YreWQWeF#H-|n1g3Z4jp7{aXL*S*Rm;HJu z14iXxdya47HL->9lpiIjhr3#*voS&m+Jt|8jEXGt$IS!*0ST8ZDu!n93z)s5`(7jG z3WP=kUKb#K@t<{}DOI*@p*Dw;Y{X#xXMO3yrQ2POQMU z!#Uq`#@{ow(;b42)HC-MZyX|1zR@V$^cRL-Q(0O*GVoP@1QLw9dBT{G22_J|T~1nLrqcR> zZS0dm`PPpXB%9XfAyc+f+ z+#@HuKS>98VU$3o5o8!mGp3uTVm>ikTEvoMzR@^!&ZDQOtBI8Gc~`X3mJXd@EHj;! z>Z@~}9Kp}D-WVdY|32p88*b7&G(hm>H!Tdo{>5{nWpS- zw}!gSw_BZ=t*Cx%@BUSS^Fqkf(!?1~rbKGEMJ@AliV zYD&RsyKr7_M}3I=dAuJvovDaZ%x!zm&rm;dGpCn4AK0NwHh5&pB{os|!r9I7x;9~C zCouOeP>MGOeenpMj*p$%hw{4i%+~x zNF^IOqBKPdvOT}$f>tD7Bm$ZEC3xTMpNb8g$JQ^3A1S@qQsQZ7ZfamI9YuD>HtH|6 zmMdJ#yq6x`piiNTTYHPH`i!VqeJcMgI^al?%84#~4oNl0isLENbA9vGCL);@f~P^9 za<^A7M^2ZZib`q95l7|aJK>hUHV;?d7~iN`y4kk3v&utIOw1_Kl`+4_F7NQH^r+|9 z9hB8Osx7xqNj6LbP%@YNn<9HE-)A5}=bWHgb^{e?d}8_IxYDVq6+|_Qe;ZeuI(^pC z85eh%7&VOOXHk&NB^X7WJ-R7;cC>XTMj-oL zjWf_n1sa=iTfgO_Hu~Xb5yRN*3}~Ft1TpK7z4YR5eFK3zk62H{B}t9^#tQz5imiOi zBKboT-tMN_tAA^i_C>^)us>Bbqf8b0?HJ9El@j7q0k;?Y23J6YcWwP1(PET8yQPLK zT$M!2rV^$!n7q;2W(dzrml|n=08sK)J+0wu=W@d1kt`mSOGIoC0k`@{P=Ez?$7NKn zDmR@ob+iZPRG@_&ZiRWfE{uwj#@kh_q^4{_6H^5FDnsdO;m`qB@S@|bG*7-t>*Gfo z51ura6d0H9Cs;0WoJkwJ-7jM6b*Z*q7DGA2w?6Ar6L)+d;*{byK0xAf zls#Airk4>=3)98WaMB8*|GulJ#}o0>&`87_75C%vdDMZgLG}C0<|E}(M;WTmv;DBe z>PPPY3gHPWi69+E&_6a~xR$}MkGD!}t*Nx;il#1aoIr^yx1AjCPll>01vT3!01mu} zeGz#YiYdJ-!Y2A;yz_)p<%KYgg=45Z9&CU!gn?Wy8l5bap4*i^TapX=Xs${_1;!+rUFqRU zaIXW5EwcCz1S;@j7U2o4y0TET$P^#q(`harH3l%Fx)5%=ywdt=MaU|jFH{oye0^4S< zCgzLdj;wf!2nZ&Vpy@`wP2OW63nd)g!;+v&qO@jMPG~$}eM|3O82-nc;ik)wQh9!% zQyOF0{%zzNGFlM=6F-6xb2d z>L27G-r3cRGhpOWOJJ}F&b!GQq$iMIwI=gb3)wH%Au{TAe#NYpXaP1Qr@B?NTJYzk z+(PyQ2TB;Ad#J@u!v4U7TgE9j-F&1H3W}U`<@pL5J!@>^LjPhJxfKwxbjCIisN-Ng z4!(A->D;zSGCP*YlG)dT`{5ogU+Pi@C_K)>!^=gPAaS~s%geu6y@?hjzvrjHLW%X3 zdj(QBvbf+E>Q(HG09#oMcUFGuhpA6P#VN&YvO=edN3-Aeowc=@R2JsTw+_0FqQo(ip zKXDS-Sy2KYB~gHFU4NEQLF@gm%6{$?(IbfrNPHx9d5Kz~-b5yq#TeUT; zI^_EXYi6RPkshjGBW`ZLdU~UtfXEJB&*(_8ao?4Xlvl4 zX-9=$2`&nkyd7Uy&Ry4*7?~Mv-)vqtvH=o*nsOUBTsn4u`c`^344{` z!%MtRz?x^Mx{DI)w>icUlg$XTGI5WIY<<71w2@jYMHM7m(UVd?+@oF6@-(GaNt!sk zRdLud?YkxU`@LUka`~d6OWQm+Ujq%>(FQxgk6J@dBc*-*Jya)rMIFi@TL~2jHhh}^ z^*^b9Xa&H-3f^y67{bb%Q>J$&=0$%{IJN<7=+VT7)o*F;`yB%76ix-9E8ZBIv=u*Q z*wjt(_DxMsofZ*kKU`kz-QuwDTk{&SRlu+9yP43?_*>%PlWGgGI=!m@^zxtDCC(3n zelnDI>jEtL$ZxD$5sU3+&Ds&t@&29K=d*}@~Jk|U>!i|dPYeZxT4<*T@88F8~*j{1X{ zoNMGmUFijjLuIA79OD&~H93{ zGe52CRkM0MMDhX#olcKj5ZB)*7jl01xNZoX37nHI7xy8zna}8E)uwE$uDI74T@Lx2 zsH9*_{QJz)l$SEYhwN!mm(g7 zIA>!}4YQnHL2B%`SHcye8R70V5-`ak`iz}ZLHrL+1H!ioTJx37QD%&xpWkuA>!m)2 zk+*Z$z>Yp1uJF_JbPbwI?DcY7cCZ+A;99hZKp(1>AE_gMlg=HZVh18m2~otc)7+Gw z44XRFF4}zV^LP`>`er0Xc{$E*_^kDgizempno0DH$5n+-n^jVD{CcV#80o7=FdJ02 zGVvHmYMW_c);Pt8o%b{Id=<)-I9+|%MgrweAVg4H8|ejHdM$nse&NO8mCnrfR$tYx zWZk<$_T`5tBAD=tq}4pXsZF}WzC-ZF^-qRkP_w~uY~y+6m5-utHuLGFsZPR4scUTH z@ENqvsKwL7wX1gB&@v>vJs0)V_g15gqgE~Ul5UCU`FAm!_O0$bM1t!|9V?Wktz08I zw}$-Tw0F7rM==Z9iMn?d6pAynk%Ox3l-sF+VNThNp4h$yM@@lLQ^W58I{`SVF{z); zp-Tfy62SCemckdD(TDL0}a*KD#2E)5@F1aHgT1W z**7JMGM;%SW__*}QQB$%`baFTFEp8Y6g7LD^E&>aT(X707w^-tG?#X6gwjP-EvSkr z_pWH5T3pg{$ORR{_y)ab(sY@~1oUo`mOiZti%}5j2j$^m3v-CRuMK0k_W1*&+qND1 zhM$_kYj3$F{y-e850M!1jpZ}U%JamMc&SexdH7Ml&&JCoHXU{~`4u~@)kY-8YXevy z`5C=)UDPnEJEC=z_bzR^OIib9sDx98l?0?1$|SLXu_ok|Q_^!nAGW4T({Dj?L&#~} zQfBPB?TYy5Qe;mL_*k$iDYw^jQ*XH>qB7NKxDOJbBA(hHUef~@hw#2wI8G7o?ex<; zib;-Zi=adoJvFJ9P* zg455I{wn+*)Z+iHUS209Pn(VJflnB^NRWq3A0cdCAqDDsG=Kg(2Sx@}q``10k4PUx zD{L;~#^S_zHuFchijX3fHk`0W{fO z>b`&H0nf^Vh}^53u({Sk`QedbSK9Srg^tTLXF+1!jqG6$=PxZgR4?O*_KEi?q7LmD z$jqQ4b5{z>k@{B}d-TdeYh~r&`tne^@5D@C&=u;Vf^V?w5?Q#_Y2mtf7qvl>@(J_U z2Q^53-xqhAYS2whaU`1FzsvinVMavf<(_G5I5iWQp_uOJC3a$Va#?ZiVU%(TkBC2| zqEGv5e6+pWT`RTA{QN~ydSmL9JoiuvH+Yd;q)sUWwyqgYN z$2Gc`iP%4fmFpAuw8GLHEk;c<%nCDiG}F==?6>+IY&hZ@r^_oNhKGwe3e3l0N=5S@w=72x%sN!C9Nhdd=eGDH;z&N0YoTT4Cqqg}aAR3k-yLFOsy zZ;s($yL&lElkUbdA^WpN8-?n{pA1-t%qhy^G_X9cNLtKnc|s+eI+dqzKhZ$_C3UZ< z?mE?%&H;Qs$GhAJRBG{jer3a|0CZ>(l_!`)<2DM?9Jp#k<9{n3WKlVJ1ec~U{SwQ3 zRm?oEx7MODbk36`SQ>1FwVThFi4dK7a*3Dbn`{Cchc+u$E5VA2R@9I}W&3#Pg1L*F z1r_J;1|T|4_4oB7%ivUjbJdJi=yc}BJ}e58Y1`e#shU#pbU)?2%MH$+{^~%m5>=ft<*SXn#9wE z;TQ5f70O#@CmnY8k9e5PQPG=-)@=1iMn0=ZTtq5eSY5LdWXMkT&m2vaBOfW__hu#P zp{hU^1iaC>Sr)!%qDy>h3T~7pHBNo6aR}2%V$G~tkunfB@%Q9nG4`yM0v;yR*ADrA z#V7>hi+WL+h!qMuPYD0Nb7c^IqYZw2+fiR;zAtB?xx6ZRJ)7sv)n}RQ>gt?w$izKA zm;d}SgrMKkn>EWja;tksae}9Nml~GmawJro{GL%cPqy<;Y)J5`l#12+2zH;Klz5#R z0FliiJH*$eENZf;_jHygax!&j|JB4W@ zc>CJu8f!aGt>S&TfXtp;;gz-Pb+2k;n#xNiKYV~X5TR>IBxkui1#wPJFHGFLvmhLM zvy*a%&655n!2S;#O^HhD1Ji4F2UY1ww-G#6((S{6*UZQo&&|=6l`# zt^0xf@PGdJ=JoF5uagXP|LHHHmivFKMr|(T(?FAlwO)*|w%E+?RIDj~E@_o#BN59K zL^ibR`WE6pE)gR$T+y*j?0T7)DhF@@7qny9d0PYTx> zU;ctlGACkgl|HKKdD&G1L^r_2Ws0_A%nfG?la9mpU068VxP(9h)-`Q zbFEEq;zNY0qW|DR)n%RW$#wFTIt&T5bGzdFYP%0+bTn@%(CoH+gSYol&w7>K1>1zT zSk=u3nH(!v?u(p^PwtW00WMW~SC&m0!=7dp!N=lJlF&qN!-l_{h%cQ=>>lU}J;X`A zN=`Wj4359=maUmka`v;B)-&QbaApaFrnqzqbz%oNZ3?XbIC@dS2zFWRbn3g%b(`S- z%zQYxrQ(3Uwf*!((V)2~N+2ePPjE83W;&1Rw^eCOCuKUWd38p7KeO&AdTUZud36z~ zxq5lHU)vo1Ie-ax7*kn{+48OEUv$-p_4socF|%y0zAQUaL+L5gABol{Iv6H%)>I^$ zL2I_nJ{3~&zo!3>qXPKP|LCy4Np(&^-*P^vBN>VkOaa^wjwflHpRDWYR(T2HW{9-v zJn_pnQHoQzl*aTqb9&uRhM*xxV9}bdt@cod^gS{lT(6#Y5q$voJ+avY?5iFKp<-PZ z`!|l7Z+_qXJ_DOM_jEf&suVW2aBt}*A3vcTj~!B@9o8hfpJd3GohZI6*As|l+e$hq zEKHR)R&we#Rk`1l@$`Asa!eAFnT4p8QvuEAEhtlA!;5{@!#Jtss)fS_ibiAyr}y)AnsF-i1Wuqzv;42I!^^LQ|oOR&Io z4NMQGXTG|IIg$d-C9GL0MiG+m_ixJDm7p1yaTG_+lhFbGRv8Ycp z&1m;3uGUu|T@!+gP}&@Ru*N;R0N2x>Oq=7udVQJ`ZR*J_5*l=ULaUA4kiV>zP=*6F zpRQAqA_eGSfjj5hC#n{4;|E4bN4s|egqpJs6X>#h>7HtoI9h1DFH#RnJ)0w4#lwo$ zprzqY8yt=l`*q^sCli0a(N+dEzC5q(*fKJrWQ(xC>fbyqvW@N@&z~AUcl_2a)`SJD zJ713b+&Qm4mw$bRSpoN>cG}R!^GI0d!9H7!E^mYljY8P3Dy%-a>i6=>WhYfesImXG z`ACVj0YI^`w``bPC%I}wi=WXqgGU7^m(X^PuzL)l0LK5;(EtCsQMKy1$E=#IoDMh@ z$P;d?y2i3R<^MbLQxlxgZ1lwgVY3i@=3BJdW;1d5a5`wja3&&Y(SnmdpE=YY}PJMa;M@_~D}U zNB#eBv_N?$Mv#xat)b6%3WWUPjTThqqOMH8mXg<2GN+E7T$cW1NUYz3E}hJ*BM^lhbeISx*kXrAc zHi2PQyxJ)epNCEh!a!lXb004aI!N&Op(RA3SN>EP;l=AE6757yiRO0}5Z+A9bPka% zk({U^SLeyWnYE3V#lhv`#-(vll@kZ6iCi%o%ITRb?b)!yx!tS8c{MX9-)io9V>HL$ z0w^FP+%B#DDnZraLhhh{W92o2_kRoM|GVyfne}t9JB>B~TsHhKk6ESG}+K9R?oG&g-F)ccU{jfI;Kx?Kb&XvV>{MTl6I?x zruX;+=zWvbpwXz3r5`VVxZ^wNYm^*@{(f%;`KHC;h>&|39ToxH1;@ebQI z&Gio=lR)IYU9m9~T}Q9^zYj#Ocem+>8^!;5@THN-93|nrmeKNdI6pHG;}UY9p_i`5 zqIHRER|9){s@6ly9~FqS=|6UXG1khNEyY{h?nOjIm8!_(C9k#V+3!F_YxNwHh#ATX zw@pBwz~j#iW%Z5J#GAUOMJ>C{92R?FY@|SgUT|(yT8%$V!YIs^Y(3Q5>d`zk!sGE~ zLw&a_e)iCR=Rs#d=@7)TKWD#kTD|U~46Zkd67L_VdcbMB0gKS7Om&B2- zErefN^T*E1fjeKArM2IeY5Cbby1=>CJP^jc_>}BOIbnf*NK*eak-PF#R*uvY*og~N za`Kx7mw$I*vna~6cpRGN%xz0VIp9^~mhVq-i}b}#&}G%m7WfAx4Tc{_@?(Nzd5uw0 z3sd8!XeWE;G^>n~Q+t;d5yL#(R)c!vg=UA~Vz!2O*+!cPI1+zi; zW^d>gV*em$`)(T!f{vf6D)0Weco2}|phgU1lLud*H}x+BMX7j%nT3MmODzM>#|!QA zpXrmx|J}|1x@F~m5&bUgNai>B>)}(E2%&THt!|kGaC|F#ChXx#Eqm3Hfs26#8<{ob zy+L8dEIz2%ctbboEB=8lJ%ZKFZ6_%47q&e3B;dDY5F#)_Be*RhHeAjiQ0a6Mu9G^{ z=MD#*=VEVOD9_>0JpLnAmbq8)b=w@L?(uI2Y7Aox{9_Dm|5?@dJ@D3d?Y3t-s(+6@ z&linPV-r|p<8}OMvlDs+ zzLCEEG<=}@b)yRTAK&<<_8NooLEi#kmw)*Dxqxp{Brui#=5D!^0|49q!sb(!5iqr0 zWxled+VPF%8r>n%E;LhjWsr`An3S}fVO0HG<(-#j1rzYP);0+eAKT{?4xc_>_}Cx& zfGkzgYmF}Asj?L(qAvrQ&Qxji#P+2Cz2W&>Y4_`+-d?HkFVFeuLjpv()T8yV?4Zsj z!lgL|u)p+Hn17If3%Yr3zOT{I{r4{eLz({%&HG=@@_#~^UaTXj#U{sT;h|Pz{`;qi zT3xtyry;_Asm67Bz>L@il@$@8KWm645k?yR#TX5@e7A8=mU5$#2*R*YavY86wx$0N zcDQil+<4n18QTA_AJ5A6a8syn?%QrMtm`c3Cj&3)mLeFM{JW&_dNzmELtUtFul3{Z z58EzkrJi8Q#|CMy`%GGXNwR@m%pO9I)kuZERK>p%&cE%g2=I_;pt8edyyIAd?uxZf zwoi;~|fhF{nI{VyW%HwOBNfr05?hF|`cdm=qAcwgM# z)iFU!+QG@35-OXj}Ir zBj=rEb6LeUZhqg^!L~iRZJ9!Z72PS7oUHxVZ6Vi9I%7~-`wf@AnmG+5?peG8&gH{= zHX#)vc3D-vEDk=Ndyz#bQ@cn3p2UI(`0fj9H!8XM@gcuJ#}59L}(0#LoX@a4X{c z$?(>!?A3vk1^{wRzBTOKcXa%IXvxx_E7n$fZ4e@HqDwl=e`>oZfO0xiXLS_m%1 zEx@$6rg-s|;2whOv_*;}6bZo@2(ArIut5U^4NxpVAy_Ex-Z%f}&2?Y-0Jog8&)#eO zR`}S@3q%#xpXeyU3b|Fks!%7GJr!Qj%n-8Y^tX41aeqr#WgO3MUr{7B+V;D|zN4Tc z^X16rWXkftzX=oHQ7FoqbWz`HV$u03cCJ;D|0vP+sa7D{gKjG&lghPYz4ZBWVfG5? z*o=rr$tR1Z7VEzZo|#mh$yCxJRgF`A z%ce=w9`|9QQ>OT$Wfxl%pUySpHm?wsdjCs?jQ@G=!ynE;i?a5;ylSqk7RHXf*B06e zR2}-ogBWjcRvut`q9_#I=M9vzoCy2od8)`w#Ah{C6|TCEn6bE@?QJ=qH(r_Oh5Ae@ z4wdFFTk56GxcsX%K;o7mWdAi+b3FfVK(#B1U(VO!Or-bUf$YLK)}qBJIy;^G0jW-G zF(kN_`?UgnT=$4lbzG`28=~aQpkR9SOuukiG3T*AlgAR;hDVrj)D=P; zT+*ff%L``Iw3uL2htGMq3M%bGopdA~7qE2+1v4++!=;^DC(vio189?U0Sni|*Alww zE3;Wy7r=5<#D2VZPXMku=S!lbD@$>Xe$Opz{x{Z1vw1ckMic z>N6e*1%-y$94mAsJ0xez7|ARN{gP+~Oi-$qk4KudEavInQRUg>Mc@?1wk)xSQ!Uu$cq58aGpy5|i=cU;1i= zq#sS$WtL#cgKvJ|5YnTtI>k59YgA&&<5bjwFauF%TFb(dn&mWpAJ;-|!Y6o!oSI=hz%h^xhKN zoB8dzxZ{35y=SeHozMBMSo7l4wt^W#^Axa>Q{AYG36VZED5N^;2v zD?InMG~U3<@_5ED=Tn`GhEX~PL>&H-kvG>>l~s_pxx0kB?igDR$`-a_4@rZ*eSb){ zS}p^0B^OxGgO1Xy+vkVGwo-~ej!P*1_-h=&MxA(p-XI@bqPL`QFl#=*Icn!bcD#9w zua6aaZ^yatB)`hdA;8QOVhO0=I zeN>NsQzS_pfk@Us%D;ZelKVUVQZQXoF$q}>6#d(#LCBua@vu^(VDaGmPt0i_IOgG% zuriM>ed3+2OH}P6`uu?5s)aVUNDT^!f3GWPXWEvdlnYTMd98-WiaCc;gX`H%bC##N zIfYJh^JdTeMl>xGkYt@q^J=2ePs>@$*Oel3;T-(Xr;E8;4b0Wo$`V8txM% zH+XVecU;Jrif8|5=RY|WChzC}cWF?Ngr{ABt z>GTbe+9j>5ITz>CNHgR8S1FC;)WV5PcFX>PWG*|%1ahluRUrKlySiCRl0F^2DtKrsGfg*{}RAMnBJe^8@^U( z(_PO|7?xc)-tZc>sv%pNO3LXM7E))Cyj$Qojot2&h^h3gS)Y$w+m6k2ZeMnc6625# zH}S1y@or^(k+rh)c=*e8U_EDN+HNFP<7 z`6?>hRu0igj4F54miDTispn3ZXq`!$v%1j43=^9JB^RXQz8{?NVFiq=XnoO{v6cAq z-6*|?I5yFSn2Qy7tw;H}AAKCm%LyejAwOQb{eTwoS4wQnX$-LZDuV`{_-Y zPagegI5w>0ICDOlBk@anm{pn9s!NswG%HZM}~@obNl*S zeaTAR~i?qiuGI*^-J8*FN{!Ufzvx&ksk0?l6d|F?mm(#eYX%QD1zYX1E_N^KB z)+^5!HW=XT_873Ky{X* zrw1Y7y9V{%F&^X6hOhoR*GvuLcyq2au4rDbpA_6H+<$SZ0RK(#b3Nz1teKwS))Ch# z>ehJY<~N0S`jJ}}+4w;=j=*;Ig2(_|oOB$rDN2RZeRnnUOf!>rWK>~=yVU7IBzBB_{tv89YKPoto8QqSPCluDS*U$KodwxmrN zhtEMUL3_BoP*5V&CN z81-5|sBDDWe@Xpk!f1xem(k}PpzN<_Rks|lDThbtpUw=Ax)CdZHoNM9-8tlL zf!i@AT53O-7+|t83-;$7$ymD53S`0ojWU%-FU6X&*G-K*u=39Cu>Zrhkq<3PRiam zJQ^>}Wi+RVtJi6}vP{d%)j+KseP3%bByZ@DfDu=L7are#}Urn-1IKmm6 z5cN}!pWt}{r03}IQDjVBz6{HreoJmJ3NJCvlkpp*R7QiGj`p&iz~S!*sSx{-R)0Bfk;s$%%XrzoiR5oAhZ3_iI67D?*xG zDKbb>;D&0Tu$gOm8yW^OlVjyrtBE)j+L}Re*ba)~=Jl)-`IPcDE=I_2|NQ~2sqzbt zAXzS=Lv$u5)4l@8w8pu*bn2XtG0Gsa3T_ohM~p&xa=|~q15!sx&W6FXqu%5Y)>l`l z)3#-AL1^$>N|(*Nv%j3r=ny+06w2=RSKaP+iZSlPPmNRGI4Hy|ON?uZ`t;Wu?|@z) zT3xq3NZB7yTK;THjDX6DoK|K*-;>F)0u&U_$p?4x^$!IFIXF!sPoVjG@4;Ioi4Q8X zA0poZ(n{BkYhG&v^rZ{EU`$1Ck8g|Z{ylE;sEpu)GZcvG{T}C*?yC`?T$=vc_xOJ-SF%$4 zO_5^Sj9MQ$KfdPV&voXXAxMmGG*3Jp?)2WX64L05NAj^P>V3yRhow*h!7Od}eUqlx zA#x7$5iShrV>hsLy@u8OH3tKe1JgWSRf{LtjI~vLv^`a;+>e_zcR&uhUrdxwIn@!? zx;?gH~F6{%H+=hUxbtSU$F?@`b2e zj7n8-x>$_Lxb(l+B)%jRpl{GyEpk@K);{ud*LIWzQH;*!+D5%PPgjG6qC9koYWJwD zaD1n+b^|KM4&yh!y-y_)7K)QPqeEb@H~x zh<&ZZK~yVZu6yu9ey4=UL|dYa`L$`=6~`N=AnRNXP|bG8&Y-M)^w%y3Y`S#m{Baw% ztglr8DJOV?*qZGLBejjcX)PaHBHcbhS#=*T1f(qXjj{$gGs!faEVx!iQJ#wBZ+G>w z#SgjQ<;0xz$h>Qy#q(GFuUZpdCZWGt#qcKW$P0d}Z}xvf1;87U+kL1sdeeQO?f`YHBVcxQjEi(_912^PMh z$2l?Um>m>UtA6*OqV=dar}8Vun5o+CuiS#CPt)&q?$R@>YwibXLN>1zTv|d#3w7?aKQG`gPFUoTnSB%tnw{(`~|gGW7bso&S&7Z}v!V;HyNY%^5f*Kv!! zvY--J$SBVLw%`7G6V($aV)Y4g9)t+49Q8S^9SBH>v|r0Mhw5vQH&|*DVPnujR&{oKYdE=sl}lEKzJ))a&mKn|Jc!heI}Cq5(RF#eM41iA-TNU+t@6Bao_jX6|*lFGfixp z_L{f+R;S$G``~A468WBM7lZaQm6P?m>!}#$t%3*JLK7f87cL>n(d(Un^XXl)<%ZA9 z?0U;vqFQDz*9Wc|o406yd&0qM4PgtGuXDsbQ!jGAIQ+ae6c%h+R5;a{^vOQzvwrZ@ zUr@nP6gxU$7mq3TXQ;Ko+)zF8S5y*N>-Gp2;fPYPt=I7<=&cvI{PU-6P%Yj%AeMn;FZg-)!j0lo*iQYhwJBVZa*<2^0B5ZcJ;NFG^j0c zlLVzQQlRsp66>V4X-|FNp{hE!4n8^d*u4#AXe^T0vBCZ#^Yg)tM*{a@l$lXdRbjBW zD!{S0dvYQnx2EB(U5OMZ6-VcXz{sgbGCT9SKrd~yWP8BPQ?0N2h+Q?(vx7sqJY@Hx z%g^5w!NG(;f}-l-O1MwAAU+xL8S^@Sn+!5NaLXY3%jj9*FZ$1l_24!P3^|7M*EN&# zRzqQu2bF4OAC}W!qPiKZ?LHLBhBewGF8j82_ME2>>dkM|{1&bQEo}1s>6cGCASRUb zLL29&4jW^#pk%jJKs|KI+4fdQ%72Q!4Ow;#KN)BT>{oerzqc2XD&zAd9Z6(dDj6T$ zBpyy>hMBC0EoZrcGQ_>KG_~6FZA55CS*jhnlZZZ-(_F|r<$fpG@N~{z3H=oA8lN(E z7CwiDg)F_ZvKeb}RClk8L$PL#05|K*8m0Pzr24=$G;;I{#N8y;vvfH#7D=v(ruGDi zw?l|4eq0wVRsi;d81w6v+t88do(2oXTQ&Kl)_*A2xbLVWz2G8az*Mq)0>A*>H|`hA zRSq^?UAJy?q>bs~zMGZYZ5LVOt9RYhCiAjc!PkkkO8aB~{4w#7yndbkreGRxh5)k| z^wt~wFD+yjGpM;ytPFvg>L+sTnNPf&(cpL^BU^-sa_*7fBy5S<(^kf|5%@rcl=mfm zxYN|qXleR(d~7S>!Kh4@OaTuG=z8i99yk4JG4O`njdJ(R40!gJy(Cw}|n_%M7*v%sBVm z0&WART7il(hQ&$blbh324$uEYoicXX0q)_P)%z!8J&6sj;iJ#KC)x;Scd2DBpr9w# zdf;Rd{YtIE_Wgx|R$L98=2M6jrOZt1y#fixL7|lFhqTXnq*a4T=UC~I5P#Yge*76r zsga?kmixeb>*P(U+*g?Y^RDG_>DjW^*4V-+rys?7E2p8;lSfH$y2Z8X(#h}ejp(ht?sgE&Xbuds+nbpo_N+K{vz_8_$Z;a=Yrj8t zL@mCXJ#gcUske`%Rf=(c1UO$)btb1$_%XPpNvf72-txDkc1iV5eR12R!PI*tw8-6; z#T6QpiM-DsPH3#aWJF7<0wM`YRA zt$t`JTne1Yrd`2z!`GX&{T#g#uIJ`mBxY)r%vd}qb8lP=t9~_?EoLps-k|V2^-r=9 zHMVx>sa_Z6O_e`?Ilf=`W>RR?o2n)PPaT;^Zq~_;U$gfn*c6Uiw!~S$$LbtMn2n+E zULmujsc&cx!*Y79ZV1Uva?1hq$QCFtlfb#>rWTRq&SWNPnrDIiZXZM!MeMN6N)%sI zO0<|D#MdfbDVqU3n_)@v;-1NRYc(dO!t8Tlk$B7Q#DMX_)G(tFlGZa*0ms2+X}2rK z+-ArDmDP`rSzJV3xfJ6Gi(Hn2Tl#a;XE+$o+KFQ7NCGxTT+e?Xdk2L(Pm8>O%-0}a zpyWRkhQ{*9+fRTB({|py`-cKRNB^|!Wy@cDfB)YUSvM&=R%=(of^v*B&!>v!&Jom$ z^TMt0S)?w{y(I$&MIik%JSCID86;ivuww6@!`LVE$BDf_1^*s&uf+28_?f&v^|@UK z?*DYB{{36m;YW?t%jpI^$Za=Ni&|zB_f&P4hbU8#IjJ=Jlaa}(J<%s#LC(*yOP;|K znm>W{?w5#&%|pERxIug%aSu-HG>ekM5qwPQO!@;KZhbF(L-VpGRGQmJAepcKYTT!B z+fX6xN^K6#TMRUeotw}&zsm6m_g>fa;S?@ug)PjUiqIqXnXS$U=Vv{X6@<9 zy(9E_Bea4rU5rd3nAWmus1ryU-G-ZQeNO;y#|4<*C|90~7aQ~)D#eDHAWp3}#^ji^ zWNhba*K;49M-$HLKJxisdAh3WbG0{7*St&Uz76E?3_g;jiC!txKfjR%YCY{0A zecNPdRm_BI-0_;vqP91nup~7X;R}tm(h}*YXCEF+pj*kw2^ukufpuE2}j8%4w78BlXt0t6Ig&jT#-KSj}2G$EO*4<*RA$dO^-Jo_zo7r?&1T- zqo(_%S_JfZp=V7Y*^c-{xdVMH^665BxCU%?_O&0G4{PCqI}Rm5epB4mhlHP=EeNG$ zxoXw3a+)!>^a|xx^@W2pK`%NL)E`d~dxhg`du95x$LmO0G0pa#)rkRdq{&t5Se@<` z@%kA;=6o=rN7L^_fz_Ljh7eHB{q1F)Y3P2jm5`0VazxSkfizuM+{~$?*gjut)5$?f zX1ryPVX#0;^~^8t@x61ijf?$hfbV(LerDjV!x{-HeP_z)qa@rL*5z()V1Ziq;QKc< z&NTB$c{N$vXjLh`tss?)YfH!hI;}N(g*oF&vGn^cNjTpcq(g@%8FzVfut=A?symF8 zaH>SEYLsH3-#2F7f)`$BIAOhgbUBJ=w%Q+j2q&6}$(5|QbVzvjG|C}AL)+!~VI6!+ z1B|yOlL!|%_8+Uvbc!9TUr2wHxpNPa>{#P zTy-I{JugM#&f!+t8_jFf`q*3UEHZ;)ib0vrLj;oI%i&V#?ZsWo4mj zQ^U2^s#IjfgwN<&M>KMpVnZI)1wv6IVt5~1C3Z+vls{TN4<`L)K$?X)Ji z;JBVRXmb>KESK(FtL8kRb7CImH%VG4m+nCb!NaBRHG9(EDryqvn-18;6O>WIsk*{n z8$HoSxndAX2%Dd~%EBlYAyWzn&OB)~WI!P0$%X_RL+xdbtD&?kH||`fRlZC%5QvHW zn_>$5S}?+LHEDNnsFF$=X&n1pw~;I9?PAez{6eshB7!)vl2B(LL74cY&Q3N!N!A7V ze=4cY%U^HRld}ZjN7Sh-R$;TFzpOPVL;K~a0w^e+R539Kg=L4gca%=;_m0wp74wd9 zpQO=RNlSD^7fydu>;|*P0mFemWL9+jF^;CopzB&a z&=7`LKO#x(7i%cy3pt-x6W9%^S`1@knThzU3uyL`7z#;lemE;u+*Dwh!6lHo(i&lJ zZ!%apH%nhSBTF~SD_T0vFQq<6%M-yX|W z=7c}UVd1qq`p^(Ms{cg(R4lLCq@LGjE}WD8Jx?eS-iB8uOiqkrG8x^7UiD; zs_srb&@Qh`_!kmj^WT9aFo^f0*tJSe`^-UWHI&{jFBuf`R-x?i#}J1W-9GF{U3bAH zeHg<&5>{A*<=F$c^@Kg!kLh0N#s8*QKubRQxxgiUQ94s?);v~_8BiF>>;baDG&k#Ob^W58c)~NPHv@Bc`Y|JSct=g!rARWB z9q+JL)-m2m?$u+Y>sG$DdBVVUU#vb1Q1htP2tyjdi3nii-0y-rKIX@P>1ehA1FAU9 zSi8Ck#PbwgX44v>D8mQL%3$o&rYVHQD&~Zflm19G;NZASxchMu8mKMiE`cj7GYT59 znAGO-ehaFXm|Z)D7?dmc|FOLLnjCl>S*Ce*iP)F`v9*LnH6#eFPaqLO~*<8I~D~cMxDJy{B4mql{|x0i{B3OHabQmr45t3t_68HF?|pT#A3vw|RCNdy5*I88qTjeAScWU}|pEr-u`)^f+Z|@5v0l2i-M~O!0e6^5Cy9>GOyTPMIq7 zc_aj5wAi*&f0nKi$P4EYdGjMjlSvedkJ@$^oxM&2-D&Ru>5(fS-&Y0=rlJcV#QYzd zt3;pJMMO~LaJfl*NZP!eeeA4XS5&&HUk#uLw!nm=?`pLOP8s6Tru?WM%*D0uD=)Sv zm9wc?M$SHp^XVEWHvAH&SzN2=cl9Q~5V=bY^SZVQ*q_He6vBtqTeakB)PY@n0!}cN zO=7(uc8#V%AvfH?Akm+xIlMuxdW5gHw{A+pn77E6gSq)J0{}`3j%tNzr4VULv0+Qi zLx)`zTi{e8(xED?#`KUkN76xO>fuz}_ns6d1Cj^?z!nEkHK3rV_+NRc>-Gn^)U*pu zebsa($iNRZrYD-JD#XVNRSgbq4Y|$)glFQ2@7<-h=62yHc^NpyL6PQ8pwgECtZ0`~ zO!3mp9*|pDX8F;!SG(oyZgn47lWN!{ruB^E3J#85u@ToSoO{&Z@Qci@=DJERaH+4s zm+d-~g~kK*Nhe~EHk=(EgZ`I$;-hufFd09hV*F($jTw!QFjNsH);q=KRS2K{xhdR6 zQRQQxZ5y*|BVo*?fDxYac%3;hlB-qR;)o^et&OIg)OKB>TVZF4?dv5cURFMaMf*5k z68Zqkpci=9%%2oITTJwKcUZ5Kh%9H@vn|wF68O^~-{}tlE_~Z`w47?`ii~KZLEsCc zP}O44AS{?e>RchuOr}o|@AvOs!6lgHoby=L^5)Qa@@L1CpX9EcD%T)6V`nf*tdwEW zXU@k|!mdy?@a2{jS6Su90r58@?@_n+%15~}df^6TEi=bvob8)EKR&`y+L^RSBgY5y z?Iq4!fR>OqRk^tp!>LJI$v*MU0&4!xds)qQR9?1nCTWHW_L1cDbhFWx?|r885csc< zi{~3C&HDFwlV=tj%IB{Mvbt&+)@~Uc+vMpXoqFIt$awv*Pe&Mowhu>%hQzH!yN8Gy zk7H&l*V#F5**Z_;qP1RsX>jA6hKf-Crg-s_c}HINWF<2)rOY*c!{XY*rtfia{0DA4_9^;d7q@ICfc@wOkw zr*h_>PhK}oQ+D<>d4#g(Nhb&fSy+v=24ng3QwSjz$@ljNc|_N-6W|8!Le?|ErA{1l z?mgRKyh(=hjSlkob67xsQxNIEc`4c$&BO5z2eX`ylIU5a43}~&YIKP00WRcpqh#Hhzi3w* zIMtC1j6Z1gNdFax)+TqHAWCAGMHHv+-sGrK5+4pt^1}4VnvKlx3;H_sZ>q?I#D(N{ zsKo4r2*qCYRq0-;as>ns-Okz>NZ#7;TWTvrx*v(-`P1eqZe}b98PGspZ{t^q060w?GYdpU6sF9N_5ROZ|`C z(I>Y7w`2h&SmjNDvE!M7_DsX!lBVI4t4BRQ$?9MFa3p1NVh#gKzCS=E1Muob0RN#; zFu7_K@J48GueK|8D*ld2nafuZk^wb9sifz?sD(W_DL~~s;f0xJF+1H<*xn3&rPEu3 z#2THKD#ThmHfcWxn#7If!Wnc~Wjp~Gn8Y#?RkYN96f#%%b$hidJhBg?sfxy9I_*6cxo;jz3tRPdda>cZn01g%a9{`P5c zDk{c#nRXs(O4h=D{@?djEUf!+B`vhz(uxhlp0i)L1r4*`l?$f_G3N<{HUJ-defOJU zu_@aatbOLF8TDwdd4=5W*A*S_2mz4VjK;u7s zj;|vhoDtv+q+MSHx;_CH+3D!C*6oXYq(gSL&3*XmSP&F(C_g+-eolhfisPzVJ-t*2 z>&V4O10mcP$TM-JRkfs2X;^$-7z;mOmj1VstI>>~oD*BT@0cLr9cH=225p{9J{7g6 zn`#7ehexK3Hvbawc=ATi(SD6dGtohDN{TD{Wd^;gEzq==#(h`7@3nDEszMbn4$a2- zocj}sEspa$dRuE(V!-NsdV1H|L`Bp|FeA7BW9(D~Hf$|*`1w{|4CmOs0&OvXyOi@m zwA17ogS2`X-u7J|#+Wl3F`>>bZ^KwJMbGtCbp|3k@E2BO-XS4M%5epzVrlN1(6H{n zO3i5$TU%4v^9_bn*X7rXuV5CAv246xa-rl$Nuq@3Muo7pto~AB-9K9BaB6Elf)Nvs zi+-#b^c0lElbpHAZNWtli-gKDTu~*-$X}Du((sG(c@C1Bb<7|F>Ch4~e7x^d1jgwR zEKY>FVMzX!kly~oWm$lr87ulsOWP;#q`OA4eaZ0qkw-3T-Ok|TR^qUCRl0;zmcf;G zGqh=~sCd^P+W+Hfhl!hcO(~Hu4u8RfFCB1wF_>>4vN?}_%!Y1NJFQeMX=lXfi$?k> zC;wDH6*ytGX@Q(g?Ub;NJ4lm!8W+;(nH+bLO;=o5{dRzd$$vFl2u$TK!r8f~57xcC zNKwbvLdFx+R8Zh@@kPA58>%?mJC)gxn76+3cET&<&=phQy_y+htzF^n{R_l-QEOjN zkYof?@keAT(3)rXIgL&vcO%`~`Hl?ZuzmU?%FbjZT?#@`m7Tr*;d1iHINB z&!r6SgA4^4_1(1n1cJ#awitn;iY!XwOXMq<)D;sS^>N7`{6gQR?WMkbjKYmf<^74U`zvc8~v>Z_gIp<J<5&$8q@&_w` zK_kkePgr}4Q+`uCZkjvx@z0@DZ2gwP;`EcXQltgK8psSP+;I$ATTtHYPJB~hTsNYG z%N!(wU6!^^13Y-=HpP5~gPF4o3^lJZtym3A3BAnTq~Zu-ZtizYJ3c~ z=q0CT3^4UAlPLm)Cb*aq)o{lI?CiG(mTuPpGWp>UP6+qPJ09Bv}?(g`_>`4a-rYtFtdM zh10S3#^_sGCfYasXTc}HA*@*NapRVjd&#aclc`XRzEQ89IpkX~pK4{CWL^I`Dm@Pl z^taycRew@D@=kkPdS+^Tr&WE;jnL6otNdyU%e`8F5IRHkY0=GWF8jj?tsAg$3ch&s zKzU`v;Hy`UR+Gq(#m{rRRhG~Q8^iv|c297mv(L`3yXQEE;kkcjN9Tod^v4u>U~ONG zu1KI~#}IZ@8lKS znyp%d$ytx|2wDtUmV-TDngWl~{V1AG+TNQy3{9V3Nfxxss!admTan3^H@RP3UVgbR zYd657$)))I*Gx7B`-z!Pi+TGvMUKdF;t6eX&R?V34p>xPo5ERk6ydpAe_#&le@Qhu zwvPWy>SZrfXGp@O63gLoU0Uj}>c0=Gn={8g5#PXLz@N_#1_Qlaybhey4vqz(VZ+ik zlgk$n8EN#XzvTWC%istXiFEK}Ap>YOR|qO1;37ls+%4f3UpA6U%~jinJ_MIHCg~Gg z#9AZmD&;((daK4wJ@G7#_WPWwf@UYP)&rd)gthnI`^0A1es$)&NanaZobf)3UXx%q zWiA#H-v~!S{F4`J_;JOb^+PMNg51(Mx*1MnL!}iR4%8!mQ$#_FpTP)F?Gex|`D9(0 zBj?rZCockLEiQ+bGtj@!?3+f)s#*n`^)nawG#xIAM$1;z^?4CkdE2^6XdmZi(sezp zYa6Luh9~snWd*}~Qg#Ni=HC>%%UfSy$~7bm?rP+WYTb3otI>+ zaOIEfMymATy_tFEV>TIl(($$p8|%keR#HS|1CZhCb#!v33G8fkVQz z&djH|I9f^;jJr?dCDUrJT-hI!gLZ)d_FWg%ni+=weg9?Ni+uS}~;N+N6_fbmgJ%`_u3!XSXxd=!KAYo>+R2Z4=4L?QIPBiwfXlp&cabb4iPk zzMDObh-L&_oQM7{qJ0fx&4JW!{c9nJbMkQSrR({w2Ii`rfsF3T2)q3{N`|qYnSvwR zGpa0qGM$e;k9w-elVq^_%dXwgdzpZaj@lIc@XnO6VD7}hlkYH!%4V#B*)7!YHe^A5 z_8-^7PW}pg=q9ZeIZ6g3%iBH4>mrlrD2J)_c$%tW4RbRVVLg1{HJCP| ziP-FSax9k$bnj%o)mtTC1QiUit&Ll*&>y1_tzO$u*~9eJEiW+fi{=wO4;Zz=euq-T z3HPoriE|E&mms|gD86Uj&XOty!xfI}$#wJTW*w#~dJmA>hY~!h;^933ws2=T5@8w? zwVGT~?&uN(6(rXHQSmIn9>Y=We^d@EJ=SjDXeU!(exN{cij{**L6{T;=3@rIb#XAO zuxXKLRMw*)g}e1ks0mO8w`B9XwcBDAtBEU>@o%*Fwm=7P3^Zd)uX zPwlCjzl|p-q?7Ce`yYw*Wg~rGwGIrpneiQ*7HDEWF67xjPTP4Q1oI*rKvNaK%=*V* ziCv7>z3-VUvq;;&A2p~pC4~+rJW04*l*lcU3|J5ccN^xEGi#lxm}~Eh9fJzh&J+|8 zBK(rufmT!+lST<<-Duwx_&k$XWtOQ9f!R?qEGkU!In2$tI4<64q?mG**9%bd%ayYu zzKK>QNN6E+S9(>Ix2@4zw!tSCs)vDG?48*HOq5{>_@__f4eRw@nXIiG=Up4FmSwOM zrW$aizYyoqebp~;{8B);^D(knnyE5#xbY{5`$?I$W3ZHu5N)v_-{5Y-o$l2i8fv7F z*)bVws*2}&E?SlP(MTp_QPq=NADNI**-;sG>pK|@n=a}_PGisp4e;86sl{%RjRo*j zy6GeY(`3pS>zpafAuTv=dcpX-l!+k4x0QD&;TT@&Ez`KhQqVx@H)BU71zoFJB$vo4 z!7yHlM^a4o_^le@cJO1yX$aCg_tl{MD+M)3%}2J)z}bdIJ&e7NBfx=6kv@LNUDD1z z39z89OR2bqUqCda*Wlb~p3`?0m`sTo=Es)_TCSF0hb2`;jN-|yZ$!|xj^T8(oteg1 zaH@9gV!D@JRAub4SkHFHJ(Ij@+h%^%>W_9)%m-yvdP=7;!>itkg{?W3?4xrQ1~%o2 zTvMuKg4o!VzH_}?0+qKm_0QfCtYH1E)&FSPOj~rF$Wa|a_KyZ~J^{Oak*Ty+RHABZ zAwknk-mf2w(<*ukli+jy|FfdImFW}|r+-qj{fAGN7wolO7YZ6>`~|@9qJZREaNXf)_Rr3HOmdp6)af}D@Z!E)PuKh`3^6zd z`KJ|qg6zL>?{q7NZ=VhGuN1kBu||mQ+13j%ku`L0 znLG(KkAnqbMI!vDefbjnR9d!Ws{O4aKiL@9xW%Y@X;fuuBnu=9rl@-P=y8=fo`YVF z5HgF_cj=OK6M5}z=z)k<`^{jcHw8xMY9pJ3lWk0@OFMAgLwAL>t$g5%VR5dOXYngI z-g+bFD%E5zimZjrU*Pasn^?gy=g15POFGn87I#@h|x*|suLa4j`uBZ21M8O*nb|V`CKNS zSV!MqPk4B8O)nt)&~6Hxd@b{HK4CM|F-e;FwYPKX?zfpEdzdkjb##8Um7V73zAg}2 z$?^_qcXb7cSN}$XK|w>JZ;jjp3;?UA2kRDJ0Y$t%a6dGd49w-#%Pl z&S-LN!u72^UH(j69_}}SIfjecJQV>uva*SIk07?~N97Re;f_~k3->9hj~PoKAD zC!O-9re;d*AD#!59j>GY!=JSezX$gIrf5Ip4XS=AeL1^zVcHc+%|8NS391-vaPH-9 z*Vxh++-BvwI>vvFUM#z!kQj+N}X z+Nnr0piKEqCamse_cw)Y<%8L!yEWQ-mdgBC(i&Ipo+C6T=j=q_z16Oj_z1}ES|%(j zH|i$0Nh;x8jl<-Yq^RDc9sW9-jZ?RCId4Llo)yv?%a3}<4OpQ$)5eW!_Njo%yJ%>-DFnz7JB5$IY(+bM8SSSgJVS5RkLFKG`W9 zEWCVs56X=)W(~>;s7q_XaTQM4sI=5>sYRv;`B5GQD!e&|cvD&J3#jKMT%P)8U&@3C zg^WaYU3jW@dX+ds474x>JDIUXf7-9*UY4V~z@&I|nVq06Mq?QJN!$CRINm?c?t8OO zXB0ikxA{fio{wV_S5MXpPupvMm()zFE+2yS6SRw$vXm@8B+F3NU;O+|cR*_1`tn6_ zo_E9Y#ANlVpDZ{pq$AO%8SKxu%ec04_<(7@5$@$YY>yv-#5oTNfFCROhd6!(ryS1- zrvKI8UPibQe$Sa`lwZ)6!5EB>sZRFYKPSqRT%{tV-?7|YE|KeGpbi4(ke z`?zSY(|Mvx?^WWhj-JeD%z!P4q8OyY5U@Z*WGbn$`sHhv%bn zHI!hD!mIO^>fGkNjUxTbunPMGTY~*%K2ebXmj1+SnNDawl6>5rh9z48Imf+}sG213sSOrphm65NW+bj{2AK*i}nyiLdI%-XB5zbXDB>?kBFFynjW z^K$N4#ZSQO5bL5|Ph@JO0c8C&_~rhP5s{Zq^-Px~@FOXiVPI=JvdKbsKKEehQIjKc zataH6xKSY9)4P)T3qd3rjMPqbOSsq|9jmLD`>oA%49t~GM~s@+>%AY|8UDC@n|Z&~ zp0wbn>E@2Sdq``~cr7q?GFzA0V3D@u8y=WeQg~b{WCDfiY%qw-fv{2b%gI`$lORZiJ9d_ zZaaIem8o^pyJ*E$F&|IGyP<^QVNzj8{1tOAqQMS~G+8qPm8E4Fz-C$oWmQadIwl8kc14&UiclhUcf+aE2n~jvrr1Y5+j*pE%iZP4h|y=uYnw~aavqEk6~- z9%(xsWiS)$ZCg~!gJ$1*f4an!3(TnKv09eg$ZPD0W0TthOMYWKmxP6Q$L~lGymfoyM z$D! zxcQAFXvK}V3g7%&W*dJ-SH|`Ae|B5)k844*HmnQ9z|7h_R@zF{9;*x>Qt%1bzghTJ!5g;xI+5lT}cCWfT4-H z-rAsovY;)&&qhnmocZ;Mu-8lV5BnIMvMiO9Fx8t^O^Kr4x8w{|0$p&H%K33c{e_)M zCG95b%CN_Hsl>MDs$60wAUz_NdVa8g3ZQ96pCbEZp5?REvGKe5r;pe_39v^1RF3DE z{?18~aHiD~?t#n9l(BACXu9r>Ouec_dsMD)RnSGL%R z=Ot;|8WS{&gHvZO3K}AlM6hhnRq{M~Ao&|JrYu5}!>Fbz%%R*zh;ZrE~IvutPJv9GRQm{x7safp9y^JD{6f=5y3mw z#z~9~$++k$;6gVzf}Xbb8upOT*S10~zUM%KFrNq1!*68&Lr~E9TJw~cQ2G#1CE{ax zP}}Cxf#cc4gTY@dmiM3XozYs)E*n?u1wL@<2x1maK@j3cB|}Ik}Dsp zWk;2I5~lbh;=Bfm31tVvf`{((VaQrRc#*FEYp^_<79t^9D0YEY2pnVOl!>g6otnIAd3+=U{(dskD~!RUH`DoWS4U{}dkjWUyCKXuLYP#%s+h!;Y8}=je|4CaVui z&}WTnCpK6680Q#NARNu8ED(V)ia*y=lG|c~gv=(nx`(uQ$3lWz2IBpo2NAHYNmP?r=K?1=ut6i;~xhP9lJ1&V>_x>N=qk-zCY}bpt3VQE>ZorYmGM{kMc6hu@~GG{@`fP^+>;fvitE<4>_{iL>sYG0MN zHJ>JLr~FI7{f&a+1Ep3!*FT>PsE7q`?Pe07B9Bqb^7O>u7^Eu%_M765Np0Qg?o_Ix z!g{ui)Drbri0OG%V|Z_qJ( zsq8&jlBrps@U@}uQ6AUq&D|2avzG!)uLkfm-z2oSLQ}s{xA5`!~;~#L?vPjxMv-;Y<D=7zA+jbevhaBX7=*`5%tz#Y3P6Wx96Po<~F-^1}5rs z*tMzHF?)(J6-*55c42}s#m-sSg$+~Brl{CCTW816O=s76_RK|@aER8`rv?v&mtN;~wMMu4Auk-dFn zd$04OB9(sB(*sducAhu*r?V_(B?`1UCe)`~JJBhU$viu8i>Wd+Kwu<7Sql*1&*I3P zK=6unrhGG>WEJP!YsdZfPPb}wCOC*^iYv3a12#c2KINDN{W}y}Ghm+;P!zk?Tbg6$ zH<@)Li}Cn(*mu=|LFDNcV~ZhXx^!~lt4EIAxzYs*!47z`>MJrhO*Ckl0`N{qw9#)B z^@$7nIYd`F%W~2$DjiGJ)X?$kKd^yzznHHKJRIx<#tPPOBU0i7 zhTrP`)?0FDQKqIdf9nATBvH5Ase?nUl&q$ZdxFIAX^W%-A!M4iUV^diSoYyYXyeh( zOnJkVv#Bn2^G=r{^Xh|-1{~4g;$FHN`0(;}f}6(zFq3F!_3&C85ti1mSKO&SA$p!F z$|y}TIs=h`(z<(>c@JjH8ImXWMjJaoh$Y56-ChRMLpi8882rn z;0jg#BIdpHpRL4M5BKY`1N3|6)g1Y&k-4Y;QDlQIezEzS9jfmKJ<8<1T7u)kwHo62 zRLdE{LMl4%?Y7DLeIKgHW##5LZ2OO5bn<|M+BYY#Y%31&H5|zFLo;rH4a1SHa0y=R z8PWGhgs_h7q8g<#vO0}kbxD{p;~WSuS<4W7f|4jhf`y~Na+&WK5(@`;VO)Eq2RtW) zYKReWuv8nb?IFd%hJNcB06W7UK$6`XdS=LDI&;Pr3OUpq$anYy-;Wwuc+i2m}g)k6(E&TZBD9REydQI`8C zE{+I`VcV_!0;buv+dwUnta5kL%OaKwB4ZWtkOoH#*}I>7Mb^TIG_ktNJDe;k>sjHM zo~qFUNL!D|*-f3-PC8Jwp`srG>V1p#w|=miWUUf@l9>eO#E z*rUw{>81IsozgwooYi_5$yc70z6ymA58Mp|=EXMrEfC4#rWk#HPRFY3`SR(>?vzalq8l1`yHN0D8#P%ynJxYB@MaQDO>e42tIWjugqM7?Vs;W7FL zC!Z7rO4^ntW21{6(=;z+Gm>d0p&F&^o2CG@FF~ZZ2qIoc#|aOedjz$c!8{l!sLLh+ zy);mDpP3hn=cz?~H0rrjeg9dEgzNPu{Lu0ty7aM(@tdpG7YcqeXhIt|Afa+rB+u^*?K zzv)dBgLz^Ty_lPIxJW?eCvEJ-!xAuKQtc}@>N#c16ECRR=()U6vE|KEeo%IW}w0;{#SKGIwHH?n)H6> zR?Dkx6+g1}RNv4^lg3y;Ztk|?%0yEfy3m4>!DWIPp_`^DX1z8PsrmE-xNWBelE<+K zzFd4duVG4PVx9xw8A@l~@*1ob0nJr>T3!HHbh?Pl@Ui&0DohH@9m3AgUApmGe&*E5 z1b%9$9(SO^<9SHh{JwWoWb@=Q!9(e+=5{%{xm`!VeHNYD26ZFZ4;d+lCKSEHX!Xy! zieZVzukqv1xhmvhiY|O$0qHFZ4t6Fad|xjH*PSPsVGMNCaGFc|1avcBai+T#TG@&^ z6Z&~yH(U7cDu0J&g~4h?b;@=oYkzOmeo4bDgW&x@H&xu9VQbP66YPrbNPc~~d)N^) zw=YngLh)#bJo_M1K%D*$R)K=gR#MCE-Q}b9$9i!@8*gtWocyXA$o=SCeo!o_7Nvwy z3<;an7E%daZGRyA$@x#i1YI(AExoLn$x?@33pFvr2bilwiO9^u#wOk0_JHeC>BDqV zE$!_eA+<=s&pDHN>yr|N?9XooR+qd^0@tS13m}diQCQ;+nmkXP5%vZay;}Q)UhW;p zSh{>C_C}%anxe>RP*a4mqRICTd2Zz}#XM}^`CHdRKU~mebnPPOs@;q(!XkH>3?nAa zkz9+|1{dY$TzAQGKQHOSDYtqnhHB(NPa(<}Udmu-;ND}zjj3{~^%~OkYxbux)zU#V zic6BB0&5H${xKf<=x68n0d@Y+U)y!$kDjI?O*!Gdv^K8{ zSkoWE@eGkZT|IKw=Fwc!v0~BI&GR$Ihm*UqK{y628_AH;%9K3kHaWCg%f8#$pS_VS zob9@4f7TUhR+XGB!sC593n?~UOp|~ahVs0*w_W9|b$Ks0p3`j{>=MPL;?zv~OrcCZ zsBV=&DWBfg$Vn zuX(GKg%p%4!Ozp8F1zKZJNv@3eQ?m#o`w><@1U%iX79$E#-n4pUSeOC{&Z%{M{5G5Z-rw@vC1)MBMax$LI?6uu zA2R>(u{YAFCG0PBLp?5Se)TQtBme2PDx7 zP<_ul6Onq$KwOn;h<7+nBUiQjmRU6yfaWh*>wvGaAGg~#i76Ka_X^H4k?>tI6&4}9d_48n%3kI!Q@!tD!6JbcjU%rMYi@Np0UAiD5`@hrBt@k&oy&bp*O#S$UmEy#%qvR zJ_|Q-bnZFnN{tnsdLnTD51%fTO1wFHj; zGyI4)60kxY{V9F5X96Xf@*S$@WbdLK3y7jWMz%*}FEaw0Ce#_`C@A{BQ2a$pHZ8vU z-zi0g)KR2VkJXKD9j=YPRXN}mV(=n~q8wj>T?&^KY40c)TaXwv>uD%)!4yfJc4FD|Q4OBiCP^0O8GA28w2~4*RTanMM8Do- zJ5Y4r4JQ-5Pm5}@{-h>gyC-X=Y9K`uFjLkHN!6*fFu%`d*U^Q|sU}czR+*sz@VJob ze#(ouMJ&%QFsu-_rO3G%C(T}AMA&*onr>bk$&k(!wj3wrd+$79XlfYq)Hz#WHs>IS z!uHNj6y2tU`j*@9(N%t1-lsm@=$X zwW+Zi+diJqp8WAe>}dA@U*YfQv7u9cSg$8Mp?Njz*x!p7J)0Uk+UZC;QDA>x8tc){ z?yWBRg4wZPCFzSF;uyCBgYb*=IMALr0Oh!)7*-@~6H+#UEHe6)|MrpCMy;L#^^)|Y z+!%tWcy|ho;CWw_vCC}TS=&yjg#=B?1ZI*^5*H2EfY0mHrzd=6B7L~1d#Nn9s%-xv zC)IKOs}0`0^^PJ!E2@Q#^kQFyU3Jc^VFA`!O`WO8BLN5BjzkxCD}4C+sqfPp7P`J9 zi-iV=v-wbMB87_G6 zm?XWOeef0CW^!EuKV=rRr6vz)m1nSAsuE7=GuDHAcK_nzBK_op?<35Lt>D~#y-5(2 zwMWrhtmPl=8YN=pf@0wBXq>e6wK?f|&y!Q*O%|w4&CA|?$ONWz_cLg%M<5D! z==9r62=|aIt(AVyXI5#n7XSrusMaBrlnxU!Zv+Rm`Vi zKr8QmKPHv-z7f;uy+UF_g`b)V3=0+w=KU%%y7)9VA|}x@nK=_IhI{45<3SgevhGoz zFpExaGp@gUxSCsjt11v&478$JoAZlOi9ca#oMq5xVPkOFs8>^8=;SuG*Y}z-7szG( z)vZC?@v?KNA0W$XHS+%H9xrVPoBd6^X*eRPnyotdLi-WYRmTQEKH1EM~Tj+|;=)E^Is*H_f3Mi6HK>19b_fSx{QBY`^s=Z6}mf~1>z8g3Aq=G-7 z5p75(!C~5gh)oQ>|#!3uy6fQG&Aq>-EeW%GETuyb~v{eJ*yqc20rt_Cb8o` zeQdahCYrCS$Ayyxvx=E+8)oyPTVQAye8|jxJa(VJ!ROU>@`S&xI%e$ICEcQtVAcW# ze2AMVw0R-1Th)_<6C7Z#6mhj{eND` zr5L>rr?iY21(qL#Ke<)0EA-={QM7vrX^Knj2|N8k>ZnNPQYkM_{jmQiGP?pS%*9{H z{erOldViiYx)Rq(YnK$gF}jDyMKZ;rT(l-s z@5sUf@q^_VcDS(8Uxz_?{tn5i``<vJbdgrT0t9>x3 zTOt>Ba7nLp{M|g@zc7>Lj?hjgLk% znn|ogxGZ_5Mx!1{?xI3WUYk5oZjZ(Ro4@Uat+?OaugZcZnGRIZ|*Ag4>f*Zj1{3{5O-DGIL; z$PzyD+JptW>F|PGb2~1}CEggHOA`8^>7J<#ZV=)V zpn0%XAD?6#SBe$;1td&+5RPo9b!)2C0eMroo87sT2a z5B6;m0TNb(j#zU&x&-}>p2$;&Ek*y+!11McfuXGnRBOk-jn5f>YX0xejVE^iMt8NdH@`5s&m z&o*#S0hUhNSRafve}ktlHuzw?O^lg2DH84{j`g0^!;e}esJlCujEY8_?R6Dyf4^0ZyZHZ z%}(#L@R$@qm5f7Gz~;>;kx(So2t~b=)+=o9?AqSQzU?G5QF4t38sU_jyFd1p~@eEaBmtM=B=_qg=ZtPtjyH>-t6x& z%4SS8&BPU2+h=*IE8Uv{6Lh8JP{)e8YtmQMes3-{FE}g@Ix?NSj}=qL_woh2)$%-7 z%{M1X`3z4buB`UkmU&&&qPYuW`<#bb4yhBm6I`16w*bcGAR`GC<#95WiOkFTzkN5H z+;{(lru~bL&7aEMoQ1kNHM>Sm>Ttgh)k@H$DDq)if83v{M0j7Twr#c8?&%F!+h zD)pjmlolM!4Hg_3QrlqA?KxqL4s1p>wy@HHNSdUjr&n)q8dFtVe^aBv?Ho)s1-Gt_ z(Q(^(XwS0$SRqM(6s0w$X1Zs^gQhwGqJ`jakG<#BFQEiFeF!{|HMb(yvtWq(WJX2W{awCO zJ7k4(s|63R`GOIhOH5xUE;2SO#=7d!oQU)VM+8&h_}g4+#(Aogd-mwk*3!r`B1*%Q z?G}CZ@_7>SM^z^+4nnVg z+gA_?U9)t(NPqj&ocma4w<4&>pf4XsM{L23}a5*VolXxvyV_ zt&PD^RRZ@jA$A)x6-xvoQyYL&c`BWekC}|@Ien8(DOaOp$IwwvUv&e6q?|5OvN6&j z^7|B|G;wowZPas*ybe&bw42{mwA^ebYaPE_Q=Yrw)W>gtZ}Y6*42|OXc(0Qe&Rt{s zCw%MiYqmU1iTT1uV?28W);+4T(@%G>t4;0(pQKhS)maZAR(dVUImerNc|7MVaIYU%aUF@(XJ%>kao# z{o}AsF1{=V^ve6&f}m48#fkQq!HAKWpFHSj1yLsz6J2?p>S?| z=5r^L1q7TE`XQF5RAW@*?>_hFu|g(DI2DW}h=j*87MHXx3j9U;*{~)4{zGHryxng0D~vLeAK+y^)r0j*>SFEpk3rA3f3^;SIjaJt9yUIlaV>yQI*liM zZU%qemokx!!awNzRE#l7Dc1F9#Uhy}Y(>6xX_vUYZhXO+xb1c?syca$lFA#$PA~vc zbE4uG*=}i4*!;~x&TeeE&BAWt$0fxp8%deKCNjYPCf1}x<2gdL$P?;goexIO zXw_2E8#GA=S&cp-(=xZNT$^MD@KdsdU{urR1Y=3|8*Z5|#2O^i zdfM6rh#xa?=gih}NZA^;d|JH3^338c$G_9%>w)+f;X4V=i^HPdqt_Pu#SVAv-8`3U zwOGvz=x}7XdU;t+*(}0;D!by;0psC4X}hd1(>|$1h9<31i4dmQFk<32WEkb_{;av0 z4JJ+t81;`tG#8hK`@d_p@z~5ak5)+;6%Ltxxmkiq0uz5PDl%mGn55K2rO1;Ek;iKB zb8hUl?6>0$K{+a~0C|QV_AgoYokJTD694KH{@AI2GD&`+p!ob3=;i-@(lq3gCxbe* zkxcgr71N$&lm#ky@4716ZYlzLn^E}>#5br>ItJfn~7H6o?lU7I=S5C2x08Y zMWQTfPiRn=Q6(mwA|@9sGD=BRYgsJ?E3WBHO6HD}n0)l&Fn68Pbw?T1z~2-4?RHG``qDo5lJAFx2{^ z&d%IIQemdr5Js0TbH~_red3E(4XK5t$y_~ii=FLs|8^A;l~aT?G^lJ*?_F@cRW||x znC2HLuBByep`!H-U47LDmc#=>^V3@M;Ag+JWOc^9bVZ|t@wG`UYa45D=vH>F45b(p zA~C+)X5^?H?48jz0aF0>_ZzP2lo`&HU}J4;iLd|v1P;A-0RLyu7#%Gi@dX0{gnp-F zB9-k$lDC#uMDDoH_9kPlp2WVdKBd@K`vI8{-S+hQj~gS~vtN}Os(!~3d|C*u|5YPTC8TGJnY4u%osuAODz21TX5UNnNJvKC=-tFnIAD+rIQWYgmj#V@! z8&DI=9eU7{Y^JnTR4mGJ;z7-KsuBi6Tq;UadYM!X5R=W6sypnC6?^r;Y@t@v5o~>; zwLtwD(%h4lZeJ1OMXyR({dq8Y#+V3)P-jGz>~iPp+p=bJy(&mHJ)w`qaiU$EdA7^3 z#CxlXf}hq^7Sdu}?XI9;oPh#btb~3xNs7#PqrWh5y=!Ek+Zdo1f*dK*?LhiY1`l%r z#iIW{ow0&NV~8At>CzxsU2>EYRy1-^<;Sy8 zZ@*CCgcl4bbPYwWql#OEQgi}M4qnrUtkdqjNFLEYNNxzmX%1X|$KS{Kh^im#oU?o}gP6cQjes4i49fv4{ zrO)(F1laca%E;2QdY%slhxNW4cM@~9W&B2k)M{2+BX9R5{WT-)MiPiSPg92H#`96jOy>L?HO7^pZV?#`dhygWC?9&R?H20(>nP%>pUxgyZ_6J zSl))6XTRLbNdHk7yCe(rJO7ISD}#!(X9fr?ONnlSA@Luh*Hao74G4>T?d%Q~O1!$- zqb;m%-htjz6V&B@CI7yBdO(S&$}>o~ok*i!H}KG@R%0n8-M-hQH!6Fflb*xDT&$$6 z+aBCc8P94wV9yMkia3NieJ;F#AG1EZwRImer`-e(Y=6v$2HN2p=6)|eNqujOzrg4& z;ha{Rr?*40)KEF;nFALYgzv=VO*hMI@+!njAw<-OzFMA49bMV&tsC}WVRf^tIawGS zt4MF&l$gv7PP0cF8Z*e*e@ryIheDB_?ArggWZKsND`7& zLB;yWbDwg~%C}HCyX{NW4&^2l&}bEXpBc-&Rd&P z+Uk-5WtoL<=zHg&T+<#MJ9$o>5l?UxUzd?T(Z6Rwb}w9L#tQ64b>l%nVD4YWnn0H+A~Ij^}Z1OHT)VA%6R_E%E7R zSE|vx?;mvxG2xdz1FvNDMcSH#@fOE}fZUbghELKby1@S^P#B_DS86!OV|r`;SYE|A zH1H&GC7?;ZvtUTxKba|q_9qtM-sv%OE)}!$J)11&=($l`%g;%!bDZ}o+!01XB_#^nCvj1wv^d#jZ4 zN0~ZOCB-I5lk(OZS@*P};?d3@GwOMdZgqR#7A77U%{;)zEp=bMXUnPpY{X(hF^KRG9@V|O`;fze|L=dwX#_Sj|MI(eDZwIcZx|W@iOb9zpG(>EriboY zx%C)XVNj;^$&2Pb-y=Sa7|vNX)1D))_!QGJp6!I{nD0Y^%rozHb;#$J?-6hoR#!cv z1vVs-XlR{IRb|Eny!}**XWiwHaGKy0XcoqtPfap#-2PN!`e%c$tW_dl*z5HQjbGZO z$HK8iROzvNbPUbm*<%yU7J!ZLz?oPlnw~xUk89$A39!1^>2S|sKE~1605gDB(4+4A zlkc)_#%HgIynL8CyTXIqd^2XbNITQapYC-x_nwj68O42#5X4;QGybQtjb#-27d>?x!hmt6v(73(|uvAShT!C5aa|#^# zqz+XWRsLy;d|LxrQ{gJ65y5GZJg0md7tOH3m5(Xkd%g-9+ppHD0NkUNotGvwg@n*% zb%&7GvG-HOK36rVR^gu53uDHOor*wV+`O53Ch$UxT~CU~uIMXQ)NN{jM5=PsFSpn? zXmQzlo}%B%o8p0*snBu4iJFbtDv<@z^QLC;%ad5L)Lf>2u8K`cx~2?-mzX*Gm<=)- zcg3y^&^;PMHztmTNtLGQKK6aE>*;LcTJ$3{^i^0(bsSv5tmcH z2BAt@Pt=*Css!z2YZcoKv}N*>?4dEEsc$IAWVQeIp*8!7;&G-Vm;GNGkofF<)5$7U z$P??`>nBRFS8CRelF8pCsvJD$5T>~SghWowZznt{Gk>nES=)E=g~cdf%4T#Uq<~;s zy%H3-sM(W0x&5VGvCNmRrGAU2)v?qgQMk8pZ1dr1OCk~mCIMW8UQ{+iDmaw-lfB~Bu@whGBX?1?$Ql-<%`dps7;yA4b-`J*I|j; z#Z6F&m+L%O18z0DHgn5{3#!f0Oqf2sfV)&Kn9a{jV2paS-#oo_fD8RR=;XF!yYi6) z%j4pcXWydynaqPG3266mtSZL%u-uPf$ZU}Y*|ZO#9Z@O-2fhfVm9Ja~4p(u-?S0G* z%D92G$9Q4=$IV@3wL`m!`IS(EU}^yIt~pyW7K>#~K4zw_+3i@BF^3RcTd{c?7b4$} zpL@Z?hZw6D9|CvOe%Xm?&Jp$P(grQFdNx|#21S}m%Cc)OOzo>;k{cddM3@L`odP4O za@s^2o*y&qjhTj;2xq=0$G)G!T8SnWeME(PdqO~T1(`Exh}`qLi7v}4b!;2H(q3(6 z4v~Fx1B~z2pB25?Tw;axn{uGTOT2R(z;Z=a$(nFSM>86mOp}I|$Y%K)yy0aMS1^jx zxqp!>E@3tVPp1WdK#9%(gZGX4#(D5{@_z3ygc#Zk^3QEe$UXi>Y zMh)f+I`hACl5$e3$Fc>57Jplw@;B`UT`Li8*RM)55YiModRxb@#LO0mq0KA)Omj{w zmQQElw$3~_^ZW##Z{G*asS?XGKQdQ}aku3njnnJ1VBR;Yw@G$~8Zi#Sp9u1Xd1Q!>VVIxtm_Q|smiA5aTM8wd^D!h&jx1e5m@-MS<=0=}}$ zmZ-;#5dx7TZr|ifFviovWZ&3`uBBXJ`-T(Yd&LB7Q8aS@((eU~<@s3z!y=XsyA#|n zxY$k@C}kg>n1qIQ@G1%@y`EY?$RqIXAfYoc2Po8b+igvwKhc}5 z9e1Wzctql`HJZsb78$H8ZKJgq-v_3DQ@e!RTU4#B=tZA7l||J4d-Fn8)ZV7_$|1-Y zc{pGqCNjsxUgq1%pLsZ3m0|?T=qCk`cy~(7VS#?CZN(7oRBJK42i5s)s{t zh8EW+N4PGubjg9Azizmt64kRbCk)(_`p!7I_w<+Aii{*WyKh88w>$LtM~D+&$%aX1 z(Q-{c4|1%By&6=p2XvXfo~|X<8!=w)|1405Hr3CWg5uu)cOX*`kredbj0a=-2SM97 z8e?#; zn%|U(JZ)k)@Du4RkLb({E6LCWqWauF`SMit67z(|ow0*8pLfCy1ZLx~m{SK;i<%9V z=jmQ8!m-38^~sVAt0BgVJt_|aK?h)|ejB^%DGd;XmeCqz{4~^L?lM^M!NfJgk6OHA z{g`i87o^FLQk9|G9-t`fCR#w+1CMjrmg|Q;SL%;_5kw}@0KDk8w4;Hv zzKZXwj^FJ+Tse25#Q@cM1N(2j1-`KPT%C2=13I&U4KSLW=iWO%WMD_yokM&90mG=L{N05X%TmqUsVqXGS{4_VTBozP}cx95(gX zFe&!=<{xjBoSEt%rH-(k2g4jy->^TXoex)o1-gJ1*Kn+T$3*L#Z{g$#==`h(t^4>3 zuIkOojk7L~2)pyjT%4!~n|r<_BWdeVEJ3N9S+`#bm{6oH;=MwpcYG00ob9#&0W1wF z9mNm0hjOgRDppqhG1LD!BX_}WbaHfCD#CgRWG^RFz+W_BVgJ1i7zeys&>njWT^sZXTZ9+mHmC;`6o3;1S8x*U3qn zpuA_l75o&x$X=NKNvhtbRJRarPmJMX3 z9;>h~w=)ad%+aVP_O7>j0|dS?1It7 zm#=n~)KBvm(w=vmZD!XN6(G8VFTfi;!G7?-g;2Mr$CSSu`SKIL0KWQc9}D{8oDIXv zYltUNy-X61sboa8hiqnWD?UoRQhReDr;yZszhN=*n*;?3|Bfo%+j6@YLseZWyTERr zx-%rQ>@E*xr`Gnjkm)h~SAz0ut-XBO!bVMww+L%J6>dPBhN$U;gQa{}irs${ld?DZ zykwJ0U@vr!Az3au1Jt1Qw0W#cBHT%{R~t~elA1rZPDI!=Z)FhH62*kgveWlxKVPl} z?1UMUnLW!BYRxXNAgH8ZAw zB39`GJL1&@0?#0@ta_DU7B=Y^XvK#W3M}5SvES0M7WpHX<@H_7Ib1aLR{r;-9cj_{ zz`_!C&i7JR4bi8n0Y$@Rj^+y8c^;X4t$p+^SfJTd9L%Pe4yjX}~v7CNkIoY zedOY^xEPYt$t^x;d#!b!g2p?&n|NV-XB!qI}Wck7Uiz2l=wM~5hxAi6aBX`avNF!wu6BlA7t#ze(vhECnqdX$(^d{u`5J*Oogg;v6iUK zr;u76RjAco*-*Oqy*|V19@Q4$nRrNTFwhawPsF*bW-Gt9SNxJ3Io>IM*(@nNgk2v> zsWOb&rE^zpx-TTl7~UhFapfq5F78`9tF(_n#0F-4i8nNx`5Dq%WrG;d%Qf#kKHQzu zy=*YfN(h%&v?aoYfcwaGy(5Cw>C98WE+yr-COWL`b zSqtz6w)dY*PsDG!?K)0YnC^)kobE#iV!#mX*Jxa}z=wqvE9t}CotE(sF-1B>KHI+R`HmI?=F;^;?x>&BwHXTaXKQ-h>R))TBi8E- zRc+EMG`MfUJj7^k7gs~3^DmSSQKkRR@FFWKxx-$R(C@?#qKWJ@<%dPnQg;n-?TH_* zl;gw@S7UJ(B_5T*4ln66w6s#aZJKZK@KU+i1O zO-?BKyIGTiC1zE8%%$8?`=We}@IqvzphufKU>3@449aA%-?2LRU$FK6>Zg<{##`hU zT2N~IJLs#ix={rDN=YzJpmjnbDU|_iAvnMkROzsV_!VIGfA*1l0^p6^{hCgdY0qD5 zb#@5z#!PDM190{AurOQHzT?0e!UmHQ=zZORTIo>wEfC(6Q1p1d^x@6N1CK_AM_(VT z;NZCO>D4|Qx8raUBr~J=U2BN7jM);rku;~&=<&2S^?EJJ`Oxm9R{(rdGlWUpqeL0y zHEeh6C3I5fo1I82lk{y5f2>_ZT+QArgFD&ItmRrHXlr49RF|s1T?~lP##8QVwEt1y z6n!BDS_ePAT}o{dk1*(7cFR?2ZQe@Ww9CNO{9{uGmoINNu346?G1sgNh92u79iyWj zM+~CzksUjweZ&RdPN!<+RY7S`QV?TvcKTY@={ZZTQsNi(fccSVd7h$Ruw2;UNS@tZ z!s4@mj}L5!XuRvqSQap#=v0p*pBLhXm7u%Ga=I>T&C~3t7J2l#I>k8q>QwsYzLb~a zW18(Solf`8vP+c%rnfl=XE9(ROhD=)#dDeCteM&33*#X{@pt3)`p;2#KKcGkWSWfl zlKE@Cc2{w1ZX242?m|fO9RM>~+(He)L>m*#ZPRV;AP2U;hezJ@(p7)s*C#|TD6RKj zcu2rMCj!7 zLWxZVul+c^rZ+cugFrv@J%5j(ryw4PV-wLqeOYrM|74TV)FF0a>%*aV(9PIIAJ1Bs z-O?$OzT^1?y45pKI%S(T|+JNY?&EJezxsX^NIN8OCHj1)*jjzJF zDVkrFkkggLN%>CuFMuLKU`&GkAI#4q8Rp}^JlLr(RM-1Maemo*4+m$w`i&CMAm%yh zo^hL^hKG=~7D<;i{%So|LEX-k6|MBr8Kqlw#rJX{J7BW$E#85+cYr5Y9_avhgUK?PgBd^wfQD9fcmYeyCcztD95J+ zRVxv*RLiNOu$0qf>9IN8ITrzGZ;t&nNga8Fhu!YbSgt` zoB79lgE`tLhd&ZQgKedA3vstA2J>beI@o!HKzlRk3 z57^iuKG>V!jsAWR@6ark5UOWcp^&n^$XFMbQ(H0}_HA8PvCD;>Ny{`B&uf&DDmfF2 z=4(@PDt|a5P@g9Qa2IJO#3;Uq;Mw~qDjdMO=89!oR&0@Ob*}v5`EUf z>nzS4FZ>RHce>=3f)Nt5=*R2XW}g4?9YQ4W#lCqCGyZjGdbz3YodBY>fY5S_XVU}E z{?~rR6X#-H!-i-twEzC#jAy%L;RdCmCfKBjLFnEn1ypkBZ&}2q>oHFfadMH!qyEzz7Q|33u(k&kDI~?ByAp(=l~R6t?1-v?u-`1jujMh|1_6a7r3Ys{ zr7S6?a;7*)^`LwQ-5+|^8;h}XRHv~+SxjbvO=+@lPjLK`k0JgB$xRRG)08$-COZqT zgdd4d{}`sV=(C1zE_RN0w!zB=9@S3dcKH~Uf6z4Z@nuv05VY{x<1W?LWNV}+!e-%* zrAn8`+X?NG9oqTO70@W87W%tCRNhZk4K&QY?Sq#8A*$?qkJopo#Z;L%C;63e#r17BB+IKx}x`P@OXPW zxePiIWw$9+9N1?px5`yhd}5oYgn}s6rkIH5A4v#x9x#^dZ7iPx7xD&H&>8v%bWKh> zxWxN__~X!Bacx{h-9!MQ^s9jHx_8Ggp6VQt%lEAe~P^O+v`K0Kx$| zNA2To$w%3s|q3?gs@dVxaJZPHI(bRxonz zRbX`r*|nrKs)8}&4Mng(p{!054TrT3rP1OttWd7(XXL%&MxhnmCVl&IEtCn&h!ZO( zcN}avrP+3x9Xta$QD}6vir^SA(aVxP+L&+m&X~h>NMJIGm!0TG!IPQW`HA8~eo5w) zfz~Ncsyz`EU-r^nrfux&D<}Pu<;6n8#);7_4lb*TPH`qDh2OiwlS6k{B0n#T_jky` zttomb5vZ3{a{=m7KSvebNtRc%w5pyqln>#>aGst;{7mJg3#Swr zb2-?`teo>K9?ZN)7F$n>(%X3tY7fl#JeR(b@`~6LdLXXWo${hKJN)_uygjJ%S{L7| z;Hu7$lwUi>9xW)3+IEIG7v9>R{oc02%FBC74UwH0#7Go5ViwsgehhGJQ2jFFo-NW% z#_=C)GrYpB7ufK-EiA)AWPSKK z9xs;u>bQ7Gmm1=;3XuOvka)GKJe|jO_OO464R;_y-2!W~75s=OU{2rOpQ|-Ua1ly! z3xz62T|r7)}GaSb~CFX#h4SbTHO~;;@?f(#bn}g(H5fz^k*>=FRs3iV=%i>f( z;D=7`f|9{;5qrlj#G`C|U4uHf-nRJD*}Db^y_bXk3*@8TX=Ec9SMQBKrV?ZEf8d$} z2Nk%~5sIisrKJFT3`I*ZzU5|XOkhSXfFD~zT83d}6e&n-$jMWeWVr#{pTBO{xp z+iGeSE-v}DV>ipY-Ti071(7&^#&U8r*67rSi_RH(0!=SBn(!s@Vv4h9Ppf>~6o@B< zq1kYqVjVS(-L)@|B{twveE4XQ#f($1{A z(E;<2NC06W)PeT!Oo7>KW9k}`5N*b`)CtL9cj1+jbOaX$gvtyDz!7Tl`u4)>UeV{y zkjTe`gjm4{l0kpuf}ZVinFZ z-8ndzLt0aCRHwV{ad4pTkK$MVEzCy!xO%R{Xmp+Y1NAk}qW7;p3gG^vsYIs_ zIfHOax_(CTk8G&!>1!LZg=E>UDLGf+GEI zNg5vnCZZ&I-mmwj8O_n30=rP6hwUrJ#eGd<%*!t@9O&<@ynlTE`O@O_^Xq)lE5Bm< z=RSki8qp7~dlW4il%_Rm=aP20?tR=$ccNnn5vsk;wvMsGzWt0DfAwf8Ocv^SZ)hF$mC#47P3bv6R&=#5w}NDvy8cLT&!38aQ8vs=O^~_z zokLtzKIJ~dc8|%DPF@&X?eq@W@hnU>Db#K6Xak9CL$vs(a0^+sDW@4l$OQ1xDaA!G z_ccV?Wm}O^Cff1D{M0d?`@YmMb++QpedibV%}#kyl4U*^*!)IL^j$wn2d})MV`KMP zqOsmIrH}q?4j##B(?pU|?#XmDzp^~VBC0qF(4(k1T;F>FkblKo#&=AHysg_4$i~0-KTGaQh zk7i(x44QIMzUVz)XzccEgwmc8EV^#3Fya)DR8*JGo4#VXOT1Y0?}x(c@2>``dqbdU zq@Egd{v-!~$xy@k`gQ5i3ON9MDmZM6ALi`KF0XC~s~L~2J!F07+RGIl+1_+)du;!z z`0VtW0Z)G8eqTumFx&O?TImjI_cA|4b7SWi%-dwDKG`Wbd-36ag`su%z@B=7h}U-a zgSy4r#$wbnC9w5AurN#ezm(rV6;=t#r6#)SGXs6+F+V>a>siVv=hQEkh?JfFq8Zsv zFMAt#jB<2<5l8$&>4pz;T$HvOe4->Efa6()nnTeK8^i37QZ=CLMSN6ub*|d(?M9WT zi3PuFrL;qp4?&^`O?p$-PHOtVGn-BTE1-P7!;*!XT|FUe6fiVqs<;MQ2=(H9Z&P20 zn>HEs(3By+imc3goGOD6n7{u+m@#naRGazTtqkN(#) zU2zk4%P9u3CN38=g->`VWV!&y1VY_~)$SCx)g#6srbxJPx$Scz{|z;nj?2C(&?UP! z_%FRzB_F>z9D>Yw-`&;zPuAjC&uC)J1Q`}s8I##o?^;bAQ!k-kLNz2x`Ks}a zZmIzl)I*rO1nuTO6>kYPvv|R{@8mHyCrZT#=*x0=LQa2TnXU^`{RG2z5n4by&eE|5 znLn|Lrh!A$ON1|lBeWQLUrKQHxd=OCmwVN^`Z?J|%&%r}AWt^C2szF!GgG2db6YkR z!lKJuzbk7lrU$C$d9L|IqSJ8lQde5=on(hG8G(Cf3Da2`EJ&MuDgJhscD9sBX!qaW z7u-!Em^a?#*ro`X8+{pWOC~0p)}?8}`~+HMNC^-Q+r$N9o;Q^hxhxLfn|dSu-~&4j z&owJC275I7CW75vzq+zivKo6yxvH4@dpL*H_^tR(Z{=i>ezv$3<&3;~ z)CY$J7Wco~e!K==*B?T;r`5+D6F;;7f|Coj#LTvop?t=+#X(tu+&Z0l=?%4?&J*XV z$KPVkfOdk(>WTIZGM*>o-CFrdesAK066MDl9aU}&{^z$bh@MwCjO+66eI-HG{cO$G zoc9ooM(jaimrUK0i&Vxm)FXUhsZk~S)%vkYZT07WIrG!n^6Ek5?u{Z5R7>t2wT+g` zL_YEpr;3r?sl()~e*u9C95udcR#=LmU>RAPA9ngw+E2~ZdS_}g_hNf+@n+*GgV%N3 ztI(1LIjgGqVA2dVr;G#3gUs^=ezRu#=aFjZob2M8w${&+(&&U=G&1rtCvqJTJkOL} z4`R1%4yj;sq>~T5c&lkVD$!#|!EdA}-f)DCpo^$F4Xj_E+#4FE#|vi&<)**j`?Rf- zjcW*Pe5~?9sgO~orccCMoj^UGi>~9}F9#cOCAJD04oR;oKwaXpbi*y1TEz z_exPmjNWiJy%mecP~BvKgJSEmdpPQdib~YYIJCMr;hG&;539sZC)!~%mX^ju@z5hv z$s=xUcuDAE6O?CaQt5L{r=G=o}=j+TkXl^TS;3^Xs@|W))7HpiA z9&IrrIO9GVxnI&v*WVL`?wgCeOv}xe?syw{CN64_4l)6356v?)3hj>*J)2Do({q_Y zDqi~nof)l~B(iF@E%ys(L%YXjY)h-C|9k+i?7kS)VMJhYS8UP$zGz}s_7kXj!X?MH zRuZSJq}kJX>Va>cFQ#U^gkq{sE@2-r3c@b{NX}Cod>`T%&nq?=09g+cm|yCTV2p(q zmO5pIixru`ovr!GFBt8HEsldloHL}twaxYZfWCnIMf3YVRQC^uR6U5VEYZ_-C*^mNfigc)%2_~oYlES* zQ?*`2eSc|cF%)_FLEw59a*@hldEw^yg#`$?nm?mwk=9zA1J`fDr7^dBG6E%@?L7D(9(}DEQN zLDBM4vz>NfiLYfjK9D)HUFS0E0w+O*d5VXj0SWSwvFLPBVb974G2u@lg$xzk;d-FC5@fts!NZWY~cx%pQ-r| z(s&{tui4_|isC*u8HC@Iv?_e;LdTf`rHY`Hzi2#Br#v8JzBGJ(%22+l);UyvN#1{w z3P#EEx#98;xuSoMS+bb22QynD+CjtE{-gGo%sCBx$*mrXo26?#@en~StofScZ{s$0)$Raui;SBM zwC&pFT?~{HvuSwY{?Hb*sS=8O4Orcr>o#um&CcNjIP8R?Qcq5)~j=I3(XIJ zO`o8cC8b28n8@wK8*?TIgmn*y1GexcXz$Swt5_N&{qQ{J{PtTzKn3{m)?kkK%` zkeOQ8M$q;m@Rxqq9S8#rht_hNAkLg|()52!Q>uG%M+y%x9ViYZAG)xx#!asnA(qOs zf=g@}3V8gnf1r2e>0fQ1L;>&!f4e8IHC3iXO$k&RwJXHhu&w8*329X}*Q`7p zvP-4DL+7hzqeS78A6kn!D(WzfoJ2dbxVu+D3aylpkhQoPi;OpG_j?+WTCQo^Ty(?y z(B8+#n&Ii)W-1=#mc34EZj9URq4~n$LQbFoJAl{_=z#>3!lb&|gwE2AL71Am7>%-% zb3m-gb7dHXhUN38L3t8KYOhv*uss)9HrO2&x+}?FL6{Vp_u?_h3hfW+O)izKMmzNpjwBPE z4TK%uMN>=Nk;%;sHLXg1g!Ym8EBCLX=cA~MJ+`5&daDAQro2GLpNQm#8Hm>?EscJ& zxPc0gkFl#Yb3;-!2lw+EAefZd=3jg)d#QkvEJv+}JZ|fr`bWl0WURjEe+JI~-Ib}` z0~(sY|M2PK$Csi*T#H3rr?oT0^wi4Gi8!RY68c+a`M9T>%M)EVySL{tJ~!P(D@w3F z_j7%!V+LKb0*k(F!=z(5Ig^d>ChF9lIf1IW6^DpH-)LCi{+rI`EysuYQ)^12G>B%f zQXsc?#5dbjpc`Ghb(GP3Jr~kqFNC#qtE`>%6~_fz{LD#s#62SR@;zUqy{f4kyAhPu zyxffwh8&Qi=0BhDZa86fy~w^UH&e}cm6X9j!_0&Nl$m;dT5jg?uwgB)zl6yf)d9W; z##953^yAm1b)7Zq#dY&U+Vn(!(S?u&%aA9nprV)KhGw=I_!%sMAiqnxGF2Oz7fZE4 zoSVZn%w`JZJdLXpTC1P5xHRD}Ls)Fn3tvzDkX1BL-zYW~QV?8C|m@C|uoZ zX~bi+-`O3mdLLKMz)NG@aFn9M5j4dic%=l@-FtAA3BpP!5l&S(s4!LOq*^i*C@FUC zv%V75lYHXX4f1nKv_qL}+y_bq+)>RGyhtZs0XU7w^zoSe*O<&9t6Asw6pIB@^?66! zQ2?qahM#pZwD~0hSIDQ_e0yv5c)iPQO=@sKbhwj)H`q-@o{ zw5}a57mmR{L>ZppO6wUWMJ|9gm^B}%Godrxic;3U4z4WFL}Vtl@QsN&c%vEP;73}3 z&#A-X@!K%PMxK04@3D-N(CLx()g4O$?!qt8-T-~D>7q`2pP4RlL~C%>R7+-!;T0wF z4r0z=OR0f!QV>y~!Ai8kiTeGa?8&t$r_RumuLmcusNOw*`P!I_yFa*4f{TqX$97cR zlf2Kmx*5)k`g3Yb%xUpUN-6h^z*y=jk6ZvtVgPa}udsa4&0AOf>Qr)UtyY@w!3ip% z`pCL{fVP#K5ks#&>jsoNi#(RtX*bD535*RyduPNPK#F(sd3Vetz-(cy%DP86;~+|X z;?2iO_4r}xaBpN10KWrq=TANm=&3?hCtIf(*|kKPmTjbnR!j~XWq)+{cY`na5AG!Z z)%zPDJqO~^#l(F|DZ*Caw7#@&n0-kD4Tu3ZHu!n+I6GbB*n%5&tdrW}6e}$qK%Lv# z82XRfHdbNB<`jKTE;sWctgz!G;RAqF$ljD0Nb0=OK2~4b3-!BJ&DEAyx)%62jAb$o zPK(OD00OZ6XHStfGV32IYNS0pIwVF%Y(N5z4Ia(xOzL+LW|Ps`2z#hoRVpR-8aNTp zX=_I8?@@KT1KP^+H_V9wC&@-$VVj=%VlY8Z=*;ySlmt(E1|)!x)$wm968z;URyAmO zbMj2%n#+X=P~#dngXHM@lcM#ddw0NQ`fDkG_lQm=%N);D?r zy0kCJU*fS=h4U^JSgvrkhZ4?F>(PaKHWXrSV2uah5nek#NH;8Twa2ydPiSOo7Ntip zMOQv|?-~qKB}O#xXDs`oSakPzhtQ?7U`(_%rZ}weNcHKvz#CDIW9!epN2TcjL8nKN z9;KA;=|03amybr9mtXH_#`N`xcDhUAhEK_}p;JTN%cL~wq$+L9VDFF6>!EP1$snaO zYI^lV|IS4r!7VK|jI}+G)aJB36|(MTZ+7^LhWj$)qkKIfPejw!6$XlVVP1Kq?HdL3 zOjOptbYRsT=n*_P20EwMo_m?s-S`;s4qzh+B9oRuD_45H>}Z%~)w?qi)n(P50o`LA zI=07HRr#M=kdf3sncJ7KFiIq~a}5L+2dP8seuD`*jC%xV|1i)}U+9~TDj@|*Y47KV z8X>$QL1L4Pl&RU1%G3veJ=B-uOkp`$KTrbV0}yiKy=kZ_m%Qm6tsZrV_mfhUl`PXc zJxs--_U7AuE&z?LY%(z}Nv7_IWO8U5ygdd1WW33e># zuiA4F5x`lXe}?!+|2Ncr9+4F(IbX4TGtM=h&6%Q5g5T4#IGVSwbbWxr=0W-tM7Di5 zLMWu^b0xHq2%L0uE!vg295jiXW6iXAoi#BRJon!GDw)2CR|+duiZ9Kvf1}4KNnP^o z@A!E7Hg%zZy@}9xn9WobOkd{b#O~Az7Cjvy8`@>Gkz@#_c$kV-8t0y?CY4Sk=4oAn zO4yvX=~Zhx&hbY9SuW-S&9ud4#m_w=tu{sj;xh-D?-d&#&&BWPTCOH+2R*luLhH1< zTt#?ELRCkLT44#!+fnl&S89oE@d*oK{YPzXYaA(YBBbe0|zlVbMgDw00Gu}JvKxyT;y#Z}s8(C6UP`N{ z_#;Od5ePf^3clajwwj^+R;j`R> zH2?fB-sHD0ssgL$fv#(lHX(8Zl5I&cSJ;A&-pPQ)@QD}v$IH)39Ff)Mg#(fS2DdXb zcOOI~*RM8~rIY|{V`0MM3st;+o?Or`u~)cGM}rJE(+auF zm^sk4r%8#&@h_TYZO3zAZwhHfzaDVu zCbp|lRls8X9*OY}xro(4d;t-uALcmJy00p2?%&+;+lJoh@CSULi_@;hV+9sB$i~L^ zrQk;*vctAesr{|02HMg({FCBL7zcz0hCJ3D&hf4sm-+TOw?gJrxhqRG4WVFA;S!l? zEjt}2V;!AGjH7utSQH{&VVt@ZkRSu$a8P8*L`i=x>PY@vlZ zTcB$vsQQ%aoAXz$1HclVOcR-(NjAuyT%hO#tu;&FEaS(9W)1Ig&Vqjwnm?x|UWld5 zR73sjdotD&Jpy>V*x9+G^uq>jio-1F5;OOQ2rowO3biy_KbLFwC}^!W==-MtXZbo! zlf^^_n5g-BJ&LnH#%MFUrq{o>O zxw>6`{wz4kasa^F=4KECV5wZV1XDX&po(F7O~6bZ?HW?wo*$2KUec%Hv)iinu9e)S zGpHivg^MwiCE`{@q9wjjbXQLN_g1Grc11k@reSU?9 z-rEnx$<4fd25+GD4`Wq9d(VHYr}70q(b^W>zUP^X^uW)k4!<&GZRxMh| zW}Djmp;e=_4%)Wv^^}g?__5FBJ@Jq7(;_pAIs*au>F+h?F2oZFe3A~Elc63_!{f<5dU-_-S(i5wYkWbPMUx?>a zI9f)%`$FOqYvF8*K zA9r#VqyHg#d>2^G=WBl``(>?jS9osx`}p5roi~5e5_=Z=3hchl7JboPsK?Yk6Ud5+ z6(`a>H^k|-zR)qq=={4Cm)?CFA)TQt8tr4f3Es+;@kcN?qy zj}K{RglKHzR4k3nwuZ5HbvYC__Hh}L|ImLIg;L|Sc9kB|=sn+8d@s?r%E(E>uO$f5 zdn@fdX#dguJ!W6p`eSF32?)G38mt{AaN~;MSU}xJO^yz4ORR}~Dr$9RoBmhe9hHVf zl~fu3A4Wq*BU2~2qR}gJNKu?{da{06|Kx>}xd30Vb%K`@uEm3x%39B-UAGllQp~Pw zdD?j@^5KytX*G?nvbpZPu^IGrtJKpD=||#u>DP^Zr+Ami-g9i<#+S$et)@mVQ z2I2x)#iAwOI~MU^9$O;WYTVFLwv)v$@QUryb&i^?tH$mBEuc#^Le{ESw-9_EC*$-j zYr0}BOrH3XWK@h5^q5?h%9B>Sv_A-3Am-w=upGPYr_*fO0Zws{!d!$}N0&+2pbiJ0 z#DMqr9&u{=1T*4vo)7f;XguG;fkUI+(~RH=6Bjd2H4%oRGrhIjt+m9C7sro`Qhn+{ zGlMuzE!h^afzx(6Z_#}jM}`djTcCEa8h@gGsc?gBB~C8TNU>b<^Pb)6a9zi=A2Uo) zlbsDgR#nyV_bIo-;&U9`6|?k~12)E3gQO;pJ`eET zO|mWCf3xz7#_IKEw^HHrW=;4^d2U$8Mw%Z(!L0ZPBHeA7nHuQvKQ(3PqN&VvqZX$3 z&T|?1jR!uII*HcPD7<(O_t%v0{h#AZf9TK%eSS>EPTx=XSM5_#(=OAC83s1tH<)IJ zaBAf03)^AF0xlELIrrSu+qI8;obUZ{#_2Mp;a;WE4P{a`l1gk4SB(vvy1QyU?o&4g z2FypCvO@4YqW&1}cq{$X2uzXXdNZR|MJxxSC(fd1>a^n`U$6+L-bbr&{OpM+bEhE4 zIk^Uwp;*)LGDVyPG89;l&U5Z9Loy$+vWW_ll_ozslRKG#;yzqx^rUgoa_|MlY2`ny2tba@^F^oC#g-9aE58)%I3{9p<=t9|_(t(JmV#@#kNSHPkw@v6OXWero5bV`6o^P4;ED zQS(Gp_QWu2)vEMyYuk!F>+t`A0D<;^#E42i5(P=@^Lp?lgwAcYh5i-~EI}?KT2fh^ zo}iU&dmgzq7uH;ai#O#sm>Q1}$Dl;x$b%Pa{@~IlMReRT@z;56d0u>ZwS2v~zi1Be z#-J1ZZ{ycFXJG)r^652f%K7n{Cu-gAW|$;{Hslp%YSt$Md0lVVj*8CakWVOjoj1AA zz!=wPX0D3xp2sLLbzHLW%~kwyohqpdmhJGM#A-!*Dl3L2Oy$-StNZOPtr)Qr^ekNR zxAqs+&3(s`E}NspC;MWTq4pKoM^vA#Q9)!Su1mLn*`OM-aq_;HRY4+2yx8 zatyel$<6QB%lg`6_2P5>OT|6bHP_4hwfUA_LdWh{ImzcOS7YDLj>Gk-b^Ea_YRax) z{g&(v@1YvKHnOiy0+Hpd&~e6jDIFe<;*@M1Sh7x=wWMcCqez|t=O?Ij$NllIMtyy! zZRwq54vFZRKI%or+q?kZQ*)6hK}`@%y75Mnvq|W)!<{%n>cCCuoaLp$Tld#%@b_D; z+1n7}O6SF{(fhue-`+JBmIg9 zK*<`og`#(*TnwD)b32s|Mtl?|%YKAW_F9XG0ynL^1?bU6zZi~x4R1|kjM~GnfHRR> z%NSH^U;EQ_j6~*hqp0#i0Jt|auExkBP&uc@TJXMc$Q7@*ngFBjbCt+g3*#I68INP? z=W!`{6m(9Srx);}5Kn!hoN6Pb?PoBP$D2%eJt^FmNiE~uuGaSRhW_qUGXr@M?;~t^ z_>Z-<6Y0Dab*SY0>WB@xKLGf7>!fw}=Xf^Hiw#<*6aL;ae^{5Fd{hFryxbfEc>V3F z(d-k@_naPkeZJN;hqy0HI~Row~osIz`vAnu4HY4I3vUKE<$^-I!${%-gg2Mc@lgL zE9KH8E|gI6EO&HnfXv4!gQu?o$+(Q5rQ~`17$x~$ zE4J`94j`oA$cKSHhKDJVI}tYnWAP-~-ltCXQ8=V&+Fn~v>}g?nm)9dUdw+EW!3*ux zzHOzF(*O3YhbnpQXN4Txuim?Cagw~HcuT6w%U!u!I_Ti~K}}tyH3Leoq;?X9%gw{C zeT`D$sqKA0hh$7a3E4cdU0*guk6^x&==y#X51UuvkaS*L5Y6S${UB^U-0Pfm&@aeA z=35jDi$#O)Qn(56?-XxV_a!J}(t6M_lldtf?2kOUPP1cGS4`|V6E?TGm|2@Vv^g%Ks-%m zdvsX%fr>_AKDCQC#L*>j)ssGxE?t%;332MB92@p`5m{iNcqTi+PB3~swA)8)Sl4SM zL*l}1eD0%IUAk4L(uK4yC1I>a0zJCrzLwqLK!EeCr4DNn&SUQp#@kn)`VOsnlrps{ zvyBFB*jyP+&~qaMHO5Q1Ax{bXRIxUj* z`ep>u%H)=TZDm!CxKS#L(O=_%Dy$yG*4BTW0XHiN8*6XBKG`~MTkeNJhR2O2=3mWq zvILp?T}7uF$nXk{1@IYHm-SEL%5anv)y{DD^#uYib*M2&#kk2`3cG6NrIal*>1Wf} zx$xt;%3{_=6l4Is-!jAOq-AyouO$?}`c8igdn;*fZ*Fy8ZxG5cw0h3|clAr$K4XJ% zfuNU>nF(Y9(eIt=nXgl!Gn#J6Y~X1Q(1ZsX0X%W(d(IkjB~Cb@;o^4v7O^~}Xas{@ zVLiw18M~%x8RI}0l41n4@sM2;I{M}%IoKEe~ICU>%KI(!-OXcb(6bU6EgPs)omYw6C4Lj8&gpghYz{ByEOC5yp;l=Ira?>KWL? z%idhSyp(F3McF~9(!E#*>^Qf8$W`@hCN!;0!vw6Ea1aw;Z*!SOjz>KbJ-^&@$hCU! zvGk#kD6SxSxG1l1-%8)lIC$D1(}JS*({jDhZ6zyg-Q&kC>Q5c)JH56Ly)2Erzp?!^ z9Tl$Ew}0YJ7C?R{qhAcGD#Wg)%Z7`w@l6;!zqd-hLTs+I1?gfX?uR|vFJ{`UmCUaE zA$&ufDM>S9*PVd+%eJ91l$TrNC>!?sUT$1Xxww_|pX^-7SP_U9vAzz2RKjl|>nvgOqs zU^0v@aep!SLI8mYSwGQ4W7d4R72eu_1(0@?cNDMi-aWBazi9qYY{?aIm~@!5FKGHj zlYc5EO9TZvulBLY5-q?P!wk{tOlQ2Z#4g4S)jD{%#oD?5V5@uwn5ONU&v|>@sy)Da zEFYJkKyXWqfqn2z;&oGd)u27L`uS+>Z0kMzW&le+JFR`2S0-^|@F2V&N$gZn_chYA zM#2bp zal<$OS#z~7I;Vz*=J>j%Y7U3*2+&nWIuujgZB!2qy+n!1!4%aaQ$Ojz>~fgsWT)S} zyG(WIt!MUpTTthJ-&=!&#w6&;qrRVV$^7@tc7>?qfGbZ633H=rh-nS+FmV7LG8KB+KC_~u^Ci0Ex{UZn1)Gw z2y;&|2Jpm51pn-5@>D?x&&`0674TLh`TJ?@KR;A9W7zM-IvRn7VOwt64Qx_hqYwlO zqm@t_c%JM?5(gJY#Bu!#ju=AngLPFvePmi7I|hdDC>Uq#ET23WQnk7gIRi9KJ>k&gbowscYE|Ss*GN=zBVlAhL?2Hxb}L- zc3MgUbhKD5xT`;S$9*a>GP1s9T-uyEHK`xX!qm)2g>vUFJ`dV)9 zuy!K($uotP!3@g5Se|+EAE==$DeYcKZ--V`qBvt>+T{n|A6xvQfi~q@P*;)k)YwNF zi_%n%)kA80?b9>yQ=8NY9&@xqn$WpuMS7R}IlZ{Wo(XdYOZ4~~qN%12&lTd+tZOSR zvpI-IMcQt)1IicJ>ZoC#|KNGKs08_MI1}QT-G_ViqJjSao++!3cQPByi|Ok&#hF!q z%3E)#GHVqZxSen=@UaQEt-CM(vdQ^W)aQGMM9o)2*$?`~`^?Xk#(7*4nxRM5F7RFR zc)pG^XF`_7H=M4LarB1TJV#i1F71w!mwi#Ob8B5UMB-H2>Owp(x!FI4LDY{Y)YjrC zjd3)&IONV&yg+Q2=++~ST_(GVnnenmE*Hv-QuGxi?(yl;}bsWFT+2eVk{&cdr zUzLG5(%GX?w*QmW#1+3)1I z=C9uZ)ytcwnHlVUhqZJ6_t!+PhOFE}4r-9~Cmyk&&L?`qzP)D$Gf8z<;uc@VYky#> zzFix&q{tV8>fkR+jG^TE>wBMzJ zy#m|FQndl5w*zz*R_*WV#E4eQ1cX~M>KFyfNiX>5Tir!c2LHB$iWbS?06~}5UIA^9TWwNKFmuhj3o}*VuUbA z%S_9pgKDfT$e&B=olDJ0bBN~NL#XkX(pkP*ZI!;;K$U#!w@6DfROqmPOI!N-fC(|O z(@5g$kG>zL8i*?fq|RJ{K-`;m37(aFnH3DkZ-O$(kNh>0Y$}6?^l@6_puSzU_0VxY zogk$rr-f8%3EL^vgSyHPZx943?*L}5wsAnSPJw|(jgN3B7CUIU3G$R`$AN|9&Gcy8 z)aYORJ8H=kbk-^cYbS<@zI*X;2Y{4Su6F{t%{GobSCB2+qU4vv!Cy3s7|c7m{Q!LR z0hIKPnKR+OJ*t69J_QPzgq zYi}@}afF+B9vMz(p>O#FsQ+$P z>BJeG-*9}xz#puass6i08xqCs{%Hj{9pZAyteVDy1y}Ley8`(>Bcc0AF-n@I^BhVo zlDW4tj#z}{IG++~65*il6*iVwKHKlDB7Zn&ewrKgA;sbpJO|?%B!BeervwPh41@hi z!G-rm3@nbmttL#racQSwPd+wtTLTF_E}By7GtH?C6HN|b`;rbv+tE*)LJQ|bqWK1! z9Mv>@x*rQxn;HcV4s#1OeDMkR&0{@{Lzy6Gyl<+8v~4K5`-(3s>g~{{r7?a!C01RL zS?HABZbn|W&JT>sOIW-8vXtPFE@0RE=5d^PxBBN3?0Iqnt+6hf$*STSWzx89;7<`r zb>3GIHO2LIVY-i6rk<)UmFBg{Lth?lPOrpiR1XXXQjY$UlTPwGisDS~)E-NWnM~;F zffCfc&i>XfJP3`bs*kyukXq*Wt}WAl_SwvIiN~?|OoKGuVsjk+*M>*4YD^q)kuXg> z5;_l)9#9}RI1MyCinsdl+P8AslG*&nP<7q$K&0#H0K)9YJO{V7(xJGR4}f)i;2boT zj9!?;Vp7cVVnqBRMHa1_YPT8PkYyl*dTXtJi|)D%sd%XE@w9|WL5%Q*!OcgV(8^&G zdwTY9y{i}=QE~&tZ^)1!nJ2Ti+tC4ftfGWKV|z?jPKbz7i2}PGEnw}kL*Or(H$d>n zYH{V{>z)IlyjLxkmXUobYOKc&S3y$F6G}Xldy+#l(!)HeHZP2r=Y>?IjAAGg;B#Ky zIra30p9o!$bt1$oF%$^6EScVyunF7wp3@a^AiUlEO51YKKdLy)jVtY{2Q3h>AVtLs zX$v?X9yHmDcr>)R30rglAOYywbmDdc=$}6qolKUx&(U%o=@Hn1yYHK7brjB%Y9JOY08M;Y5q#d;o z4ON7{r}~>E^Blg7=Fse*i6d)!1;fN7c+XE`@wPP0i6j5#Dh!Z##F;T0e9ew zBsiRs_lY5*hysx*lqj()a$`i=F1YYcd4%)V!e2D!;~Dh4q@78nF&19xD8pev%eCDq zRhXA-q9z{SB|~-?Bc>S79;SQAM*c?$+hE=(t9l?4oW9Z(oy-wNY8)}fDPgU}ysanY zb<~q{1uxlp8p4dv1YMe2Hiznu8nYZ=g$JM4yO-o#e2-AsQtJVj{#TM+k!3jbDe2v4 zpvjziDs&rLMvNjB@RWn1i^kw`H{vJe4~-2l{a#T= zR3v|gy}3PgQF1?97YLN5h?H-A#}Eu+ zkkdQH#c1Og6;^d7Z0W#~%^{Y#(?9K1B(;?szmijU>ex=rivQ{xGx3WCa0Bd^2#|o8 zBzIYjSTY9AWz8m3Y>fSN#`BD2e?=!*kdC)jI4mifQWG1I8)Wbo-)`IgtRL9s)f6o=Q>I zFPbtkQbEOcL?kQ+Y{0HYwzF716T=6%qRdcm6c5;q9pE<9?K7TC9b4FQPKyx&tiq>w zvwEr`F`OZ3w6$4sSvN5&R_4N+tKk-k7l}jJ_NgbF!;&ZJlVB{_CG0l8_}wz({8*HOY_S6AWOc8z0jqX@Q=PL}))fR7kP`eDC;wd zC0gGaf(Cxpf z{>X9acOEzz#ZK6M`0-uCryY#Q-$c$*20-99s@;_#fcYMK0d*_-fk+y!0}*L{0V zY`Xam0hg#z40RfC%lZLpHeZxt(ayT%!~Z-cO#ni0A*ELZ-^cNoaO-=r%#eE3OvkkD z(S0sk(E!%?6(f|Bll85n$Z40C&j^)bx^P0n{!B}4Q6Q8*?#G&#ldi6RY!c@Jnqw|D zu|h0y+3_0=vcl}D_sTRyutEhUgoFINuq&Ln{K^bOkW;4Rd@5_fFC8;>WnH=b?KoEG*P7 zOF33Np*rC+saSuC3Dgdk(^7p$rUq8(R2U9tHJPotjyjuNF&oO;0=>ED=s|h)qSw@Q2jGt^KXSuxB71Q;ZENSWPt|Dt2B?vd0g)T*}Co3rW zijg5sMpMGA@sjSyv2}$%Psf5#h%i0UcmbnKDEi)5FDWjHr-Yuz)7UTF@?%JIsnEwg z;pz6hP*!#j(UAHHQN9r1r02D4BrxN5k;S1LJqUXvA#!y1`0* zVr_YH*~Myki^J*(&inAofK##p2pgz0aonf{As6!5XmcWFoemZ*UHra1<|O`bjlCdd z+kdYFJendvlg=zlS@ud(n+DO3hIdgz)XQ!8+9-#Zu`jOdgLC(~L}6~I9h_+sZk{Ym z*}b&g_Sf}E18?K5s9Q=g6_t2ekA9!@i)Pn;eHp(E80&hhNFDZ3!&!m&_V%52y0lg} z{yH1`_;b-J$z>`g|Af`#z_DFn*$B> zUwkdE^@&;7=%2sf=XszSow4K%Iw#IV`meq8IFQ016wrD^S4`BG#_rO-@Cj=(_n7Z% zKMhva(9Z*o!L4t4*EVv?y1Ha!ovH6^s4+qIG^sw?mMSe;@ismS^Ph^=cSM7ENb9A(<6BPjZtSh(GgfrdpNz+==)R_XyN2!5p?@R?s8ao<_9peY;aC5h zFp0moldN@a{2@2yjK$?jBS1*smI1#d1)}UQWnceaZ`T3T)Yh$Iy?9aYrFXbeLJdej ziZqoPN{}uDLNy+J;wdD(70fB${V$?l8A*H#0a58fxB$uYk7x7KecMOBX( z1JN}xi-`v1DRMtXKHrQmPD+Svc*pF$f+oj(H`;p%{3qsKBD~wL*yl04U4^4+`VI85 z6E@@K%HNlf6F28;o67{319G?V4U6N+o>0iNxRfU0Z1l zBfEQJbuzP{2nL|MP##Td5W|*!V^_5oiT(IQ3SwY$vf8k&?-~T|Nvg>9(w>7YS%Xw9 zhoeW+KrGM#ENYORHu)u#c^G*(S-DT~BOSj50ut?x$Se)S;dai+ zI~OL~qBd%6kGHeyc30U@?8o`cB1de-y8@4A$qGSfCUt^YI3oK2lH9^l>(Yv||2few zp|4yVYJ27eDQDsp{c8T(<)^JV`V09Nliv$vP- ze1vglNkHpn_|P0Vs_9%x&;e8}R?_Rz4cAo{0%UHRfRT_2(9&Uo&pyF@M3o zy+S_gXLVP{Y(P3hb;@9Pb8+Nz=cyv&fCZbHVxFR6&{%(GBTcvJj#JrGjdP=8L{P$b zyMkf7$d5N-u@II0q`k_vpU47SQ^Gn)D-Chh=Q@a?0{w3;{AMC{%}_q0+G^(F3_KC@|j5Wr7k)oYKg7w{odJjX3vw! zs#y0{ZHJkK{y8~}eL~XcdGk2UGmBqHA5@Lno&P z5KH(N5DkZYvC3a^El(GoSKHim_a0RpU+}v~8?*IR{*of*AJ1u(?ch6>e6L*3UL2V{ zTn<25_4EHsPG>~fdZ915pV!EZ5NlF&BS_(^^t>Mg5R7mQNXhe3^;3LSouY5R2q7h< z60XHYEg5Pc5h2UEv=2G|jL%8B@zW(jiyDP3&?Q1UQ})AKyT-=UOAC6BAH44{aUeY= zpPQ|lOIP7TwwPbF-L=>Gc0N+ACv>FVfgd)Ie~R6+oe%dZUp`JNuOW!l=B>(0=Q7pp zG4F1a{RHP=x3{>PzdU8b@d2P;ATQpCGlBC2h~CMgMbMA8pG7 zk}{IAbPP?m5P51SIM=%u4yMlndgA>!%;{C8!{nmr+Mne4i79fcQgz8*8ou|5Bleed zn{HHrS7gIxHFF&+^wY|->Zg3|m9iQUjraz{FK%*)T$`-=c~?LurH-Wa5L2)4-VwYW zke>(8p%foA{>|y|kpYN5=h5+R`u`j24Ddj>0wDK2KHRDFFZ5T2-Vytl#^2?S#Sg(o zK__1ach1XznK7DJPA?xP9Em};lz&ji{oZUBY~gB)W-qtn*0FG-*gzQ}Ee^gVWugoI zOql`3BhGlsCOxVR%9!>HkJGD>*!n_d3#96Y(8D<|6vI--{IVC;9kec+N$@-Cb_WLT zcIHZa*6Q^wBh3<^BSim+{B(Stsf?nv?=#o=l$^^qhG1pBf5=u?U}a_}=G1=hHGfSv zsyV}V(fAe0F{ND7#6MuKE?hH}cmBF|*ND|h+O zyundbFxS5h|9)r{yXP|%#$>1M(^KlHmsZ8zYS}ia!6tX>I;H4b+O0hDjH=XOn zLZ~mCbJ>J09_V+gkILVjzLdWPdFwYv+vce+(y*#bRkxH`>E6GoGw#HTOP$db44z&z zHnJ4F};-(S8-{Zae`$?9} zNMQwdO|)UvS2H-DOr3=}xYk^#f6daejN{=<_*$+zSCB<8wk4$9vVcC1ZtC84*i=zJ zT}_QlPA^6c(*EFl$T|7sa7)w7lfNau;quWoIWW z?>HJSiDr~qC(W4M7^tznoK^bdRq23H(_H9)x4@jDX^NGvjG`xi59^PDJ|nd%x-RxB zHTtBrt_UEe)+*qnXtG|fNF665-O!b>l;nq(Co_^R(Ai-Z;_`fINGkvsWv;A39-}(T zn+lQe6B4U%|9rEH$Z9i^lY4Pp>=zZDpH@`Q3s~5iTBMKiyAKf^O!1`~1jBbRigVCA z2NC1TUA17-UWn6y0(!SN;9H~%_pZhA%#e=mrJnEhvFF2UF!j{-#;P+lG)ndadK&v~ zwqyx`U53W@T<%x&z)5v6gNp-`Q|W9rH3bCL3zyF?ghX9Rx&k8H`nLk`FB0*eV&s58 zzx;Nh)9k`&jH}1hyAmJK+*4}k4CM)kMP#K@V(NYzzXpG~#ARD3!y+wz(SAY&y$own z2;vKqC&{F53gGO_CxK0;Wtp-Qeg{uB^UjD5d#HTn6GNM)y!lug^!bNoA5A2YiM{-V zJa1Ump`D%kypLjhI-Q;IzR%lfu*4kS?U(OXBh|{G=#o*R!K1%mk-pfFJd0C`nTBR@ z8@TIueKFm$Yt zR1jPBpeLg{!Uf*F1X>rQf>t4W*?%SSX(yf zcwB0kv#z#t8EFfNC@RDL2p-QY8a2ee9kPy0bxf{E^=(hU>4yf>69}_zL;kJ>4Pz+l z#?oYl)%`Wis;buE?4T@dX~_ZKx&wnGwsn;~y7PF8T_mbHRAnM{0$q5pjvH%0rDS^L zy%HYuxAJ1ino%AleZDx^sltYKM>iH$2Iq9fpEQ=wq~ba!RuvtZptr|Rss>XLW={*x zh66}149Fw6Dt;Qy{sNZ+*q&NIbL7^pT`==NIa#VXnE=O3mfrwzn9|W;wnu;8rf1iPCc?YQPs-Eebw<1 zPpMt)*Vcs8Uzc*1wxg0F><0a`yJiX$DM<7X#^P;AaHh7qig7yzVyN2}Amxp)>0ejM zzFE}093H}+#H8nA5~nJ7z*Yf|ngl#3S~M5`y^tdG3Cmh30|E54sT3uZ43Yiaa!Mr^U;M zN8Z^Jh$21hR*sJnv_Db$)Y~5py?VO!LlS2jHEMvrd^fP*bJyg{{&$1y<3SXmalCDO zhL2;RK?=c5)kgqGD^FGziYcq`te0o{0P$D5=jG5V#!HtfG;Mg0whxllA@Rd}kWm$I zQl)=0cbTA=+GIvjRE=`l{h0WU`0?Z!sW$wpH`Nov<|2eSsodBTa%s4Q@Lln!QA6%& zxmO;%9~WU}H5aY4cy#V;&8aQmu1W~ftt!4Viz1~3?%*b56AGF%WL4u;R{B+Q#-H^6 z=mHNr^}N!48yGr!r^mHLhTHc<6qgy^eR;7`x4K`>YTxuWpLxI@k5Lz#?l`BDD-=x3 zr24i|7wLPE2)^$Ip@m{jr`we@&c5PWu*%jew6(m&v__c#XjOP?ldwj%C4Gj|DfMAS zB0MWHQTmIEglOCCXI}8Mq)<{|qhqTP6I-RX&ihTwQ`o_jp2GB=gIS=l&;_|w6${De zp74#{baDEM`B0=4tp`BRn8=nw-e0Sj+Zo>Ltx?Nv^t#yMH*C|m{C((`+<*Y#Tk+`Q zc7NX@ZPN>9U8Y~prgf28tYom<0#8+Bt8Q)Qm&_lfp$YcQxFwtQddb!#wFEPnu2#kGxf zU6wSFv(vOp-p|0jM9udYwq=*jz;e}4ALW5s#O%Q_sI3)=18=3qaP;FpLCSLtD|zmn z<}M%ZcxzNa&=ZgFy`Y!+V>j{wY3h4rr+v2U9y&@otMX2Vm$yOd^LI|GBmJK{7Ew7G zs+ z{_^>xj!K$D6xF&N$%7836l)4=o##r?-j*2gqCF^L26ia)GgsS%Qu8_QAhX`v1@8*Z zfDxaUdV{XXpZfRa4x0R+dfMbuc&%7%;9SOO3mxScntF6E7w^@Nj7J)cKp8*->rMrSX3)J;<@S;>guI#->Gp{toY)} z%KbiVDvD({Sr_WQ=yNT&yG>hf!{<##{hPBG!Kby-&4|?DsJe%3-FGiPnM5qmG#R_O z8;aR-t)iB)5oJqOTBgWVw;`e_7V^NS)1kiV*7_Z%QP!zO(G9xwbVjXAQK__QF!JSK z8(QLpTvgtKZ%sV!?M8~VRc%x51{v30AhP>=v{=7TOr^q_Y&x3{gt^LT`EnnTEO;hC z$f&esCgnifWwKr*;iO+|rSM ziJzi6)hR2iJQTt?8f#UI>yBFNoupAq7N~(5NVi}s$!03$QBMDon_Cp`%DM;w$S^(5 zbq@qsQs65fP#OpXpr-$2*8Q{Kodhhcf9C!FUmupJU;*SB7+E5W_r@kK?qvN`n(OOE z(Y=5#-qnLHyIEB&-l?Rf3LDu*=?~&urg%#}_G=3;7Z5$P>md!LNp``#USf%$wi!R8 zebtZLZk|I8M#|92#`^-!RL^_#E!w9h`Z3QHjI`m)Pr?7#6uUKN?k7xMIsdF>c-r{a42vaB8f`?m6D)ON z!KTdDdQ_3Of6vE`Q7ezVR;}E*>JUwGB4LAs%ru)W%dV<$>$_g7i@?_^&g8CZkrh|M z+?zXGy*vVKqBy5|rNlEzlA{gBg?F^mUT~PVaL}aXr(zzP+PPF!hnGa*gD_lM3wA7& z`}GxSI=de2y<6e|#r!%eIXdI9BVN8V)0c%vXZ7XW_BL9qZAwsnnNCV9A=dVGF|t~6 zJ=JUjMwInqd~e1y7rWRRw!i>yH=BJ-tHf{YyJ?W$4)@{yMSm@3Ky{rxax?;-ibJ0S z9MD}?j#^j#ao_*)!{~2M#=Rqt=XC((`!B5shz@W8sH>v^j{)BRSjndjlgs{|?bvJ3 zF;5Uk0N~xDi^nn28Rvv2sx{cfVwIF{)ju_TrIj3x?f8MQo^+Yi}+A?2` j@fS{K`uoikleX*$U;hLxRse~udvVkyNauX}pUnRPoB|pk literal 0 HcmV?d00001 diff --git a/icons/finish3.jpg b/icons/finish3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1fc4753d5e4c2a1d0e1ee59d36ceef3692ad754 GIT binary patch literal 190419 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%0DIJ4H-8)>}PXp)T7)&+4gbwDH#)O(1QUFgEX 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 Nghot~NWc==|Jjno4@Uq1 literal 0 HcmV?d00001 diff --git a/run/alignomatic b/run/alignomatic new file mode 100755 index 000000000..9cc8c2245 --- /dev/null +++ b/run/alignomatic @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:build/src/gtk:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/alignomatic $2 +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" build/src/tools/alignomatic $2 +else + build/src/tools/alignomatic "$1" +fi diff --git a/run/dvdomatic b/run/dvdomatic new file mode 100755 index 000000000..23b7d22ed --- /dev/null +++ b/run/dvdomatic @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:build/src/gtk:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/dvdomatic $2 +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" build/src/tools/dvdomatic $2 +else + build/src/tools/dvdomatic "$1" +fi diff --git a/run/fixlengths b/run/fixlengths new file mode 100755 index 000000000..1a6cc0a17 --- /dev/null +++ b/run/fixlengths @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH:build/src +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/fixlengths "$@" +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/src/tools/fixlengths "$@" +else + build/src/tools/fixlengths "$@" +fi diff --git a/run/long-tests b/run/long-tests new file mode 100755 index 000000000..6c2925495 --- /dev/null +++ b/run/long-tests @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/test/long-unit-tests +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" --leak-check=full build/test/long-unit-tests +else + build/test/long-unit-tests +fi diff --git a/run/makedcp b/run/makedcp new file mode 100755 index 000000000..f5adbd917 --- /dev/null +++ b/run/makedcp @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH:build/src +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/makedcp "$@" +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" --leak-check=full --show-reachable=yes build/src/tools/makedcp "$@" +else + build/src/tools/makedcp "$@" +fi diff --git a/run/playomatic b/run/playomatic new file mode 100755 index 000000000..9fe191a51 --- /dev/null +++ b/run/playomatic @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:build/src/gtk:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/playomatic $2 +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" build/src/tools/playomatic $2 +else + build/src/tools/playomatic "$1" +fi diff --git a/run/servomatic b/run/servomatic new file mode 100755 index 000000000..100d0a8bd --- /dev/null +++ b/run/servomatic @@ -0,0 +1,10 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/src/tools/servomatic +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" build/src/tools/servomatic +else + build/src/tools/servomatic +fi diff --git a/run/servomatictest b/run/servomatictest new file mode 100755 index 000000000..58cea8815 --- /dev/null +++ b/run/servomatictest @@ -0,0 +1,12 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + shift + gdb --args build/src/tools/servomatictest $* +elif [ "$1" == "--valgrind" ]; then + shift + valgrind --tool="memcheck" build/src/tools/servomatictest $* +else + build/src/tools/servomatictest $* +fi diff --git a/run/short-tests b/run/short-tests new file mode 100755 index 000000000..4f2567029 --- /dev/null +++ b/run/short-tests @@ -0,0 +1,11 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + gdb --args build/test/short-unit-tests +elif [ "$1" == "--valgrind" ]; then + valgrind --tool="memcheck" --leak-check=full build/test/short-unit-tests +else + build/test/short-unit-tests +fi + diff --git a/splitchapters b/splitchapters new file mode 100755 index 000000000..1e5cff084 --- /dev/null +++ b/splitchapters @@ -0,0 +1,30 @@ +#!/usr/bin/python + +import os +import sys + +if len(sys.argv) < 2: + print 'Syntax: %s ' % sys.argv[0] + sys.exit(1) + +lsdvd = os.popen('lsdvd -c "%s"' % sys.argv[1]) +lines = lsdvd.readlines() + +N = None + +for l in lines: + w = l.split() + if len(w) > 5 and w[4] == 'Chapters:': + N = int(w[5][:-1]) + +if N == None: + print 'Could not get chapter count.' + sys.exit(1) + +for i in range(1, N + 1): + os.mkdir('%d' % i) + c = 'mplayer dvd:// -chapter %d-%d -dvd-device "%s" -dumpstream -dumpfile %d/%d.vob' % (i, i, sys.argv[1], i, i) + print c + os.system(c) + + diff --git a/src/gtk/alignment.cc b/src/gtk/alignment.cc new file mode 100644 index 000000000..ee4ca51c1 --- /dev/null +++ b/src/gtk/alignment.cc @@ -0,0 +1,167 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "alignment.h" + +using namespace std; + +class AlignmentWidget : public Gtk::DrawingArea +{ +public: + void set_text_line (int n, string t) + { + if (int(_text.size()) < (n + 1)) { + _text.resize (n + 1); + } + + _text[n] = t; + queue_draw (); + } + +private: + bool on_expose_event (GdkEventExpose* ev) + { + if (!get_window ()) { + return false; + } + + Cairo::RefPtr c = get_window()->create_cairo_context (); + + Gtk::Allocation a = get_allocation (); + int const w = a.get_width (); + int const h = a.get_height (); + + c->rectangle (0, 0, w, h); + c->set_source_rgb (0, 0, 0); + c->fill (); + + c->set_source_rgb (1, 1, 1); + c->set_line_width (1); + + int const arrow_size = h / 8; + int const head_size = h / 32; + + /* arrow to left edge */ + c->move_to (arrow_size, h / 2); + c->line_to (0, h / 2); + c->rel_line_to (head_size, head_size); + c->move_to (0, h / 2); + c->rel_line_to (head_size, -head_size); + c->stroke (); + + /* arrow to right edge */ + c->move_to (w - arrow_size, h / 2); + c->line_to (w, h / 2); + c->rel_line_to (-head_size, head_size); + c->move_to (w, h / 2); + c->rel_line_to (-head_size, -head_size); + c->stroke (); + + /* arrow to top edge */ + c->move_to (w / 2, arrow_size); + c->line_to (w / 2, 0); + c->rel_line_to (head_size, head_size); + c->move_to (w / 2, 0); + c->rel_line_to (-head_size, head_size); + c->stroke (); + + /* arrow to bottom edge */ + c->move_to (w / 2, h - h / 8); + c->line_to (w / 2, h); + c->rel_line_to (head_size, -head_size); + c->move_to (w / 2, h); + c->rel_line_to (-head_size, -head_size); + c->stroke (); + + /* arrow to top-left corner */ + c->move_to (arrow_size, arrow_size); + c->line_to (0, 0); + c->rel_line_to (head_size, 0); + c->move_to (0, 0); + c->rel_line_to (0, head_size); + c->stroke (); + + /* arrow to top-right corner */ + c->move_to (w - arrow_size, arrow_size); + c->line_to (w, 0); + c->rel_line_to (0, head_size); + c->move_to (w, 0); + c->rel_line_to (-head_size, 0); + c->stroke (); + + /* arrow to bottom-left corner */ + c->move_to (arrow_size, h - arrow_size); + c->line_to (0, h); + c->rel_line_to (head_size, 0); + c->move_to (0, h); + c->rel_line_to (0, -head_size); + c->stroke (); + + /* arrow to bottom-right corner */ + c->move_to (w - arrow_size, h - arrow_size); + c->line_to (w, h); + c->rel_line_to (-head_size, 0); + c->line_to (w, h); + c->rel_line_to (0, -head_size); + c->stroke (); + + /* text */ + int max_height = 0; + for (vector::iterator i = _text.begin(); i != _text.end(); ++i) { + Cairo::TextExtents e; + c->get_text_extents (*i, e); + max_height = max (max_height, int (e.height)); + } + + int total_height = max_height * _text.size() * 2; + + for (vector::size_type i = 0; i < _text.size(); ++i) { + Cairo::TextExtents e; + c->get_text_extents (_text[i], e); + c->move_to ((w - e.width) / 2, ((h - total_height) / 2) + ((i * 2) + 1) * max_height); + c->text_path (_text[i]); + c->stroke (); + } + + return true; + } + + std::vector _text; +}; + +Alignment::Alignment (Position p, Size s) +{ + _widget = Gtk::manage (new AlignmentWidget); + add (*_widget); + show_all (); + + set_decorated (false); + set_resizable (false); + set_size_request (s.width, s.height); + move (p.x, p.y); +} + +void +Alignment::set_text_line (int n, string t) +{ + _widget->set_text_line (n, t); +} diff --git a/src/gtk/alignment.h b/src/gtk/alignment.h new file mode 100644 index 000000000..fb740b7c0 --- /dev/null +++ b/src/gtk/alignment.h @@ -0,0 +1,35 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include "lib/util.h" + +class AlignmentWidget; + +class Alignment : public Gtk::Window +{ +public: + Alignment (Position, Size); + + void set_text_line (int, std::string); + +private: + AlignmentWidget* _widget; +}; diff --git a/src/gtk/config_dialog.cc b/src/gtk/config_dialog.cc new file mode 100644 index 000000000..03f5b99a0 --- /dev/null +++ b/src/gtk/config_dialog.cc @@ -0,0 +1,369 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/config_dialog.cc + * @brief A dialogue to edit DVD-o-matic configuration. + */ + +#include +#include +#include "lib/config.h" +#include "lib/server.h" +#include "lib/screen.h" +#include "lib/format.h" +#include "lib/scaler.h" +#include "lib/filter.h" +#include "config_dialog.h" +#include "gtk_util.h" +#include "filter_dialog.h" + +using namespace std; +using namespace boost; + +ConfigDialog::ConfigDialog () + : Gtk::Dialog ("DVD-o-matic Configuration") + , _reference_filters_button ("Edit...") + , _add_server ("Add Server") + , _remove_server ("Remove Server") + , _add_screen ("Add Screen") + , _remove_screen ("Remove Screen") +{ + Gtk::Table* t = manage (new Gtk::Table); + t->set_row_spacings (6); + t->set_col_spacings (6); + t->set_border_width (6); + + Config* config = Config::instance (); + + _tms_ip.set_text (config->tms_ip ()); + _tms_ip.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::tms_ip_changed)); + _tms_path.set_text (config->tms_path ()); + _tms_path.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::tms_path_changed)); + _tms_user.set_text (config->tms_user ()); + _tms_user.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::tms_user_changed)); + _tms_password.set_text (config->tms_password ()); + _tms_password.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::tms_password_changed)); + + _num_local_encoding_threads.set_range (1, 128); + _num_local_encoding_threads.set_increments (1, 4); + _num_local_encoding_threads.set_value (config->num_local_encoding_threads ()); + _num_local_encoding_threads.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::num_local_encoding_threads_changed)); + + _colour_lut.append_text ("sRGB"); + _colour_lut.append_text ("Rec 709"); + _colour_lut.set_active (config->colour_lut_index ()); + _colour_lut.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::colour_lut_changed)); + + _j2k_bandwidth.set_range (50, 250); + _j2k_bandwidth.set_increments (10, 50); + _j2k_bandwidth.set_value (config->j2k_bandwidth() / 1e6); + _j2k_bandwidth.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::j2k_bandwidth_changed)); + + vector const sc = Scaler::all (); + for (vector::const_iterator i = sc.begin(); i != sc.end(); ++i) { + _reference_scaler.append_text ((*i)->name ()); + } + _reference_scaler.set_active (Scaler::as_index (config->reference_scaler ())); + _reference_scaler.signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::reference_scaler_changed)); + + _reference_filters.set_alignment (0, 0.5); + pair p = Filter::ffmpeg_strings (config->reference_filters ()); + _reference_filters.set_text (p.first + " " + p.second); + _reference_filters_button.signal_clicked().connect (sigc::mem_fun (*this, &ConfigDialog::edit_reference_filters_clicked)); + + _servers_store = Gtk::ListStore::create (_servers_columns); + vector servers = config->servers (); + for (vector::iterator i = servers.begin(); i != servers.end(); ++i) { + add_server_to_store (*i); + } + + _servers_view.set_model (_servers_store); + _servers_view.append_column_editable ("Host Name", _servers_columns._host_name); + _servers_view.append_column_editable ("Threads", _servers_columns._threads); + + _add_server.signal_clicked().connect (sigc::mem_fun (*this, &ConfigDialog::add_server_clicked)); + _remove_server.signal_clicked().connect (sigc::mem_fun (*this, &ConfigDialog::remove_server_clicked)); + + _servers_view.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::server_selection_changed)); + server_selection_changed (); + + _screens_store = Gtk::TreeStore::create (_screens_columns); + vector > screens = config->screens (); + for (vector >::iterator i = screens.begin(); i != screens.end(); ++i) { + add_screen_to_store (*i); + } + + _screens_view.set_model (_screens_store); + _screens_view.append_column_editable ("Screen", _screens_columns._name); + _screens_view.append_column ("Format", _screens_columns._format_name); + _screens_view.append_column_editable ("x", _screens_columns._x); + _screens_view.append_column_editable ("y", _screens_columns._y); + _screens_view.append_column_editable ("Width", _screens_columns._width); + _screens_view.append_column_editable ("Height", _screens_columns._height); + + _add_screen.signal_clicked().connect (sigc::mem_fun (*this, &ConfigDialog::add_screen_clicked)); + _remove_screen.signal_clicked().connect (sigc::mem_fun (*this, &ConfigDialog::remove_screen_clicked)); + + _screens_view.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ConfigDialog::screen_selection_changed)); + screen_selection_changed (); + + int n = 0; + t->attach (left_aligned_label ("TMS IP address"), 0, 1, n, n + 1); + t->attach (_tms_ip, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("TMS target path"), 0, 1, n, n + 1); + t->attach (_tms_path, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("TMS user name"), 0, 1, n, n + 1); + t->attach (_tms_user, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("TMS password"), 0, 1, n, n + 1); + t->attach (_tms_password, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Threads to use for encoding on this host"), 0, 1, n, n + 1); + t->attach (_num_local_encoding_threads, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Colour look-up table"), 0, 1, n, n + 1); + t->attach (_colour_lut, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("JPEG2000 bandwidth"), 0, 1, n, n + 1); + t->attach (_j2k_bandwidth, 1, 2, n, n + 1); + t->attach (left_aligned_label ("MBps"), 2, 3, n, n + 1); + ++n; + t->attach (left_aligned_label ("Reference scaler for A/B"), 0, 1, n, n + 1); + t->attach (_reference_scaler, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Reference filters for A/B"), 0, 1, n, n + 1); + Gtk::HBox* fb = Gtk::manage (new Gtk::HBox); + fb->set_spacing (4); + fb->pack_start (_reference_filters, true, true); + fb->pack_start (_reference_filters_button, false, false); + t->attach (*fb, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Encoding Servers"), 0, 1, n, n + 1); + t->attach (_servers_view, 1, 2, n, n + 1); + Gtk::VBox* b = manage (new Gtk::VBox); + b->pack_start (_add_server, false, false); + b->pack_start (_remove_server, false, false); + t->attach (*b, 2, 3, n, n + 1); + ++n; + t->attach (left_aligned_label ("Screens"), 0, 1, n, n + 1); + t->attach (_screens_view, 1, 2, n, n + 1); + b = manage (new Gtk::VBox); + b->pack_start (_add_screen, false, false); + b->pack_start (_remove_screen, false, false); + t->attach (*b, 2, 3, n, n + 1); + ++n; + + t->show_all (); + get_vbox()->pack_start (*t); + + get_vbox()->set_border_width (24); + + add_button ("Close", Gtk::RESPONSE_CLOSE); +} + +void +ConfigDialog::tms_ip_changed () +{ + Config::instance()->set_tms_ip (_tms_ip.get_text ()); +} + +void +ConfigDialog::tms_path_changed () +{ + Config::instance()->set_tms_path (_tms_path.get_text ()); +} + +void +ConfigDialog::tms_user_changed () +{ + Config::instance()->set_tms_user (_tms_user.get_text ()); +} + +void +ConfigDialog::tms_password_changed () +{ + Config::instance()->set_tms_password (_tms_password.get_text ()); +} + + +void +ConfigDialog::num_local_encoding_threads_changed () +{ + Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads.get_value ()); +} + +void +ConfigDialog::colour_lut_changed () +{ + Config::instance()->set_colour_lut_index (_colour_lut.get_active_row_number ()); +} + +void +ConfigDialog::j2k_bandwidth_changed () +{ + Config::instance()->set_j2k_bandwidth (_j2k_bandwidth.get_value() * 1e6); +} + +void +ConfigDialog::on_response (int r) +{ + vector servers; + + Gtk::TreeModel::Children c = _servers_store->children (); + for (Gtk::TreeModel::Children::iterator i = c.begin(); i != c.end(); ++i) { + Gtk::TreeModel::Row r = *i; + Server* s = new Server (r[_servers_columns._host_name], r[_servers_columns._threads]); + servers.push_back (s); + } + + Config::instance()->set_servers (servers); + + vector > screens; + + c = _screens_store->children (); + for (Gtk::TreeModel::Children::iterator i = c.begin(); i != c.end(); ++i) { + + Gtk::TreeModel::Row r = *i; + shared_ptr s (new Screen (r[_screens_columns._name])); + + Gtk::TreeModel::Children cc = r.children (); + for (Gtk::TreeModel::Children::iterator j = cc.begin(); j != cc.end(); ++j) { + Gtk::TreeModel::Row r = *j; + string const x_ = r[_screens_columns._x]; + string const y_ = r[_screens_columns._y]; + string const width_ = r[_screens_columns._width]; + string const height_ = r[_screens_columns._height]; + s->set_geometry ( + Format::from_nickname (r[_screens_columns._format_nickname]), + Position (lexical_cast (x_), lexical_cast (y_)), + Size (lexical_cast (width_), lexical_cast (height_)) + ); + } + + screens.push_back (s); + } + + Config::instance()->set_screens (screens); + + Gtk::Dialog::on_response (r); +} + +void +ConfigDialog::add_server_to_store (Server* s) +{ + Gtk::TreeModel::iterator i = _servers_store->append (); + Gtk::TreeModel::Row r = *i; + r[_servers_columns._host_name] = s->host_name (); + r[_servers_columns._threads] = s->threads (); +} + +void +ConfigDialog::add_server_clicked () +{ + Server s ("localhost", 1); + add_server_to_store (&s); +} + +void +ConfigDialog::remove_server_clicked () +{ + Gtk::TreeModel::iterator i = _servers_view.get_selection()->get_selected (); + if (i) { + _servers_store->erase (i); + } +} + +void +ConfigDialog::server_selection_changed () +{ + Gtk::TreeModel::iterator i = _servers_view.get_selection()->get_selected (); + _remove_server.set_sensitive (i); +} + + +void +ConfigDialog::add_screen_to_store (shared_ptr s) +{ + Gtk::TreeModel::iterator i = _screens_store->append (); + Gtk::TreeModel::Row r = *i; + r[_screens_columns._name] = s->name (); + + Screen::GeometryMap geoms = s->geometries (); + for (Screen::GeometryMap::const_iterator j = geoms.begin(); j != geoms.end(); ++j) { + i = _screens_store->append (r.children ()); + Gtk::TreeModel::Row c = *i; + c[_screens_columns._format_name] = j->first->name (); + c[_screens_columns._format_nickname] = j->first->nickname (); + c[_screens_columns._x] = lexical_cast (j->second.position.x); + c[_screens_columns._y] = lexical_cast (j->second.position.y); + c[_screens_columns._width] = lexical_cast (j->second.size.width); + c[_screens_columns._height] = lexical_cast (j->second.size.height); + } +} + +void +ConfigDialog::add_screen_clicked () +{ + shared_ptr s (new Screen ("New Screen")); + add_screen_to_store (s); +} + +void +ConfigDialog::remove_screen_clicked () +{ + Gtk::TreeModel::iterator i = _screens_view.get_selection()->get_selected (); + if (i) { + _screens_store->erase (i); + } +} + +void +ConfigDialog::screen_selection_changed () +{ + Gtk::TreeModel::iterator i = _screens_view.get_selection()->get_selected (); + _remove_screen.set_sensitive (i); +} + + +void +ConfigDialog::reference_scaler_changed () +{ + int const n = _reference_scaler.get_active_row_number (); + if (n >= 0) { + Config::instance()->set_reference_scaler (Scaler::from_index (n)); + } +} + +void +ConfigDialog::edit_reference_filters_clicked () +{ + FilterDialog d (Config::instance()->reference_filters ()); + d.ActiveChanged.connect (sigc::mem_fun (*this, &ConfigDialog::reference_filters_changed)); + d.run (); +} + +void +ConfigDialog::reference_filters_changed (vector f) +{ + Config::instance()->set_reference_filters (f); + pair p = Filter::ffmpeg_strings (Config::instance()->reference_filters ()); + _reference_filters.set_text (p.first + " " + p.second); +} diff --git a/src/gtk/config_dialog.h b/src/gtk/config_dialog.h new file mode 100644 index 000000000..ec345750a --- /dev/null +++ b/src/gtk/config_dialog.h @@ -0,0 +1,113 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/config_dialog.h + * @brief A dialogue to edit DVD-o-matic configuration. + */ + +#include + +class Screen; +class Server; + +/** @class ConfigDialog + * @brief A dialogue to edit DVD-o-matic configuration. + */ +class ConfigDialog : public Gtk::Dialog +{ +public: + ConfigDialog (); + +private: + void on_response (int); + + void tms_ip_changed (); + void tms_path_changed (); + void tms_user_changed (); + void tms_password_changed (); + void num_local_encoding_threads_changed (); + void colour_lut_changed (); + void j2k_bandwidth_changed (); + void add_server_clicked (); + void remove_server_clicked (); + void server_selection_changed (); + void add_screen_clicked (); + void remove_screen_clicked (); + void screen_selection_changed (); + void reference_scaler_changed (); + void edit_reference_filters_clicked (); + void reference_filters_changed (std::vector); + + void add_screen_to_store (boost::shared_ptr); + void add_server_to_store (Server *); + + struct ServersModelColumns : public Gtk::TreeModelColumnRecord + { + ServersModelColumns () { + add (_host_name); + add (_threads); + } + + Gtk::TreeModelColumn _host_name; + Gtk::TreeModelColumn _threads; + }; + + struct ScreensModelColumns : public Gtk::TreeModelColumnRecord + { + ScreensModelColumns () { + add (_name); + add (_format_name); + add (_format_nickname); + add (_x); + add (_y); + add (_width); + add (_height); + } + + Gtk::TreeModelColumn _name; + Gtk::TreeModelColumn _format_name; + Gtk::TreeModelColumn _format_nickname; + Gtk::TreeModelColumn _x; + Gtk::TreeModelColumn _y; + Gtk::TreeModelColumn _width; + Gtk::TreeModelColumn _height; + }; + + Gtk::Entry _tms_ip; + Gtk::Entry _tms_path; + Gtk::Entry _tms_user; + Gtk::Entry _tms_password; + Gtk::SpinButton _num_local_encoding_threads; + Gtk::ComboBoxText _colour_lut; + Gtk::SpinButton _j2k_bandwidth; + Gtk::ComboBoxText _reference_scaler; + Gtk::Label _reference_filters; + Gtk::Button _reference_filters_button; + ServersModelColumns _servers_columns; + Glib::RefPtr _servers_store; + Gtk::TreeView _servers_view; + Gtk::Button _add_server; + Gtk::Button _remove_server; + ScreensModelColumns _screens_columns; + Glib::RefPtr _screens_store; + Gtk::TreeView _screens_view; + Gtk::Button _add_screen; + Gtk::Button _remove_screen; +}; + diff --git a/src/gtk/dcp_range_dialog.cc b/src/gtk/dcp_range_dialog.cc new file mode 100644 index 000000000..d1fef0e8b --- /dev/null +++ b/src/gtk/dcp_range_dialog.cc @@ -0,0 +1,117 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "dcp_range_dialog.h" +#include "lib/film.h" + +DCPRangeDialog::DCPRangeDialog (Film* f) + : _film (f) + , _whole ("Whole film") + , _first ("First") + , _cut ("Cut remainder") + , _black_out ("Black-out remainder") +{ + set_title ("DCP range"); + + Gtk::Table* table = Gtk::manage (new Gtk::Table ()); + table->set_border_width (6); + table->set_row_spacings (6); + table->set_col_spacings (6); + table->attach (_whole, 0, 4, 0, 1); + table->attach (_first, 0, 1, 1, 2); + table->attach (_n_frames, 1, 2, 1, 2); + table->attach (*manage (new Gtk::Label ("frames")), 2, 3, 1, 2); + table->attach (_cut, 1, 2, 2, 3); + table->attach (_black_out, 1, 2, 3, 4); + + Gtk::RadioButtonGroup g = _whole.get_group (); + _first.set_group (g); + + g = _black_out.get_group (); + _cut.set_group (g); + + _n_frames.set_range (1, INT_MAX - 1); + _n_frames.set_increments (24, 24 * 60); + if (_film->dcp_frames() > 0) { + _whole.set_active (false); + _first.set_active (true); + _n_frames.set_value (_film->dcp_frames ()); + } else { + _whole.set_active (true); + _first.set_active (false); + _n_frames.set_value (24); + } + + _black_out.set_active (_film->dcp_trim_action() == BLACK_OUT); + _cut.set_active (_film->dcp_trim_action() == CUT); + + _whole.signal_toggled().connect (sigc::mem_fun (*this, &DCPRangeDialog::whole_toggled)); + _cut.signal_toggled().connect (sigc::mem_fun (*this, &DCPRangeDialog::cut_toggled)); + _n_frames.signal_value_changed().connect (sigc::mem_fun (*this, &DCPRangeDialog::n_frames_changed)); + + get_vbox()->pack_start (*table); + + add_button ("Close", Gtk::RESPONSE_CLOSE); + show_all_children (); + + set_sensitivity (); +} + +void +DCPRangeDialog::whole_toggled () +{ + set_sensitivity (); + emit_changed (); +} + +void +DCPRangeDialog::set_sensitivity () +{ + _n_frames.set_sensitive (_first.get_active ()); + _black_out.set_sensitive (_first.get_active ()); + _cut.set_sensitive (_first.get_active ()); +} + +void +DCPRangeDialog::cut_toggled () +{ + emit_changed (); +} + +void +DCPRangeDialog::n_frames_changed () +{ + emit_changed (); +} + +void +DCPRangeDialog::emit_changed () +{ + int frames = 0; + if (!_whole.get_active ()) { + frames = _n_frames.get_value_as_int (); + } + + TrimAction action = CUT; + if (_black_out.get_active ()) { + action = BLACK_OUT; + } + + Changed (frames, action); +} diff --git a/src/gtk/dcp_range_dialog.h b/src/gtk/dcp_range_dialog.h new file mode 100644 index 000000000..7469a2576 --- /dev/null +++ b/src/gtk/dcp_range_dialog.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/trim_action.h" + +class Film; + +class DCPRangeDialog : public Gtk::Dialog +{ +public: + DCPRangeDialog (Film *); + + sigc::signal2 Changed; + +private: + void whole_toggled (); + void cut_toggled (); + void n_frames_changed (); + + void set_sensitivity (); + void emit_changed (); + + Film* _film; + Gtk::RadioButton _whole; + Gtk::RadioButton _first; + Gtk::SpinButton _n_frames; + Gtk::RadioButton _cut; + Gtk::RadioButton _black_out; +}; diff --git a/src/gtk/film_editor.cc b/src/gtk/film_editor.cc new file mode 100644 index 000000000..0e410aa6b --- /dev/null +++ b/src/gtk/film_editor.cc @@ -0,0 +1,572 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_editor.cc + * @brief A GTK widget to edit a film's metadata, and perform various functions. + */ + +#include +#include +#include +#include +#include "lib/format.h" +#include "lib/film.h" +#include "lib/transcode_job.h" +#include "lib/exceptions.h" +#include "lib/ab_transcode_job.h" +#include "lib/thumbs_job.h" +#include "lib/make_mxf_job.h" +#include "lib/job_manager.h" +#include "lib/filter.h" +#include "lib/screen.h" +#include "lib/config.h" +#include "lib/scp_dcp_job.h" +#include "filter_dialog.h" +#include "gtk_util.h" +#include "film_editor.h" +#include "dcp_range_dialog.h" + +using namespace std; +using namespace boost; +using namespace Gtk; + +/** @param f Film to edit */ +FilmEditor::FilmEditor (Film* f) + : _film (f) + , _filters_button ("Edit...") + , _change_dcp_range_button ("Edit...") + , _dcp_ab ("A/B") +{ + _vbox.set_border_width (12); + _vbox.set_spacing (12); + + /* Set up our editing widgets */ + _left_crop.set_range (0, 1024); + _left_crop.set_increments (1, 16); + _top_crop.set_range (0, 1024); + _top_crop.set_increments (1, 16); + _right_crop.set_range (0, 1024); + _right_crop.set_increments (1, 16); + _bottom_crop.set_range (0, 1024); + _bottom_crop.set_increments (1, 16); + _filters.set_alignment (0, 0.5); + _audio_gain.set_range (-60, 60); + _audio_gain.set_increments (1, 3); + _audio_delay.set_range (-1000, 1000); + _audio_delay.set_increments (1, 20); + _still_duration.set_range (0, 60 * 60); + _still_duration.set_increments (1, 5); + _dcp_range.set_alignment (0, 0.5); + + vector fmt = Format::all (); + for (vector::iterator i = fmt.begin(); i != fmt.end(); ++i) { + _format.append_text ((*i)->name ()); + } + + _frames_per_second.set_increments (1, 5); + _frames_per_second.set_digits (2); + _frames_per_second.set_range (0, 60); + + vector const ct = DCPContentType::all (); + for (vector::const_iterator i = ct.begin(); i != ct.end(); ++i) { + _dcp_content_type.append_text ((*i)->pretty_name ()); + } + + vector const sc = Scaler::all (); + for (vector::const_iterator i = sc.begin(); i != sc.end(); ++i) { + _scaler.append_text ((*i)->name ()); + } + + _original_size.set_alignment (0, 0.5); + _length.set_alignment (0, 0.5); + _audio.set_alignment (0, 0.5); + + /* And set their values from the Film */ + set_film (f); + + /* Now connect to them, since initial values are safely set */ + _name.signal_changed().connect (sigc::mem_fun (*this, &FilmEditor::name_changed)); + _frames_per_second.signal_changed().connect (sigc::mem_fun (*this, &FilmEditor::frames_per_second_changed)); + _format.signal_changed().connect (sigc::mem_fun (*this, &FilmEditor::format_changed)); + _content.signal_file_set().connect (sigc::mem_fun (*this, &FilmEditor::content_changed)); + _left_crop.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::left_crop_changed)); + _right_crop.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::right_crop_changed)); + _top_crop.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::top_crop_changed)); + _bottom_crop.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::bottom_crop_changed)); + _filters_button.signal_clicked().connect (sigc::mem_fun (*this, &FilmEditor::edit_filters_clicked)); + _scaler.signal_changed().connect (sigc::mem_fun (*this, &FilmEditor::scaler_changed)); + _dcp_content_type.signal_changed().connect (sigc::mem_fun (*this, &FilmEditor::dcp_content_type_changed)); + _dcp_ab.signal_toggled().connect (sigc::mem_fun (*this, &FilmEditor::dcp_ab_toggled)); + _audio_gain.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::audio_gain_changed)); + _audio_delay.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::audio_delay_changed)); + _still_duration.signal_value_changed().connect (sigc::mem_fun (*this, &FilmEditor::still_duration_changed)); + _change_dcp_range_button.signal_clicked().connect (sigc::mem_fun (*this, &FilmEditor::change_dcp_range_clicked)); + + /* Set up the table */ + + Table* t = manage (new Table); + + t->set_row_spacings (4); + t->set_col_spacings (12); + + int n = 0; + t->attach (left_aligned_label ("Name"), 0, 1, n, n + 1); + t->attach (_name, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Content"), 0, 1, n, n + 1); + t->attach (_content, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Content Type"), 0, 1, n, n + 1); + t->attach (_dcp_content_type, 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Frames Per Second")), 0, 1, n, n + 1); + t->attach (video_widget (_frames_per_second), 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Format"), 0, 1, n, n + 1); + t->attach (_format, 1, 2, n, n + 1); + ++n; + t->attach (left_aligned_label ("Crop"), 0, 1, n, n + 1); + HBox* c = manage (new HBox); + c->set_spacing (4); + c->pack_start (left_aligned_label ("L"), false, false); + c->pack_start (_left_crop, true, true); + c->pack_start (left_aligned_label ("R"), false, false); + c->pack_start (_right_crop, true, true); + c->pack_start (left_aligned_label ("T"), false, false); + c->pack_start (_top_crop, true, true); + c->pack_start (left_aligned_label ("B"), false, false); + c->pack_start (_bottom_crop, true, true); + t->attach (*c, 1, 2, n, n + 1); + ++n; + + /* VIDEO-only stuff */ + int const special = n; + t->attach (video_widget (left_aligned_label ("Filters")), 0, 1, n, n + 1); + HBox* fb = manage (new HBox); + fb->set_spacing (4); + fb->pack_start (video_widget (_filters), true, true); + fb->pack_start (video_widget (_filters_button), false, false); + t->attach (*fb, 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Scaler")), 0, 1, n, n + 1); + t->attach (video_widget (_scaler), 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Audio Gain")), 0, 1, n, n + 1); + t->attach (video_widget (_audio_gain), 1, 2, n, n + 1); + t->attach (video_widget (left_aligned_label ("dB")), 2, 3, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Audio Delay")), 0, 1, n, n + 1); + t->attach (video_widget (_audio_delay), 1, 2, n, n + 1); + t->attach (video_widget (left_aligned_label ("ms")), 2, 3, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Original Size")), 0, 1, n, n + 1); + t->attach (video_widget (_original_size), 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Length")), 0, 1, n, n + 1); + t->attach (video_widget (_length), 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Audio")), 0, 1, n, n + 1); + t->attach (video_widget (_audio), 1, 2, n, n + 1); + ++n; + t->attach (video_widget (left_aligned_label ("Range")), 0, 1, n, n + 1); + Gtk::HBox* db = manage (new Gtk::HBox); + db->pack_start (_dcp_range, true, true); + db->pack_start (_change_dcp_range_button, false, false); + t->attach (*db, 1, 2, n, n + 1); + ++n; + t->attach (_dcp_ab, 0, 3, n, n + 1); + + /* STILL-only stuff */ + n = special; + t->attach (still_widget (left_aligned_label ("Duration")), 0, 1, n, n + 1); + t->attach (still_widget (_still_duration), 1, 2, n, n + 1); + t->attach (still_widget (left_aligned_label ("s")), 2, 3, n, n + 1); + ++n; + + t->show_all (); + _vbox.pack_start (*t, false, false); +} + +/** @return Our main widget, which contains everything else */ +Widget& +FilmEditor::widget () +{ + return _vbox; +} + +/** Called when the left crop widget has been changed */ +void +FilmEditor::left_crop_changed () +{ + if (_film) { + _film->set_left_crop (_left_crop.get_value ()); + } +} + +/** Called when the right crop widget has been changed */ +void +FilmEditor::right_crop_changed () +{ + if (_film) { + _film->set_right_crop (_right_crop.get_value ()); + } +} + +/** Called when the top crop widget has been changed */ +void +FilmEditor::top_crop_changed () +{ + if (_film) { + _film->set_top_crop (_top_crop.get_value ()); + } +} + +/** Called when the bottom crop value has been changed */ +void +FilmEditor::bottom_crop_changed () +{ + if (_film) { + _film->set_bottom_crop (_bottom_crop.get_value ()); + } +} + +/** Called when the content filename has been changed */ +void +FilmEditor::content_changed () +{ + if (!_film) { + return; + } + + try { + _film->set_content (_content.get_filename ()); + } catch (std::exception& e) { + _content.set_filename (_film->directory ()); + stringstream m; + m << "Could not set content: " << e.what() << "."; + Gtk::MessageDialog d (m.str(), false, MESSAGE_ERROR); + d.set_title ("DVD-o-matic"); + d.run (); + } +} + +/** Called when the DCP A/B switch has been toggled */ +void +FilmEditor::dcp_ab_toggled () +{ + if (_film) { + _film->set_dcp_ab (_dcp_ab.get_active ()); + } +} + +/** Called when the name widget has been changed */ +void +FilmEditor::name_changed () +{ + if (_film) { + _film->set_name (_name.get_text ()); + } +} + +/** Called when the metadata stored in the Film object has changed; + * so that we can update the GUI. + * @param p Property of the Film that has changed. + */ +void +FilmEditor::film_changed (Film::Property p) +{ + if (!_film) { + return; + } + + stringstream s; + + switch (p) { + case Film::CONTENT: + _content.set_filename (_film->content ()); + setup_visibility (); + break; + case Film::FORMAT: + _format.set_active (Format::as_index (_film->format ())); + break; + case Film::LEFT_CROP: + _left_crop.set_value (_film->left_crop ()); + break; + case Film::RIGHT_CROP: + _right_crop.set_value (_film->right_crop ()); + break; + case Film::TOP_CROP: + _top_crop.set_value (_film->top_crop ()); + break; + case Film::BOTTOM_CROP: + _bottom_crop.set_value (_film->bottom_crop ()); + break; + case Film::FILTERS: + { + pair p = Filter::ffmpeg_strings (_film->filters ()); + _filters.set_text (p.first + " " + p.second); + break; + } + case Film::NAME: + _name.set_text (_film->name ()); + break; + case Film::FRAMES_PER_SECOND: + _frames_per_second.set_value (_film->frames_per_second ()); + break; + case Film::AUDIO_CHANNELS: + case Film::AUDIO_SAMPLE_RATE: + s << _film->audio_channels () << " channels, " << _film->audio_sample_rate() << "Hz"; + _audio.set_text (s.str ()); + break; + case Film::SIZE: + s << _film->size().width << " x " << _film->size().height; + _original_size.set_text (s.str ()); + break; + case Film::LENGTH: + if (_film->frames_per_second() > 0) { + s << _film->length() << " frames; " << seconds_to_hms (_film->length() / _film->frames_per_second()); + } else { + s << _film->length() << " frames"; + } + _length.set_text (s.str ()); + break; + case Film::DCP_CONTENT_TYPE: + _dcp_content_type.set_active (DCPContentType::as_index (_film->dcp_content_type ())); + break; + case Film::THUMBS: + break; + case Film::DCP_FRAMES: + if (_film->dcp_frames() == 0) { + _dcp_range.set_text ("Whole film"); + } else { + stringstream s; + s << "First " << _film->dcp_frames() << " frames"; + _dcp_range.set_text (s.str ()); + } + break; + case Film::DCP_TRIM_ACTION: + break; + case Film::DCP_AB: + _dcp_ab.set_active (_film->dcp_ab ()); + break; + case Film::SCALER: + _scaler.set_active (Scaler::as_index (_film->scaler ())); + break; + case Film::AUDIO_GAIN: + _audio_gain.set_value (_film->audio_gain ()); + break; + case Film::AUDIO_DELAY: + _audio_delay.set_value (_film->audio_delay ()); + break; + case Film::STILL_DURATION: + _still_duration.set_value (_film->still_duration ()); + break; + } +} + +/** Called when the format widget has been changed */ +void +FilmEditor::format_changed () +{ + if (_film) { + int const n = _format.get_active_row_number (); + if (n >= 0) { + _film->set_format (Format::from_index (n)); + } + } +} + +/** Called when the DCP content type widget has been changed */ +void +FilmEditor::dcp_content_type_changed () +{ + if (_film) { + int const n = _dcp_content_type.get_active_row_number (); + if (n >= 0) { + _film->set_dcp_content_type (DCPContentType::from_index (n)); + } + } +} + +/** Sets the Film that we are editing */ +void +FilmEditor::set_film (Film* f) +{ + _film = f; + + set_things_sensitive (_film != 0); + + if (_film) { + _film->Changed.connect (sigc::mem_fun (*this, &FilmEditor::film_changed)); + } + + if (_film) { + FileChanged (_film->directory ()); + } else { + FileChanged (""); + } + + film_changed (Film::NAME); + film_changed (Film::CONTENT); + film_changed (Film::DCP_CONTENT_TYPE); + film_changed (Film::FORMAT); + film_changed (Film::LEFT_CROP); + film_changed (Film::RIGHT_CROP); + film_changed (Film::TOP_CROP); + film_changed (Film::BOTTOM_CROP); + film_changed (Film::FILTERS); + film_changed (Film::DCP_FRAMES); + film_changed (Film::DCP_TRIM_ACTION); + film_changed (Film::DCP_AB); + film_changed (Film::SIZE); + film_changed (Film::LENGTH); + film_changed (Film::FRAMES_PER_SECOND); + film_changed (Film::AUDIO_CHANNELS); + film_changed (Film::AUDIO_SAMPLE_RATE); + film_changed (Film::SCALER); + film_changed (Film::AUDIO_GAIN); + film_changed (Film::AUDIO_DELAY); + film_changed (Film::STILL_DURATION); +} + +/** Updates the sensitivity of lots of widgets to a given value. + * @param s true to make sensitive, false to make insensitive. + */ +void +FilmEditor::set_things_sensitive (bool s) +{ + _name.set_sensitive (s); + _frames_per_second.set_sensitive (s); + _format.set_sensitive (s); + _content.set_sensitive (s); + _left_crop.set_sensitive (s); + _right_crop.set_sensitive (s); + _top_crop.set_sensitive (s); + _bottom_crop.set_sensitive (s); + _filters_button.set_sensitive (s); + _scaler.set_sensitive (s); + _dcp_content_type.set_sensitive (s); + _dcp_range.set_sensitive (s); + _change_dcp_range_button.set_sensitive (s); + _dcp_ab.set_sensitive (s); + _audio_gain.set_sensitive (s); + _audio_delay.set_sensitive (s); + _still_duration.set_sensitive (s); +} + +/** Called when the `Edit filters' button has been clicked */ +void +FilmEditor::edit_filters_clicked () +{ + FilterDialog d (_film->filters ()); + d.ActiveChanged.connect (sigc::mem_fun (*_film, &Film::set_filters)); + d.run (); +} + +/** Called when the scaler widget has been changed */ +void +FilmEditor::scaler_changed () +{ + if (_film) { + int const n = _scaler.get_active_row_number (); + if (n >= 0) { + _film->set_scaler (Scaler::from_index (n)); + } + } +} + +/** Called when the frames per second widget has been changed */ +void +FilmEditor::frames_per_second_changed () +{ + if (_film) { + _film->set_frames_per_second (_frames_per_second.get_value ()); + } +} + +void +FilmEditor::audio_gain_changed () +{ + if (_film) { + _film->set_audio_gain (_audio_gain.get_value ()); + } +} + +void +FilmEditor::audio_delay_changed () +{ + if (_film) { + _film->set_audio_delay (_audio_delay.get_value ()); + } +} + +Widget& +FilmEditor::video_widget (Widget& w) +{ + _video_widgets.push_back (&w); + return w; +} + +Widget& +FilmEditor::still_widget (Widget& w) +{ + _still_widgets.push_back (&w); + return w; +} + +void +FilmEditor::setup_visibility () +{ + if (!_film) { + return; + } + + ContentType const c = _film->content_type (); + + for (list::iterator i = _video_widgets.begin(); i != _video_widgets.end(); ++i) { + (*i)->property_visible() = (c == VIDEO); + } + + for (list::iterator i = _still_widgets.begin(); i != _still_widgets.end(); ++i) { + (*i)->property_visible() = (c == STILL); + } +} + +void +FilmEditor::still_duration_changed () +{ + if (_film) { + _film->set_still_duration (_still_duration.get_value ()); + } +} + +void +FilmEditor::change_dcp_range_clicked () +{ + DCPRangeDialog d (_film); + d.Changed.connect (sigc::mem_fun (*this, &FilmEditor::dcp_range_changed)); + d.run (); +} + +void +FilmEditor::dcp_range_changed (int frames, TrimAction action) +{ + _film->set_dcp_frames (frames); + _film->set_dcp_trim_action (action); +} diff --git a/src/gtk/film_editor.h b/src/gtk/film_editor.h new file mode 100644 index 000000000..9d15b436d --- /dev/null +++ b/src/gtk/film_editor.h @@ -0,0 +1,125 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_editor.h + * @brief A GTK widget to edit a film's metadata, and perform various functions. + */ + +#include + +class Film; + +/** @class FilmEditor + * @brief A GTK widget to edit a film's metadata, and perform various functions. + */ +class FilmEditor +{ +public: + FilmEditor (Film *); + + Gtk::Widget& widget (); + + void set_film (Film *); + void setup_visibility (); + + sigc::signal1 FileChanged; + +private: + /* Handle changes to the view */ + void name_changed (); + void left_crop_changed (); + void right_crop_changed (); + void top_crop_changed (); + void bottom_crop_changed (); + void content_changed (); + void frames_per_second_changed (); + void format_changed (); + void dcp_range_changed (int, TrimAction); + void dcp_content_type_changed (); + void dcp_ab_toggled (); + void scaler_changed (); + void audio_gain_changed (); + void audio_delay_changed (); + void still_duration_changed (); + + /* Handle changes to the model */ + void film_changed (Film::Property); + + /* Button clicks */ + void edit_filters_clicked (); + void change_dcp_range_clicked (); + + void set_things_sensitive (bool); + + Gtk::Widget & video_widget (Gtk::Widget &); + Gtk::Widget & still_widget (Gtk::Widget &); + + /** The film we are editing */ + Film* _film; + /** The overall VBox containing our widget */ + Gtk::VBox _vbox; + /** The Film's name */ + Gtk::Entry _name; + /** The Film's frames per second */ + Gtk::SpinButton _frames_per_second; + /** The Film's format */ + Gtk::ComboBoxText _format; + /** The Film's content file */ + Gtk::FileChooserButton _content; + /** The Film's left crop */ + Gtk::SpinButton _left_crop; + /** The Film's right crop */ + Gtk::SpinButton _right_crop; + /** The Film's top crop */ + Gtk::SpinButton _top_crop; + /** The Film's bottom crop */ + Gtk::SpinButton _bottom_crop; + /** Currently-applied filters */ + Gtk::Label _filters; + /** Button to open the filters dialogue */ + Gtk::Button _filters_button; + /** The Film's scaler */ + Gtk::ComboBoxText _scaler; + /** The Film's audio gain */ + Gtk::SpinButton _audio_gain; + /** The Film's audio delay */ + Gtk::SpinButton _audio_delay; + /** The Film's DCP content type */ + Gtk::ComboBoxText _dcp_content_type; + /** The Film's original size */ + Gtk::Label _original_size; + /** The Film's length */ + Gtk::Label _length; + /** The Film's audio details */ + Gtk::Label _audio; + /** The Film's duration for still sources */ + Gtk::SpinButton _still_duration; + + /** Button to start making a DCP from existing J2K and WAV files */ + Gtk::Button _make_dcp_from_existing_button; + /** Display of the range of frames that will be used */ + Gtk::Label _dcp_range; + /** Button to change the range */ + Gtk::Button _change_dcp_range_button; + /** Selector to generate an A/B comparison DCP */ + Gtk::CheckButton _dcp_ab; + + std::list _video_widgets; + std::list _still_widgets; +}; diff --git a/src/gtk/film_list.cc b/src/gtk/film_list.cc new file mode 100644 index 000000000..1a9854450 --- /dev/null +++ b/src/gtk/film_list.cc @@ -0,0 +1,65 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/film.h" +#include "film_list.h" + +using namespace std; +using namespace boost; + +FilmList::FilmList (string d) + : _directory (d) + , _list (1) +{ + for (filesystem::directory_iterator i = filesystem::directory_iterator (_directory); i != filesystem::directory_iterator(); ++i) { + if (is_directory (*i)) { + filesystem::path m = filesystem::path (*i) / filesystem::path ("metadata"); + if (is_regular_file (m)) { + Film* f = new Film (i->path().string()); + _films.push_back (f); + } + } + } + + for (vector::iterator i = _films.begin(); i != _films.end(); ++i) { + _list.append_text ((*i)->name ()); + } + + _list.set_headers_visible (false); + _list.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &FilmList::selection_changed)); +} + +Gtk::Widget& +FilmList::widget () +{ + return _list; +} + +void +FilmList::selection_changed () +{ + Gtk::ListViewText::SelectionList s = _list.get_selected (); + if (s.empty ()) { + return; + } + + assert (s[0] < int (_films.size ())); + SelectionChanged (_films[s[0]]); +} diff --git a/src/gtk/film_list.h b/src/gtk/film_list.h new file mode 100644 index 000000000..5a4ac3cc1 --- /dev/null +++ b/src/gtk/film_list.h @@ -0,0 +1,41 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include + +class Film; + +class FilmList +{ +public: + FilmList (std::string); + + Gtk::Widget& widget (); + + sigc::signal SelectionChanged; + +private: + void selection_changed (); + + std::string _directory; + std::vector _films; + Gtk::ListViewText _list; +}; diff --git a/src/gtk/film_player.cc b/src/gtk/film_player.cc new file mode 100644 index 000000000..63e6e49ee --- /dev/null +++ b/src/gtk/film_player.cc @@ -0,0 +1,310 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "lib/screen.h" +#include "lib/config.h" +#include "lib/player_manager.h" +#include "lib/film.h" +#include "film_player.h" +#include "gtk_util.h" + +using namespace std; +using namespace boost; + +FilmPlayer::FilmPlayer (Film const * f) + : _play ("Play") + , _pause ("Pause") + , _stop ("Stop") + , _ab ("A/B") + , _ignore_position_changed (false) +{ + set_film (f); + + vector > const scr = Config::instance()->screens (); + for (vector >::const_iterator i = scr.begin(); i != scr.end(); ++i) { + _screen.append_text ((*i)->name ()); + } + + if (!scr.empty ()) { + _screen.set_active (0); + } + + _status.set_use_markup (true); + + _position.set_digits (0); + + _main_vbox.set_spacing (12); + + Gtk::HBox* l = manage (new Gtk::HBox); + l->pack_start (_play); + l->pack_start (_pause); + l->pack_start (_stop); + + Gtk::VBox* r = manage (new Gtk::VBox); + r->pack_start (_screen, false, false); + r->pack_start (_ab, false, false); + r->pack_start (*manage (new Gtk::Label ("")), true, true); + + Gtk::HBox* t = manage (new Gtk::HBox); + t->pack_start (*l, true, true); + t->pack_start (*r, false, false); + + _main_vbox.pack_start (*t, true, true); + _main_vbox.pack_start (_position, false, false); + _main_vbox.pack_start (_status, false, false); + + _play.signal_clicked().connect (sigc::mem_fun (*this, &FilmPlayer::play_clicked)); + _pause.signal_clicked().connect (sigc::mem_fun (*this, &FilmPlayer::pause_clicked)); + _stop.signal_clicked().connect (sigc::mem_fun (*this, &FilmPlayer::stop_clicked)); + _position.signal_value_changed().connect (sigc::mem_fun (*this, &FilmPlayer::position_changed)); + _position.signal_format_value().connect (sigc::mem_fun (*this, &FilmPlayer::format_position)); + + set_button_states (); + Glib::signal_timeout().connect (sigc::bind_return (sigc::mem_fun (*this, &FilmPlayer::update), true), 1000); + + Config::instance()->Changed.connect (sigc::mem_fun (*this, &FilmPlayer::update_screens)); +} + +void +FilmPlayer::set_film (Film const * f) +{ + _film = f; + + if (_film && _film->length() != 0 && _film->frames_per_second() != 0) { + _position.set_range (0, _film->length() / _film->frames_per_second()); + } + + if (_film) { + _film->Changed.connect (sigc::mem_fun (*this, &FilmPlayer::film_changed)); + } +} + +Gtk::Widget & +FilmPlayer::widget () +{ + return _main_vbox; +} + +void +FilmPlayer::set_button_states () +{ + if (_film == 0) { + _play.set_sensitive (false); + _pause.set_sensitive (false); + _stop.set_sensitive (false); + _screen.set_sensitive (false); + _position.set_sensitive (false); + _ab.set_sensitive (false); + return; + } + + PlayerManager::State s = PlayerManager::instance()->state (); + + switch (s) { + case PlayerManager::QUIESCENT: + _play.set_sensitive (true); + _pause.set_sensitive (false); + _stop.set_sensitive (false); + _screen.set_sensitive (true); + _position.set_sensitive (false); + _ab.set_sensitive (true); + break; + case PlayerManager::PLAYING: + _play.set_sensitive (false); + _pause.set_sensitive (true); + _stop.set_sensitive (true); + _screen.set_sensitive (false); + _position.set_sensitive (true); + _ab.set_sensitive (false); + break; + case PlayerManager::PAUSED: + _play.set_sensitive (true); + _pause.set_sensitive (false); + _stop.set_sensitive (true); + _screen.set_sensitive (false); + _position.set_sensitive (false); + _ab.set_sensitive (false); + break; + } +} + +void +FilmPlayer::play_clicked () +{ + PlayerManager* p = PlayerManager::instance (); + + switch (p->state ()) { + case PlayerManager::QUIESCENT: + _last_play_fs = _film->state_copy (); + if (_ab.get_active ()) { + shared_ptr fs_a = _film->state_copy (); + fs_a->filters.clear (); + /* This is somewhat arbitrary, but hey ho */ + fs_a->scaler = Scaler::from_id ("bicubic"); + p->setup (fs_a, _last_play_fs, screen ()); + } else { + p->setup (_last_play_fs, screen ()); + } + p->pause_or_unpause (); + break; + case PlayerManager::PLAYING: + break; + case PlayerManager::PAUSED: + p->pause_or_unpause (); + break; + } +} + +void +FilmPlayer::pause_clicked () +{ + PlayerManager* p = PlayerManager::instance (); + + switch (p->state ()) { + case PlayerManager::QUIESCENT: + break; + case PlayerManager::PLAYING: + p->pause_or_unpause (); + break; + case PlayerManager::PAUSED: + break; + } +} + +void +FilmPlayer::stop_clicked () +{ + PlayerManager::instance()->stop (); +} + +shared_ptr +FilmPlayer::screen () const +{ + vector > const s = Config::instance()->screens (); + if (s.empty ()) { + return shared_ptr (); + } + + int const r = _screen.get_active_row_number (); + if (r >= int (s.size ())) { + return s[0]; + } + + return s[r]; +} + +void +FilmPlayer::update () +{ + set_button_states (); + set_status (); +} + +void +FilmPlayer::set_status () +{ + PlayerManager::State s = PlayerManager::instance()->state (); + + stringstream m; + switch (s) { + case PlayerManager::QUIESCENT: + m << "Idle"; + break; + case PlayerManager::PLAYING: + m << "PLAYING"; + break; + case PlayerManager::PAUSED: + m << "Paused"; + break; + } + + _ignore_position_changed = true; + + if (s != PlayerManager::QUIESCENT) { + float const p = PlayerManager::instance()->position (); + if (_last_play_fs->frames_per_second != 0 && _last_play_fs->length != 0) { + m << " (" << seconds_to_hms (_last_play_fs->length / _last_play_fs->frames_per_second - p) << " remaining)"; + } + + _position.set_value (p); + } else { + _position.set_value (0); + } + + _ignore_position_changed = false; + + _status.set_markup (m.str ()); +} + +void +FilmPlayer::position_changed () +{ + if (_ignore_position_changed) { + return; + } + + PlayerManager::instance()->set_position (_position.get_value ()); +} + +string +FilmPlayer::format_position (double v) +{ + return seconds_to_hms (v); +} + +void +FilmPlayer::update_screens () +{ + string const c = _screen.get_active_text (); + + _screen.clear (); + + vector > const scr = Config::instance()->screens (); + bool have_last_active_text = false; + for (vector >::const_iterator i = scr.begin(); i != scr.end(); ++i) { + _screen.append_text ((*i)->name ()); + if ((*i)->name() == c) { + have_last_active_text = true; + } + } + + if (have_last_active_text) { + _screen.set_active_text (c); + } else if (!scr.empty ()) { + _screen.set_active (0); + } +} + +void +FilmPlayer::film_changed (Film::Property p) +{ + if (p == Film::CONTENT) { + setup_visibility (); + } +} + +void +FilmPlayer::setup_visibility () +{ + if (!_film) { + return; + } + + widget().property_visible() = (_film->content_type() == VIDEO); +} diff --git a/src/gtk/film_player.h b/src/gtk/film_player.h new file mode 100644 index 000000000..bb60eeb3b --- /dev/null +++ b/src/gtk/film_player.h @@ -0,0 +1,63 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/film.h" + +class Film; +class Screen; +class FilmState; + +class FilmPlayer +{ +public: + FilmPlayer (Film const * f = 0); + + Gtk::Widget& widget (); + + void set_film (Film const *); + void setup_visibility (); + +private: + void play_clicked (); + void pause_clicked (); + void stop_clicked (); + void position_changed (); + std::string format_position (double); + void film_changed (Film::Property); + + void set_button_states (); + boost::shared_ptr screen () const; + void set_status (); + void update (); + void update_screens (); + + Film const * _film; + boost::shared_ptr _last_play_fs; + + Gtk::VBox _main_vbox; + Gtk::Button _play; + Gtk::Button _pause; + Gtk::Button _stop; + Gtk::Label _status; + Gtk::CheckButton _ab; + Gtk::ComboBoxText _screen; + Gtk::HScale _position; + bool _ignore_position_changed; +}; diff --git a/src/gtk/film_viewer.cc b/src/gtk/film_viewer.cc new file mode 100644 index 000000000..0408d50b8 --- /dev/null +++ b/src/gtk/film_viewer.cc @@ -0,0 +1,224 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_viewer.cc + * @brief A GTK widget to view `thumbnails' of a Film. + */ + +#include +#include +#include "lib/film.h" +#include "lib/format.h" +#include "lib/util.h" +#include "lib/thumbs_job.h" +#include "lib/job_manager.h" +#include "lib/film_state.h" +#include "lib/options.h" +#include "film_viewer.h" + +using namespace std; +using namespace boost; + +FilmViewer::FilmViewer (Film* f) + : _film (f) + , _update_button ("Update") +{ + _scroller.add (_image); + + Gtk::HBox* controls = manage (new Gtk::HBox); + controls->set_spacing (6); + controls->pack_start (_update_button, false, false); + controls->pack_start (_position_slider); + + _vbox.pack_start (_scroller, true, true); + _vbox.pack_start (*controls, false, false); + _vbox.set_border_width (12); + + _update_button.signal_clicked().connect (sigc::mem_fun (*this, &FilmViewer::update_thumbs)); + + _position_slider.set_digits (0); + _position_slider.signal_format_value().connect (sigc::mem_fun (*this, &FilmViewer::format_position_slider_value)); + _position_slider.signal_value_changed().connect (sigc::mem_fun (*this, &FilmViewer::position_slider_changed)); + + _scroller.signal_size_allocate().connect (sigc::mem_fun (*this, &FilmViewer::scroller_size_allocate)); + + set_film (_film); +} + +void +FilmViewer::load_thumbnail (int n) +{ + if (_film == 0 || _film->num_thumbs() <= n) { + return; + } + + int const left = _film->left_crop (); + int const right = _film->right_crop (); + int const top = _film->top_crop (); + int const bottom = _film->bottom_crop (); + + _pixbuf = Gdk::Pixbuf::create_from_file (_film->thumb_file (n)); + + int const cw = _film->size().width - left - right; + int const ch = _film->size().height - top - bottom; + _cropped_pixbuf = Gdk::Pixbuf::create_subpixbuf (_pixbuf, left, top, cw, ch); + update_scaled_pixbuf (); + _image.set (_scaled_pixbuf); +} + +void +FilmViewer::reload_current_thumbnail () +{ + load_thumbnail (_position_slider.get_value ()); +} + +void +FilmViewer::position_slider_changed () +{ + reload_current_thumbnail (); +} + +string +FilmViewer::format_position_slider_value (double v) const +{ + stringstream s; + + if (_film && int (v) < _film->num_thumbs ()) { + int const f = _film->thumb_frame (int (v)); + s << f << " " << seconds_to_hms (f / _film->frames_per_second ()); + } else { + s << "-"; + } + + return s.str (); +} + +void +FilmViewer::film_changed (Film::Property p) +{ + if (p == Film::LEFT_CROP || p == Film::RIGHT_CROP || p == Film::TOP_CROP || p == Film::BOTTOM_CROP) { + reload_current_thumbnail (); + } else if (p == Film::THUMBS) { + if (_film && _film->num_thumbs() > 1) { + _position_slider.set_range (0, _film->num_thumbs () - 1); + } else { + _image.clear (); + _position_slider.set_range (0, 1); + } + + _position_slider.set_value (0); + reload_current_thumbnail (); + } else if (p == Film::FORMAT) { + reload_current_thumbnail (); + } else if (p == Film::CONTENT) { + setup_visibility (); + update_thumbs (); + } +} + +void +FilmViewer::set_film (Film* f) +{ + _film = f; + + _update_button.set_sensitive (_film != 0); + + if (!_film) { + _image.clear (); + return; + } + + _film->Changed.connect (sigc::mem_fun (*this, &FilmViewer::film_changed)); + + film_changed (Film::THUMBS); +} + +pair +FilmViewer::scaled_pixbuf_size () const +{ + if (_film == 0) { + return make_pair (0, 0); + } + + int const cw = _film->size().width - _film->left_crop() - _film->right_crop(); + int const ch = _film->size().height - _film->top_crop() - _film->bottom_crop(); + + float ratio = 1; + if (_film->format()) { + ratio = _film->format()->ratio_as_float() * ch / cw; + } + + Gtk::Allocation const a = _scroller.get_allocation (); + float const zoom = min (float (a.get_width()) / (cw * ratio), float (a.get_height()) / cw); + return make_pair (cw * zoom * ratio, ch * zoom); +} + +void +FilmViewer::update_scaled_pixbuf () +{ + pair const s = scaled_pixbuf_size (); + + if (s.first > 0 && s.second > 0 && _cropped_pixbuf) { + _scaled_pixbuf = _cropped_pixbuf->scale_simple (s.first, s.second, Gdk::INTERP_HYPER); + _image.set (_scaled_pixbuf); + } +} + +void +FilmViewer::update_thumbs () +{ + if (!_film) { + return; + } + + _film->update_thumbs_pre_gui (); + + shared_ptr s = _film->state_copy (); + shared_ptr o (new Options (s->dir ("thumbs"), ".tiff", "")); + o->out_size = _film->size (); + o->apply_crop = false; + o->decode_audio = false; + o->decode_video_frequency = 128; + + shared_ptr j (new ThumbsJob (s, o, _film->log ())); + j->Finished.connect (sigc::mem_fun (_film, &Film::update_thumbs_post_gui)); + JobManager::instance()->add (j); +} + +void +FilmViewer::scroller_size_allocate (Gtk::Allocation a) +{ + if (a.get_width() != _last_scroller_allocation.get_width() || a.get_height() != _last_scroller_allocation.get_height()) { + update_scaled_pixbuf (); + } + + _last_scroller_allocation = a; +} + +void +FilmViewer::setup_visibility () +{ + if (!_film) { + return; + } + + ContentType const c = _film->content_type (); + _update_button.property_visible() = (c == VIDEO); + _position_slider.property_visible() = (c == VIDEO); +} diff --git a/src/gtk/film_viewer.h b/src/gtk/film_viewer.h new file mode 100644 index 000000000..e01d6c096 --- /dev/null +++ b/src/gtk/film_viewer.h @@ -0,0 +1,63 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_viewer.h + * @brief A GTK widget to view `thumbnails' of a Film. + */ + +#include +#include "lib/film.h" + +/** @class FilmViewer + * @brief A GTK widget to view `thumbnails' of a Film. + */ +class FilmViewer +{ +public: + FilmViewer (Film *); + + Gtk::Widget& widget () { + return _vbox; + } + + void set_film (Film *); + void setup_visibility (); + +private: + void position_slider_changed (); + void update_thumbs (); + std::string format_position_slider_value (double) const; + void load_thumbnail (int); + void film_changed (Film::Property); + void reload_current_thumbnail (); + void update_scaled_pixbuf (); + std::pair scaled_pixbuf_size () const; + void scroller_size_allocate (Gtk::Allocation); + + Film* _film; + Gtk::VBox _vbox; + Gtk::ScrolledWindow _scroller; + Gtk::Image _image; + Glib::RefPtr _pixbuf; + Glib::RefPtr _cropped_pixbuf; + Glib::RefPtr _scaled_pixbuf; + Gtk::HScale _position_slider; + Gtk::Button _update_button; + Gtk::Allocation _last_scroller_allocation; +}; diff --git a/src/gtk/filter_dialog.cc b/src/gtk/filter_dialog.cc new file mode 100644 index 000000000..e52efb68b --- /dev/null +++ b/src/gtk/filter_dialog.cc @@ -0,0 +1,47 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter_dialog.cc + * @brief A dialog to select FFmpeg filters. + */ + +#include "lib/film.h" +#include "filter_dialog.h" + +using namespace std; + +FilterDialog::FilterDialog (vector const & f) + : Gtk::Dialog ("Filters") + , _filters (f) +{ + get_vbox()->pack_start (_filters.widget ()); + + _filters.ActiveChanged.connect (sigc::mem_fun (*this, &FilterDialog::active_changed)); + + add_button ("Close", Gtk::RESPONSE_CLOSE); + + show_all (); +} + + +void +FilterDialog::active_changed () +{ + ActiveChanged (_filters.active ()); +} diff --git a/src/gtk/filter_dialog.h b/src/gtk/filter_dialog.h new file mode 100644 index 000000000..84c6e2966 --- /dev/null +++ b/src/gtk/filter_dialog.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter_dialog.h + * @brief A dialog to select FFmpeg filters. + */ + +#include +#include "filter_view.h" + +class Film; + +/** @class FilterDialog + * @brief A dialog to select FFmpeg filters. + */ +class FilterDialog : public Gtk::Dialog +{ +public: + FilterDialog (std::vector const &); + + sigc::signal1 > ActiveChanged; + +private: + void active_changed (); + + FilterView _filters; +}; diff --git a/src/gtk/filter_view.cc b/src/gtk/filter_view.cc new file mode 100644 index 000000000..f686c204d --- /dev/null +++ b/src/gtk/filter_view.cc @@ -0,0 +1,72 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter_view.cc + * @brief A widget to select FFmpeg filters. + */ + +#include +#include "lib/filter.h" +#include "filter_view.h" + +using namespace std; + +FilterView::FilterView (vector const & active) +{ + _box.set_spacing (4); + + vector filters = Filter::all (); + + for (vector::iterator i = filters.begin(); i != filters.end(); ++i) { + Gtk::CheckButton* b = Gtk::manage (new Gtk::CheckButton ((*i)->name())); + bool const a = find (active.begin(), active.end(), *i) != active.end (); + b->set_active (a); + _filters[*i] = a; + b->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &FilterView::filter_toggled), *i)); + _box.pack_start (*b, false, false); + } + + _box.show_all (); +} + +Gtk::Widget & +FilterView::widget () +{ + return _box; +} + +void +FilterView::filter_toggled (Filter const * f) +{ + _filters[f] = !_filters[f]; + ActiveChanged (); +} + +vector +FilterView::active () const +{ + vector active; + for (map::const_iterator i = _filters.begin(); i != _filters.end(); ++i) { + if (i->second) { + active.push_back (i->first); + } + } + + return active; +} diff --git a/src/gtk/filter_view.h b/src/gtk/filter_view.h new file mode 100644 index 000000000..0c96b0e14 --- /dev/null +++ b/src/gtk/filter_view.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter_view.h + * @brief A widget to select FFmpeg filters. + */ + +#include +#include + +class Filter; + +/** @class FilterView + * @brief A widget to select FFmpeg filters. + */ +class FilterView +{ +public: + FilterView (std::vector const &); + + Gtk::Widget & widget (); + std::vector active () const; + + sigc::signal0 ActiveChanged; + +private: + void filter_toggled (Filter const *); + + Gtk::VBox _box; + std::map _filters; +}; diff --git a/src/gtk/gpl.cc b/src/gtk/gpl.cc new file mode 100644 index 000000000..b7bcae9e0 --- /dev/null +++ b/src/gtk/gpl.cc @@ -0,0 +1,370 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/gpl.cc + * @brief The GPL. + */ + +const char* gpl = "\n\ +DVD-o-matic comes with NO WARRANTY. It is free software, and you are \n\ +welcome to redistribute it under the terms of the GNU Public License,\n\ +shown below.\n \ +\n\ + GNU GENERAL PUBLIC LICENSE\n\ + Version 2, June 1991\n\ +\n\ + Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n\ + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ + Everyone is permitted to copy and distribute verbatim copies\n\ + of this license document, but changing it is not allowed.\n\ +\n\ + Preamble\n\ +\n\ + The licenses for most software are designed to take away your\n\ +freedom to share and change it. By contrast, the GNU General Public\n\ +License is intended to guarantee your freedom to share and change free\n\ +software--to make sure the software is free for all its users. This\n\ +General Public License applies to most of the Free Software\n\ +Foundation's software and to any other program whose authors commit to\n\ +using it. (Some other Free Software Foundation software is covered by\n\ +the GNU Library General Public License instead.) You can apply it to\n\ +your programs, too.\n\ +\n\ + When we speak of free software, we are referring to freedom, not\n\ +price. Our General Public Licenses are designed to make sure that you\n\ +have the freedom to distribute copies of free software (and charge for\n\ +this service if you wish), that you receive source code or can get it\n\ +if you want it, that you can change the software or use pieces of it\n\ +in new free programs; and that you know you can do these things.\n\ +\n\ + To protect your rights, we need to make restrictions that forbid\n\ +anyone to deny you these rights or to ask you to surrender the rights.\n\ +These restrictions translate to certain responsibilities for you if you\n\ +distribute copies of the software, or if you modify it.\n\ +\n\ + For example, if you distribute copies of such a program, whether\n\ +gratis or for a fee, you must give the recipients all the rights that\n\ +you have. You must make sure that they, too, receive or can get the\n\ +source code. And you must show them these terms so they know their\n\ +rights.\n\ +\n\ + We protect your rights with two steps: (1) copyright the software, and\n\ +(2) offer you this license which gives you legal permission to copy,\n\ +distribute and/or modify the software.\n\ +\n\ + Also, for each author's protection and ours, we want to make certain\n\ +that everyone understands that there is no warranty for this free\n\ +software. If the software is modified by someone else and passed on, we\n\ +want its recipients to know that what they have is not the original, so\n\ +that any problems introduced by others will not reflect on the original\n\ +authors' reputations.\n\ +\n\ + Finally, any free program is threatened constantly by software\n\ +patents. We wish to avoid the danger that redistributors of a free\n\ +program will individually obtain patent licenses, in effect making the\n\ +program proprietary. To prevent this, we have made it clear that any\n\ +patent must be licensed for everyone's free use or not licensed at all.\n\ +\n\ + The precise terms and conditions for copying, distribution and\n\ +modification follow.\n\ +\n\ + GNU GENERAL PUBLIC LICENSE\n\ + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\ +\n\ + 0. This License applies to any program or other work which contains\n\ +a notice placed by the copyright holder saying it may be distributed\n\ +under the terms of this General Public License. The \"Program\", below,\n\ +refers to any such program or work, and a \"work based on the Program\"\n\ +means either the Program or any derivative work under copyright law:\n\ +that is to say, a work containing the Program or a portion of it,\n\ +either verbatim or with modifications and/or translated into another\n\ +language. (Hereinafter, translation is included without limitation in\n\ +the term \"modification\".) Each licensee is addressed as \"you\".\n\ +\n\ +Activities other than copying, distribution and modification are not\n\ +covered by this License; they are outside its scope. The act of\n\ +running the Program is not restricted, and the output from the Program\n\ +is covered only if its contents constitute a work based on the\n\ +Program (independent of having been made by running the Program).\n\ +Whether that is true depends on what the Program does.\n\ +\n\ + 1. You may copy and distribute verbatim copies of the Program's\n\ +source code as you receive it, in any medium, provided that you\n\ +conspicuously and appropriately publish on each copy an appropriate\n\ +copyright notice and disclaimer of warranty; keep intact all the\n\ +notices that refer to this License and to the absence of any warranty;\n\ +and give any other recipients of the Program a copy of this License\n\ +along with the Program.\n\ +\n\ +You may charge a fee for the physical act of transferring a copy, and\n\ +you may at your option offer warranty protection in exchange for a fee.\n\ +\n\ + 2. You may modify your copy or copies of the Program or any portion\n\ +of it, thus forming a work based on the Program, and copy and\n\ +distribute such modifications or work under the terms of Section 1\n\ +above, provided that you also meet all of these conditions:\n\ +\n\ + a) You must cause the modified files to carry prominent notices\n\ + stating that you changed the files and the date of any change.\n\ +\n\ + b) You must cause any work that you distribute or publish, that in\n\ + whole or in part contains or is derived from the Program or any\n\ + part thereof, to be licensed as a whole at no charge to all third\n\ + parties under the terms of this License.\n\ +\n\ + c) If the modified program normally reads commands interactively\n\ + when run, you must cause it, when started running for such\n\ + interactive use in the most ordinary way, to print or display an\n\ + announcement including an appropriate copyright notice and a\n\ + notice that there is no warranty (or else, saying that you provide\n\ + a warranty) and that users may redistribute the program under\n\ + these conditions, and telling the user how to view a copy of this\n\ + License. (Exception: if the Program itself is interactive but\n\ + does not normally print such an announcement, your work based on\n\ + the Program is not required to print an announcement.)\n\ +\n\ +These requirements apply to the modified work as a whole. If\n\ +identifiable sections of that work are not derived from the Program,\n\ +and can be reasonably considered independent and separate works in\n\ +themselves, then this License, and its terms, do not apply to those\n\ +sections when you distribute them as separate works. But when you\n\ +distribute the same sections as part of a whole which is a work based\n\ +on the Program, the distribution of the whole must be on the terms of\n\ +this License, whose permissions for other licensees extend to the\n\ +entire whole, and thus to each and every part regardless of who wrote it.\n\ +\n\ +Thus, it is not the intent of this section to claim rights or contest\n\ +your rights to work written entirely by you; rather, the intent is to\n\ +exercise the right to control the distribution of derivative or\n\ +collective works based on the Program.\n\ +\n\ +In addition, mere aggregation of another work not based on the Program\n\ +with the Program (or with a work based on the Program) on a volume of\n\ +a storage or distribution medium does not bring the other work under\n\ +the scope of this License.\n\ +\n\ + 3. You may copy and distribute the Program (or a work based on it,\n\ +under Section 2) in object code or executable form under the terms of\n\ +Sections 1 and 2 above provided that you also do one of the following:\n\ +\n\ + a) Accompany it with the complete corresponding machine-readable\n\ + source code, which must be distributed under the terms of Sections\n\ + 1 and 2 above on a medium customarily used for software interchange; or,\n\ +\n\ + b) Accompany it with a written offer, valid for at least three\n\ + years, to give any third party, for a charge no more than your\n\ + cost of physically performing source distribution, a complete\n\ + machine-readable copy of the corresponding source code, to be\n\ + distributed under the terms of Sections 1 and 2 above on a medium\n\ + customarily used for software interchange; or,\n\ +\n\ + c) Accompany it with the information you received as to the offer\n\ + to distribute corresponding source code. (This alternative is\n\ + allowed only for noncommercial distribution and only if you\n\ + received the program in object code or executable form with such\n\ + an offer, in accord with Subsection b above.)\n\ +\n\ +The source code for a work means the preferred form of the work for\n\ +making modifications to it. For an executable work, complete source\n\ +code means all the source code for all modules it contains, plus any\n\ +associated interface definition files, plus the scripts used to\n\ +control compilation and installation of the executable. However, as a\n\ +special exception, the source code distributed need not include\n\ +anything that is normally distributed (in either source or binary\n\ +form) with the major components (compiler, kernel, and so on) of the\n\ +operating system on which the executable runs, unless that component\n\ +itself accompanies the executable.\n\ +\n\ +If distribution of executable or object code is made by offering\n\ +access to copy from a designated place, then offering equivalent\n\ +access to copy the source code from the same place counts as\n\ +distribution of the source code, even though third parties are not\n\ +compelled to copy the source along with the object code.\n\ + \n\ + 4. You may not copy, modify, sublicense, or distribute the Program\n\ +except as expressly provided under this License. Any attempt\n\ +otherwise to copy, modify, sublicense or distribute the Program is\n\ +void, and will automatically terminate your rights under this License.\n\ +However, parties who have received copies, or rights, from you under\n\ +this License will not have their licenses terminated so long as such\n\ +parties remain in full compliance.\n\ +\n\ + 5. You are not required to accept this License, since you have not\n\ +signed it. However, nothing else grants you permission to modify or\n\ +distribute the Program or its derivative works. These actions are\n\ +prohibited by law if you do not accept this License. Therefore, by\n\ +modifying or distributing the Program (or any work based on the\n\ +Program), you indicate your acceptance of this License to do so, and\n\ +all its terms and conditions for copying, distributing or modifying\n\ +the Program or works based on it.\n\ +\n\ + 6. Each time you redistribute the Program (or any work based on the\n\ +Program), the recipient automatically receives a license from the\n\ +original licensor to copy, distribute or modify the Program subject to\n\ +these terms and conditions. You may not impose any further\n\ +restrictions on the recipients' exercise of the rights granted herein.\n\ +You are not responsible for enforcing compliance by third parties to\n\ +this License.\n\ +\n\ + 7. If, as a consequence of a court judgment or allegation of patent\n\ +infringement or for any other reason (not limited to patent issues),\n\ +conditions are imposed on you (whether by court order, agreement or\n\ +otherwise) that contradict the conditions of this License, they do not\n\ +excuse you from the conditions of this License. If you cannot\n\ +distribute so as to satisfy simultaneously your obligations under this\n\ +License and any other pertinent obligations, then as a consequence you\n\ +may not distribute the Program at all. For example, if a patent\n\ +license would not permit royalty-free redistribution of the Program by\n\ +all those who receive copies directly or indirectly through you, then\n\ +the only way you could satisfy both it and this License would be to\n\ +refrain entirely from distribution of the Program.\n\ +\n\ +If any portion of this section is held invalid or unenforceable under\n\ +any particular circumstance, the balance of the section is intended to\n\ +apply and the section as a whole is intended to apply in other\n\ +circumstances.\n\ +\n\ +It is not the purpose of this section to induce you to infringe any\n\ +patents or other property right claims or to contest validity of any\n\ +such claims; this section has the sole purpose of protecting the\n\ +integrity of the free software distribution system, which is\n\ +implemented by public license practices. Many people have made\n\ +generous contributions to the wide range of software distributed\n\ +through that system in reliance on consistent application of that\n\ +system; it is up to the author/donor to decide if he or she is willing\n\ +to distribute software through any other system and a licensee cannot\n\ +impose that choice.\n\ +\n\ +This section is intended to make thoroughly clear what is believed to\n\ +be a consequence of the rest of this License.\n\ +\n\ + 8. If the distribution and/or use of the Program is restricted in\n\ +certain countries either by patents or by copyrighted interfaces, the\n\ +original copyright holder who places the Program under this License\n\ +may add an explicit geographical distribution limitation excluding\n\ +those countries, so that distribution is permitted only in or among\n\ +countries not thus excluded. In such case, this License incorporates\n\ +the limitation as if written in the body of this License.\n\ +\n\ + 9. The Free Software Foundation may publish revised and/or new versions\n\ +of the General Public License from time to time. Such new versions will\n\ +be similar in spirit to the present version, but may differ in detail to\n\ +address new problems or concerns.\n\ +\n\ +Each version is given a distinguishing version number. If the Program\n\ +specifies a version number of this License which applies to it and \"any\n\ +later version\", you have the option of following the terms and conditions\n\ +either of that version or of any later version published by the Free\n\ +Software Foundation. If the Program does not specify a version number of\n\ +this License, you may choose any version ever published by the Free Software\n\ +Foundation.\n\ +\n\ + 10. If you wish to incorporate parts of the Program into other free\n\ +programs whose distribution conditions are different, write to the author\n\ +to ask for permission. For software which is copyrighted by the Free\n\ +Software Foundation, write to the Free Software Foundation; we sometimes\n\ +make exceptions for this. Our decision will be guided by the two goals\n\ +of preserving the free status of all derivatives of our free software and\n\ +of promoting the sharing and reuse of software generally.\n\ +\n\ + NO WARRANTY\n\ +\n\ + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n\ +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n\ +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n\ +PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n\ +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n\ +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n\ +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n\ +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n\ +REPAIR OR CORRECTION.\n\ +\n\ + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n\ +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n\ +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n\ +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n\ +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n\ +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n\ +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n\ +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n\ +POSSIBILITY OF SUCH DAMAGES.\n\ +\n\ + END OF TERMS AND CONDITIONS\n\ +\n\ + How to Apply These Terms to Your New Programs\n\ +\n\ + If you develop a new program, and you want it to be of the greatest\n\ +possible use to the public, the best way to achieve this is to make it\n\ +free software which everyone can redistribute and change under these terms.\n\ +\n\ + To do so, attach the following notices to the program. It is safest\n\ +to attach them to the start of each source file to most effectively\n\ +convey the exclusion of warranty; and each file should have at least\n\ +the \"copyright\" line and a pointer to where the full notice is found.\n\ +\n\ + \n\ + Copyright (C) \n\ +\n\ + This program is free software; you can redistribute it and/or modify\n\ + it under the terms of the GNU General Public License as published by\n\ + the Free Software Foundation; either version 2 of the License, or\n\ + (at your option) any later version.\n\ +\n\ + This program is distributed in the hope that it will be useful,\n\ + but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ + GNU General Public License for more details.\n\ +\n\ + You should have received a copy of the GNU General Public License\n\ + along with this program; if not, write to the Free Software\n\ + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ +\n\ +\n\ +Also add information on how to contact you by electronic and paper mail.\n\ +\n\ +If the program is interactive, make it output a short notice like this\n\ +when it starts in an interactive mode:\n\ +\n\ + Gnomovision version 69, Copyright (C) year name of author\n\ + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n\ + This is free software, and you are welcome to redistribute it\n\ + under certain conditions; type `show c' for details.\n\ +\n\ +The hypothetical commands `show w' and `show c' should show the appropriate\n\ +parts of the General Public License. Of course, the commands you use may\n\ +be called something other than `show w' and `show c'; they could even be\n\ +mouse-clicks or menu items--whatever suits your program.\n\ +\n\ +You should also get your employer (if you work as a programmer) or your\n\ +school, if any, to sign a \"copyright disclaimer\" for the program, if\n\ +necessary. Here is a sample; alter the names:\n\ +\n\ + Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n\ + `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\ +\n\ + , 1 April 1989\n\ + Ty Coon, President of Vice\n\ +\n\ +This General Public License does not permit incorporating your program into\n\ +proprietary programs. If your program is a subroutine library, you may\n\ +consider it more useful to permit linking proprietary applications with the\n\ +library. If this is what you want to do, use the GNU Library General\n\ +Public License instead of this License.\n\ +"; + diff --git a/src/gtk/gpl.h b/src/gtk/gpl.h new file mode 100644 index 000000000..c9c4ffe46 --- /dev/null +++ b/src/gtk/gpl.h @@ -0,0 +1,24 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/gpl.h + * @brief The GPL. + */ + +extern const char * gpl; diff --git a/src/gtk/gtk_util.cc b/src/gtk/gtk_util.cc new file mode 100644 index 000000000..41f8cb5b5 --- /dev/null +++ b/src/gtk/gtk_util.cc @@ -0,0 +1,45 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/gtk/util.cc + * @brief Some utility functions. + */ + +#include + +using namespace std; + +/** @param t Label text. + * @return GTK label containing t, left-aligned (passed through Gtk::manage) + */ +Gtk::Label & +left_aligned_label (string t) +{ + Gtk::Label* l = Gtk::manage (new Gtk::Label (t)); + l->set_alignment (0, 0.5); + return *l; +} + +void +error_dialog (string m) +{ + Gtk::MessageDialog d (m, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + d.set_title ("DVD-o-matic"); + d.run (); +} diff --git a/src/gtk/gtk_util.h b/src/gtk/gtk_util.h new file mode 100644 index 000000000..518842872 --- /dev/null +++ b/src/gtk/gtk_util.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include + +/** @file src/gtk/util.h + * @brief Some utility functions. + */ + +extern void error_dialog (std::string); +extern Gtk::Label & left_aligned_label (std::string); diff --git a/src/gtk/job_manager_view.cc b/src/gtk/job_manager_view.cc new file mode 100644 index 000000000..60c13990d --- /dev/null +++ b/src/gtk/job_manager_view.cc @@ -0,0 +1,134 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job_manager_view.cc + * @brief Class generating a GTK widget to show the progress of jobs. + */ + +#include "lib/job_manager.h" +#include "lib/job.h" +#include "lib/util.h" +#include "lib/exceptions.h" +#include "job_manager_view.h" +#include "gtk_util.h" + +using namespace std; +using namespace boost; + +/** Must be called in the GUI thread */ +JobManagerView::JobManagerView () +{ + _scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_ALWAYS); + + _store = Gtk::TreeStore::create (_columns); + _view.set_model (_store); + _view.append_column ("Name", _columns.name); + + Gtk::CellRendererProgress* r = Gtk::manage (new Gtk::CellRendererProgress ()); + int const n = _view.append_column ("Progress", *r); + Gtk::TreeViewColumn* c = _view.get_column (n - 1); + c->add_attribute (r->property_value(), _columns.progress); + c->add_attribute (r->property_pulse(), _columns.progress_unknown); + c->add_attribute (r->property_text(), _columns.text); + + _scroller.add (_view); + _scroller.set_size_request (-1, 150); + + update (); +} + +/** Update the view by examining the state of each jobs. + * Must be called in the GUI thread. + */ +void +JobManagerView::update () +{ + list > jobs = JobManager::instance()->get (); + + for (list >::iterator i = jobs.begin(); i != jobs.end(); ++i) { + Gtk::ListStore::iterator j = _store->children().begin(); + while (j != _store->children().end()) { + Gtk::TreeRow r = *j; + shared_ptr job = r[_columns.job]; + if (job == *i) { + break; + } + ++j; + } + + Gtk::TreeRow r; + if (j == _store->children().end ()) { + j = _store->append (); + r = *j; + r[_columns.name] = (*i)->name (); + r[_columns.job] = *i; + r[_columns.progress_unknown] = -1; + r[_columns.informed_of_finish] = false; + } else { + r = *j; + } + + bool inform_of_finish = false; + string const st = (*i)->status (); + + if (!(*i)->finished ()) { + float const p = (*i)->overall_progress (); + if (p >= 0) { + r[_columns.text] = st; + r[_columns.progress] = p * 100; + } else { + r[_columns.progress_unknown] = r[_columns.progress_unknown] + 1; + } + } + + /* Hack to work around our lack of cross-thread + signalling; we tell the job to emit_finished() + from here (the GUI thread). + */ + + if ((*i)->finished_ok ()) { + bool i = r[_columns.informed_of_finish]; + if (!i) { + r[_columns.progress_unknown] = -1; + r[_columns.progress] = 100; + r[_columns.text] = st; + inform_of_finish = true; + } + } else if ((*i)->finished_in_error ()) { + bool i = r[_columns.informed_of_finish]; + if (!i) { + r[_columns.progress_unknown] = -1; + r[_columns.progress] = 100; + r[_columns.text] = st; + inform_of_finish = true; + } + } + + if (inform_of_finish) { + try { + (*i)->emit_finished (); + } catch (OpenFileError& e) { + stringstream s; + s << "Error: " << e.what(); + error_dialog (s.str ()); + } + r[_columns.informed_of_finish] = true; + } + } +} diff --git a/src/gtk/job_manager_view.h b/src/gtk/job_manager_view.h new file mode 100644 index 000000000..c88a1ce9a --- /dev/null +++ b/src/gtk/job_manager_view.h @@ -0,0 +1,83 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job_manager_view.h + * @brief Class generating a GTK widget to show the progress of jobs. + */ + +#include +#include +#include + +class Job; + +/** @class JobManagerView + * @brief Class generating a GTK widget to show the progress of jobs. + */ +class JobManagerView +{ +public: + JobManagerView (); + + /** @return Our main widget, which contains everything else */ + Gtk::Widget& widget () { + return _scroller; + } + + void update (); + +private: + /** Scroller for all our contents */ + Gtk::ScrolledWindow _scroller; + /** View for the jobs */ + Gtk::TreeView _view; + /** Store for the jobs */ + Glib::RefPtr _store; + + /** The TreeModelColumnRecord for the store */ + class StoreColumns : public Gtk::TreeModelColumnRecord + { + public: + StoreColumns () + { + add (name); + add (job); + add (progress); + add (progress_unknown); + add (text); + add (informed_of_finish); + } + + /** Job name */ + Gtk::TreeModelColumn name; + /** Job */ + Gtk::TreeModelColumn > job; + /** Progress */ + Gtk::TreeModelColumn progress; + /** An increasing integer number if the progress is unknown */ + Gtk::TreeModelColumn progress_unknown; + /** Text to write into the progress bar */ + Gtk::TreeModelColumn text; + /** true if the job has been informed of its finish */ + Gtk::TreeModelColumn informed_of_finish; + }; + + /** The columns for the store */ + StoreColumns _columns; +}; diff --git a/src/gtk/job_wrapper.cc b/src/gtk/job_wrapper.cc new file mode 100644 index 000000000..be214b0ac --- /dev/null +++ b/src/gtk/job_wrapper.cc @@ -0,0 +1,50 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/film.h" +#include "lib/exceptions.h" +#include "job_wrapper.h" +#include "gtk_util.h" + +using namespace std; + +void +JobWrapper::make_dcp (Film* film, bool transcode) +{ + if (!film) { + return; + } + + try { + film->make_dcp (transcode); + } catch (BadSettingError& e) { + stringstream s; + if (e.setting() == "dcp_long_name") { + s << "Could not make DCP: long name is invalid (" << e.what() << ")"; + } else { + s << "Bad setting for " << e.setting() << "(" << e.what() << ")"; + } + error_dialog (s.str ()); + } catch (std::exception& e) { + stringstream s; + s << "Could not make DCP: " << e.what () << "."; + error_dialog (s.str ()); + } +} diff --git a/src/gtk/job_wrapper.h b/src/gtk/job_wrapper.h new file mode 100644 index 000000000..b8760f6e5 --- /dev/null +++ b/src/gtk/job_wrapper.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +class Film; + +namespace JobWrapper +{ + +void make_dcp (Film *, bool); + +} diff --git a/src/gtk/wscript b/src/gtk/wscript new file mode 100644 index 000000000..c68efea90 --- /dev/null +++ b/src/gtk/wscript @@ -0,0 +1,22 @@ +def build(bld): + obj = bld(features = 'cxx cxxshlib') + obj.name = 'libdvdomatic-gtk' + obj.includes = [ '..' ] + obj.export_includes = ['.'] + obj.uselib = 'GLIB GTKMM CAIROMM' + obj.source = """ + alignment.cc + config_dialog.cc + dcp_range_dialog.cc + film_editor.cc + film_list.cc + film_player.cc + film_viewer.cc + filter_dialog.cc + filter_view.cc + gpl.cc + job_manager_view.cc + gtk_util.cc + job_wrapper.cc + """ + obj.target = 'dvdomatic-gtk' diff --git a/src/lib/ab_transcode_job.cc b/src/lib/ab_transcode_job.cc new file mode 100644 index 000000000..1a6104251 --- /dev/null +++ b/src/lib/ab_transcode_job.cc @@ -0,0 +1,69 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "ab_transcode_job.h" +#include "j2k_wav_encoder.h" +#include "film.h" +#include "format.h" +#include "filter.h" +#include "ab_transcoder.h" +#include "film_state.h" +#include "encoder_factory.h" +#include "config.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState to compare (with filters and/or a non-bicubic scaler). + * @param o Options. + * @Param l A log that we can write to. + */ +ABTranscodeJob::ABTranscodeJob (shared_ptr s, shared_ptr o, Log* l) + : Job (s, o, l) +{ + _fs_b.reset (new FilmState (*_fs)); + _fs_b->scaler = Config::instance()->reference_scaler (); + _fs_b->filters = Config::instance()->reference_filters (); +} + +string +ABTranscodeJob::name () const +{ + stringstream s; + s << "A/B transcode " << _fs->name; + return s.str (); +} + +void +ABTranscodeJob::run () +{ + try { + /* _fs_b is the one with no filters */ + ABTranscoder w (_fs_b, _fs, _opt, this, _log, encoder_factory (_fs, _opt, _log)); + w.go (); + set_progress (1); + set_state (FINISHED_OK); + + } catch (std::exception& e) { + + set_state (FINISHED_ERROR); + + } +} diff --git a/src/lib/ab_transcode_job.h b/src/lib/ab_transcode_job.h new file mode 100644 index 000000000..478049068 --- /dev/null +++ b/src/lib/ab_transcode_job.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/ab_transcode_job.h + * @brief Job to run a transcoder which produces output for A/B comparison of various settings. + */ + +#include +#include "job.h" + +/** @class ABTranscodeJob + * @brief Job to run a transcoder which produces output for A/B comparison of various settings. + * + * The right half of the frame will be processed using the FilmState supplied; + * the left half will be processed using the same state but *without* filters + * and with the scaler set to SWS_BICUBIC. + */ +class ABTranscodeJob : public Job +{ +public: + ABTranscodeJob (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + std::string name () const; + void run (); + +private: + /** Copy of our FilmState with filters removed and scaler set back to bicubic; + * this is the `reference' (left-half-frame) state. + */ + boost::shared_ptr _fs_b; +}; diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc new file mode 100644 index 000000000..aabaf2d03 --- /dev/null +++ b/src/lib/ab_transcoder.cc @@ -0,0 +1,127 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "ab_transcoder.h" +#include "film.h" +#include "decoder.h" +#include "encoder.h" +#include "job.h" +#include "film_state.h" +#include "options.h" +#include "image.h" +#include "decoder_factory.h" + +/** @file src/ab_transcoder.cc + * @brief A transcoder which uses one FilmState for the left half of the screen, and a different one + * for the right half (to facilitate A/B comparisons of settings) + */ + +using namespace std; +using namespace boost; + +/** @param a FilmState to use for the left half of the screen. + * @param b FilmState to use for the right half of the screen. + * @param o Options. + * @param j Job that we are associated with. + * @param l Log. + * @param e Encoder to use. + */ + +ABTranscoder::ABTranscoder ( + shared_ptr a, shared_ptr b, shared_ptr o, Job* j, Log* l, shared_ptr e) + : _fs_a (a) + , _fs_b (b) + , _opt (o) + , _job (j) + , _log (l) + , _encoder (e) + , _last_frame (0) +{ + _da = decoder_factory (_fs_a, o, j, _log); + _db = decoder_factory (_fs_b, o, j, _log); + + _da->Video.connect (sigc::bind (sigc::mem_fun (*this, &ABTranscoder::process_video), 0)); + _db->Video.connect (sigc::bind (sigc::mem_fun (*this, &ABTranscoder::process_video), 1)); + _da->Audio.connect (sigc::mem_fun (*e, &Encoder::process_audio)); +} + +ABTranscoder::~ABTranscoder () +{ + +} + +void +ABTranscoder::process_video (shared_ptr yuv, int frame, int index) +{ + if (index == 0) { + /* Keep this image around until we get the other half */ + _image = yuv; + } else { + /* Copy the right half of yuv into _image */ + for (int i = 0; i < yuv->components(); ++i) { + int const line_size = yuv->line_size()[i]; + int const half_line_size = line_size / 2; + + uint8_t* p = _image->data()[i]; + uint8_t* q = yuv->data()[i]; + + for (int j = 0; j < yuv->lines (i); ++j) { + memcpy (p + half_line_size, q + half_line_size, half_line_size); + p += line_size; + q += line_size; + } + } + + /* And pass it to the encoder */ + _encoder->process_video (_image, frame); + _image.reset (); + } + + _last_frame = frame; +} + + +void +ABTranscoder::go () +{ + _encoder->process_begin (); + _da->process_begin (); + _db->process_begin (); + + while (1) { + bool const a = _da->pass (); + bool const b = _db->pass (); + + if (_job) { + _job->set_progress (float (_last_frame) / _da->decoding_frames ()); + } + + if (a && b) { + break; + } + } + + _encoder->process_end (); + _da->process_end (); + _db->process_end (); +} + diff --git a/src/lib/ab_transcoder.h b/src/lib/ab_transcoder.h new file mode 100644 index 000000000..0310bb923 --- /dev/null +++ b/src/lib/ab_transcoder.h @@ -0,0 +1,69 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/ab_transcoder.h + * @brief A transcoder which uses one FilmState for the left half of the screen, and a different one + * for the right half (to facilitate A/B comparisons of settings) + */ + +#include +#include + +class Job; +class Encoder; +class Decoder; +class FilmState; +class Options; +class Image; +class Log; + +/** @class ABTranscoder + * @brief A transcoder which uses one FilmState for the left half of the screen, and a different one + * for the right half (to facilitate A/B comparisons of settings) + */ +class ABTranscoder +{ +public: + ABTranscoder ( + boost::shared_ptr a, + boost::shared_ptr b, + boost::shared_ptr o, + Job* j, + Log* l, + boost::shared_ptr e + ); + + ~ABTranscoder (); + + void go (); + +private: + void process_video (boost::shared_ptr, int, int); + + boost::shared_ptr _fs_a; + boost::shared_ptr _fs_b; + boost::shared_ptr _opt; + Job* _job; + Log* _log; + boost::shared_ptr _encoder; + boost::shared_ptr _da; + boost::shared_ptr _db; + int _last_frame; + boost::shared_ptr _image; +}; diff --git a/src/lib/config.cc b/src/lib/config.cc new file mode 100644 index 000000000..6d31ccd9e --- /dev/null +++ b/src/lib/config.cc @@ -0,0 +1,139 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "config.h" +#include "server.h" +#include "scaler.h" +#include "screen.h" +#include "filter.h" + +using namespace std; +using namespace boost; + +Config* Config::_instance = 0; + +/** Construct default configuration */ +Config::Config () + : _num_local_encoding_threads (2) + , _server_port (6192) + , _colour_lut_index (0) + , _j2k_bandwidth (250000000) + , _reference_scaler (Scaler::from_id ("bicubic")) + , _tms_path (".") +{ + ifstream f (file().c_str ()); + string line; + while (getline (f, line)) { + if (line.empty ()) { + continue; + } + + if (line[0] == '#') { + continue; + } + + size_t const s = line.find (' '); + if (s == string::npos) { + continue; + } + + string const k = line.substr (0, s); + string const v = line.substr (s + 1); + + if (k == "num_local_encoding_threads") { + _num_local_encoding_threads = atoi (v.c_str ()); + } else if (k == "server_port") { + _server_port = atoi (v.c_str ()); + } else if (k == "colour_lut_index") { + _colour_lut_index = atoi (v.c_str ()); + } else if (k == "j2k_bandwidth") { + _j2k_bandwidth = atoi (v.c_str ()); + } else if (k == "reference_scaler") { + _reference_scaler = Scaler::from_id (v); + } else if (k == "reference_filter") { + _reference_filters.push_back (Filter::from_id (v)); + } else if (k == "server") { + _servers.push_back (Server::create_from_metadata (v)); + } else if (k == "screen") { + _screens.push_back (Screen::create_from_metadata (v)); + } else if (k == "tms_ip") { + _tms_ip = v; + } else if (k == "tms_path") { + _tms_path = v; + } else if (k == "tms_user") { + _tms_user = v; + } else if (k == "tms_password") { + _tms_password = v; + } + } + + Changed (); +} + +/** @return Filename to write configuration to */ +string +Config::file () const +{ + stringstream s; + s << getenv ("HOME") << "/.dvdomatic"; + return s.str (); +} + +/** @return Singleton instance */ +Config * +Config::instance () +{ + if (_instance == 0) { + _instance = new Config; + } + + return _instance; +} + +/** Write our configuration to disk */ +void +Config::write () const +{ + ofstream f (file().c_str ()); + f << "num_local_encoding_threads " << _num_local_encoding_threads << "\n" + << "server_port " << _server_port << "\n" + << "colour_lut_index " << _colour_lut_index << "\n" + << "j2k_bandwidth " << _j2k_bandwidth << "\n" + << "reference_scaler " << _reference_scaler->id () << "\n"; + + for (vector::const_iterator i = _reference_filters.begin(); i != _reference_filters.end(); ++i) { + f << "reference_filter " << (*i)->id () << "\n"; + } + + for (vector::const_iterator i = _servers.begin(); i != _servers.end(); ++i) { + f << "server " << (*i)->as_metadata () << "\n"; + } + + for (vector >::const_iterator i = _screens.begin(); i != _screens.end(); ++i) { + f << "screen " << (*i)->as_metadata () << "\n"; + } + + f << "tms_ip " << _tms_ip << "\n"; + f << "tms_path " << _tms_path << "\n"; + f << "tms_user " << _tms_user << "\n"; + f << "tms_password " << _tms_password << "\n"; +} diff --git a/src/lib/config.h b/src/lib/config.h new file mode 100644 index 000000000..62fcebbc3 --- /dev/null +++ b/src/lib/config.h @@ -0,0 +1,207 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/config.h + * @brief Class holding configuration. + */ + +#ifndef DVDOMATIC_CONFIG_H +#define DVDOMATIC_CONFIG_H + +#include +#include +#include + +class Server; +class Screen; +class Scaler; +class Filter; + +/** @class Config + * @brief A singleton class holding configuration. + */ +class Config +{ +public: + + /** @return number of threads to use for J2K encoding on the local machine */ + int num_local_encoding_threads () const { + return _num_local_encoding_threads; + } + + /** @return port to use for J2K encoding servers */ + int server_port () const { + return _server_port; + } + + /** @return index of colour LUT to use when converting RGB to XYZ. + * 0: sRGB + * 1: Rec 709 + * 2: DC28 + */ + int colour_lut_index () const { + return _colour_lut_index; + } + + /** @return bandwidth for J2K files in bits per second */ + int j2k_bandwidth () const { + return _j2k_bandwidth; + } + + /** @return J2K encoding servers to use */ + std::vector servers () const { + return _servers; + } + + std::vector > screens () const { + return _screens; + } + + Scaler const * reference_scaler () const { + return _reference_scaler; + } + + std::vector reference_filters () const { + return _reference_filters; + } + + std::string tms_ip () const { + return _tms_ip; + } + + std::string tms_path () const { + return _tms_path; + } + + std::string tms_user () const { + return _tms_user; + } + + std::string tms_password () const { + return _tms_password; + } + + /** @param n New number of local encoding threads */ + void set_num_local_encoding_threads (int n) { + _num_local_encoding_threads = n; + Changed (); + } + + /** @param p New server port */ + void set_sever_port (int p) { + _server_port = p; + Changed (); + } + + /** @param i New colour LUT index */ + void set_colour_lut_index (int i) { + _colour_lut_index = i; + Changed (); + } + + /** @param b New J2K bandwidth */ + void set_j2k_bandwidth (int b) { + _j2k_bandwidth = b; + Changed (); + } + + /** @param s New list of servers */ + void set_servers (std::vector s) { + _servers = s; + Changed (); + } + + void set_screens (std::vector > s) { + _screens = s; + Changed (); + } + + void set_reference_scaler (Scaler const * s) { + _reference_scaler = s; + Changed (); + } + + void set_reference_filters (std::vector const & f) { + _reference_filters = f; + Changed (); + } + + void set_tms_ip (std::string i) { + _tms_ip = i; + Changed (); + } + + void set_tms_path (std::string p) { + _tms_path = p; + Changed (); + } + + void set_tms_user (std::string u) { + _tms_user = u; + Changed (); + } + + void set_tms_password (std::string p) { + _tms_password = p; + Changed (); + } + + void write () const; + + sigc::signal0 Changed; + + static Config* instance (); + +private: + Config (); + std::string file () const; + + /** number of threads to use for J2K encoding on the local machine */ + int _num_local_encoding_threads; + /** port to use for J2K encoding servers */ + int _server_port; + /** index of colour LUT to use when converting RGB to XYZ + * (see colour_lut_index ()) + */ + int _colour_lut_index; + /** bandwidth for J2K files in Mb/s */ + int _j2k_bandwidth; + + /** J2K encoding servers to use */ + std::vector _servers; + + /** Screen definitions */ + std::vector > _screens; + + /** Scaler to use for the "A" part of A/B comparisons */ + Scaler const * _reference_scaler; + + /** Filters to use for the "A" part of A/B comparisons */ + std::vector _reference_filters; + + std::string _tms_ip; + std::string _tms_path; + std::string _tms_user; + std::string _tms_password; + + /** Singleton instance, or 0 */ + static Config* _instance; +}; + +#endif diff --git a/src/lib/copy_from_dvd_job.cc b/src/lib/copy_from_dvd_job.cc new file mode 100644 index 000000000..b82169ad1 --- /dev/null +++ b/src/lib/copy_from_dvd_job.cc @@ -0,0 +1,103 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/copy_from_dvd_job.cc + * @brief A job to copy a film from a DVD. + */ + +#include +#include +#include +#include "copy_from_dvd_job.h" +#include "film_state.h" +#include "dvd.h" + +using namespace std; +using namespace boost; + +/** @param fs FilmState for the film to write DVD data into. + * @param l Log that we can write to. + */ +CopyFromDVDJob::CopyFromDVDJob (shared_ptr fs, Log* l) + : Job (fs, shared_ptr (), l) +{ + +} + +string +CopyFromDVDJob::name () const +{ + return "Copy film from DVD"; +} + +void +CopyFromDVDJob::run () +{ + /* Remove any old DVD rips */ + filesystem::remove_all (_fs->dir ("dvd")); + + string const dvd = find_dvd (); + if (dvd.empty ()) { + set_error ("could not find DVD"); + set_state (FINISHED_ERROR); + } + + vector const t = dvd_titles (dvd); + if (t.empty ()) { + set_error ("no titles found on DVD"); + set_state (FINISHED_ERROR); + } + + int longest_title = 0; + uint64_t longest_size = 0; + for (vector::size_type i = 0; i < t.size(); ++i) { + if (longest_size < t[i]) { + longest_size = t[i]; + longest_title = i; + } + } + + stringstream c; + c << "vobcopy -n " << longest_title << " -l -o \"" << _fs->dir ("dvd") << "\" 2>&1"; + + FILE* f = popen (c.str().c_str(), "r"); + if (f == 0) { + set_error ("could not run vobcopy command"); + set_state (FINISHED_ERROR); + return; + } + + while (!feof (f)) { + char buf[256]; + if (fscanf (f, "%s", buf)) { + string s (buf); + if (!s.empty () && s[s.length() - 1] == '%') { + set_progress (atof (s.substr(0, s.length() - 1).c_str()) / 100.0); + } + } + } + + int const r = pclose (f); + if (WEXITSTATUS (r) != 0) { + set_error ("call to vobcopy failed"); + set_state (FINISHED_ERROR); + } else { + set_state (FINISHED_OK); + } +} diff --git a/src/lib/copy_from_dvd_job.h b/src/lib/copy_from_dvd_job.h new file mode 100644 index 000000000..6b56f6f0a --- /dev/null +++ b/src/lib/copy_from_dvd_job.h @@ -0,0 +1,36 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/copy_from_dvd_job.h + * @brief A job to copy a film from a DVD. + */ + +#include "job.h" + +/** @class CopyFromDVDJob + * @brief A job to copy a film from a DVD using `vobcopy'. + */ +class CopyFromDVDJob : public Job +{ +public: + CopyFromDVDJob (boost::shared_ptr, Log *); + + std::string name () const; + void run (); +}; diff --git a/src/lib/dcp_content_type.cc b/src/lib/dcp_content_type.cc new file mode 100644 index 000000000..72a26e407 --- /dev/null +++ b/src/lib/dcp_content_type.cc @@ -0,0 +1,91 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/content_type.cc + * @brief A description of the type of content for a DCP (e.g. feature, trailer etc.) + */ + +#include +#include "dcp_content_type.h" + +using namespace std; + +vector DCPContentType::_dcp_content_types; + +DCPContentType::DCPContentType (string p, string o) + : _pretty_name (p) + , _opendcp_name (o) +{ + +} + +void +DCPContentType::setup_dcp_content_types () +{ + _dcp_content_types.push_back (new DCPContentType ("Feature", "feature")); + _dcp_content_types.push_back (new DCPContentType ("Short", "short")); + _dcp_content_types.push_back (new DCPContentType ("Trailer", "trailer")); + _dcp_content_types.push_back (new DCPContentType ("Test", "test")); + _dcp_content_types.push_back (new DCPContentType ("Transitional", "transitional")); + _dcp_content_types.push_back (new DCPContentType ("Rating", "rating")); + _dcp_content_types.push_back (new DCPContentType ("Teaser", "teaster")); + _dcp_content_types.push_back (new DCPContentType ("Policy", "policy")); + _dcp_content_types.push_back (new DCPContentType ("Public Service Announcement", "psa")); + _dcp_content_types.push_back (new DCPContentType ("Advertisement", "advertisement")); +} + +DCPContentType const * +DCPContentType::from_pretty_name (string n) +{ + for (vector::const_iterator i = _dcp_content_types.begin(); i != _dcp_content_types.end(); ++i) { + if ((*i)->pretty_name() == n) { + return *i; + } + } + + return 0; +} + +DCPContentType const * +DCPContentType::from_index (int n) +{ + assert (n >= 0 && n < int (_dcp_content_types.size ())); + return _dcp_content_types[n]; +} + +int +DCPContentType::as_index (DCPContentType const * c) +{ + vector::size_type i = 0; + while (i < _dcp_content_types.size() && _dcp_content_types[i] != c) { + ++i; + } + + if (i == _dcp_content_types.size ()) { + return -1; + } + + return i; +} + +vector +DCPContentType::all () +{ + return _dcp_content_types; +} diff --git a/src/lib/dcp_content_type.h b/src/lib/dcp_content_type.h new file mode 100644 index 000000000..cade673bc --- /dev/null +++ b/src/lib/dcp_content_type.h @@ -0,0 +1,58 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/content_type.h + * @brief A description of the type of content for a DCP (e.g. feature, trailer etc.) + */ + +#include +#include + +/** @class DCPContentType + * @brief A description of the type of content for a DCP (e.g. feature, trailer etc.) + */ +class DCPContentType +{ +public: + DCPContentType (std::string, std::string); + + /** @return user-visible `pretty' name */ + std::string pretty_name () const { + return _pretty_name; + } + + /** @return name as understood by OpenDCP */ + std::string opendcp_name () const { + return _opendcp_name; + } + + static DCPContentType const * from_pretty_name (std::string); + static DCPContentType const * from_index (int); + static int as_index (DCPContentType const *); + static std::vector all (); + static void setup_dcp_content_types (); + +private: + std::string _pretty_name; + std::string _opendcp_name; + + /** All available DCP content types */ + static std::vector _dcp_content_types; +}; + diff --git a/src/lib/dcp_video_frame.cc b/src/lib/dcp_video_frame.cc new file mode 100644 index 000000000..cbd70898e --- /dev/null +++ b/src/lib/dcp_video_frame.cc @@ -0,0 +1,433 @@ +/* + Copyright (C) 2012 Carl Hetherington + Taken from code Copyright (C) 2010-2011 Terrence Meiczinger + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/dcp_video_frame.cc + * @brief A single frame of video destined for a DCP. + * + * Given an Image and some settings, this class knows how to encode + * the image to J2K either on the local host or on a remote server. + * + * Objects of this class are used for the queue that we keep + * of images that require encoding. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "film.h" +#include "dcp_video_frame.h" +#include "lut.h" +#include "config.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "server.h" +#include "util.h" +#include "scaler.h" +#include "image.h" +#include "log.h" + +#ifdef DEBUG_HASH +#include +#endif + +using namespace std; +using namespace boost; + +/** Construct a DCP video frame. + * @param input Input image. + * @param out Required size of output, in pixels (including any padding). + * @param s Scaler to use. + * @param p Number of pixels of padding either side of the image. + * @param f Index of the frame within the Film. + * @param fps Frames per second of the Film. + * @param pp FFmpeg post-processing string to use. + * @param clut Colour look-up table to use (see Config::colour_lut_index ()) + * @param bw J2K bandwidth to use (see Config::j2k_bandwidth ()) + * @param l Log to write to. + */ +DCPVideoFrame::DCPVideoFrame ( + shared_ptr yuv, Size out, int p, Scaler const * s, int f, float fps, string pp, int clut, int bw, Log* l) + : _input (yuv) + , _out_size (out) + , _padding (p) + , _scaler (s) + , _frame (f) + /* we round here; not sure if this is right */ + , _frames_per_second (rint (fps)) + , _post_process (pp) + , _colour_lut_index (clut) + , _j2k_bandwidth (bw) + , _log (l) + , _image (0) + , _parameters (0) + , _cinfo (0) + , _cio (0) +{ + +} + +/** Create a libopenjpeg container suitable for our output image */ +void +DCPVideoFrame::create_openjpeg_container () +{ + for (int i = 0; i < 3; ++i) { + _cmptparm[i].dx = 1; + _cmptparm[i].dy = 1; + _cmptparm[i].w = _out_size.width; + _cmptparm[i].h = _out_size.height; + _cmptparm[i].x0 = 0; + _cmptparm[i].y0 = 0; + _cmptparm[i].prec = 12; + _cmptparm[i].bpp = 12; + _cmptparm[i].sgnd = 0; + } + + _image = opj_image_create (3, &_cmptparm[0], CLRSPC_SRGB); + if (_image == 0) { + throw EncodeError ("could not create libopenjpeg image"); + } + + _image->x0 = 0; + _image->y0 = 0; + _image->x1 = _out_size.width; + _image->y1 = _out_size.height; +} + +DCPVideoFrame::~DCPVideoFrame () +{ + if (_image) { + opj_image_destroy (_image); + } + + if (_cio) { + opj_cio_close (_cio); + } + + if (_cinfo) { + opj_destroy_compress (_cinfo); + } + + if (_parameters) { + free (_parameters->cp_comment); + free (_parameters->cp_matrice); + } + + delete _parameters; +} + +/** J2K-encode this frame on the local host. + * @return Encoded data. + */ +shared_ptr +DCPVideoFrame::encode_locally () +{ + shared_ptr prepared = _input; + + if (!_post_process.empty ()) { + prepared = prepared->post_process (_post_process); + } + + prepared = prepared->scale_and_convert_to_rgb (_out_size, _padding, _scaler); + + create_openjpeg_container (); + + int const size = _out_size.width * _out_size.height; + + struct { + double r, g, b; + } s; + + struct { + double x, y, z; + } d; + + /* Copy our RGB into the openjpeg container, converting to XYZ in the process */ + + uint8_t* p = prepared->data()[0]; + for (int i = 0; i < size; ++i) { + /* In gamma LUT (converting 8-bit input to 12-bit) */ + s.r = lut_in[_colour_lut_index][*p++ << 4]; + s.g = lut_in[_colour_lut_index][*p++ << 4]; + s.b = lut_in[_colour_lut_index][*p++ << 4]; + + /* RGB to XYZ Matrix */ + d.x = ((s.r * color_matrix[_colour_lut_index][0][0]) + (s.g * color_matrix[_colour_lut_index][0][1]) + (s.b * color_matrix[_colour_lut_index][0][2])); + d.y = ((s.r * color_matrix[_colour_lut_index][1][0]) + (s.g * color_matrix[_colour_lut_index][1][1]) + (s.b * color_matrix[_colour_lut_index][1][2])); + d.z = ((s.r * color_matrix[_colour_lut_index][2][0]) + (s.g * color_matrix[_colour_lut_index][2][1]) + (s.b * color_matrix[_colour_lut_index][2][2])); + + /* DCI companding */ + d.x = d.x * DCI_COEFFICENT * (DCI_LUT_SIZE - 1); + d.y = d.y * DCI_COEFFICENT * (DCI_LUT_SIZE - 1); + d.z = d.z * DCI_COEFFICENT * (DCI_LUT_SIZE - 1); + + /* Out gamma LUT */ + _image->comps[0].data[i] = lut_out[LO_DCI][(int) d.x]; + _image->comps[1].data[i] = lut_out[LO_DCI][(int) d.y]; + _image->comps[2].data[i] = lut_out[LO_DCI][(int) d.z]; + } + + /* Set the max image and component sizes based on frame_rate */ + int const max_cs_len = ((float) _j2k_bandwidth) / 8 / _frames_per_second; + int const max_comp_size = max_cs_len / 1.25; + + /* Set encoding parameters to default values */ + _parameters = new opj_cparameters_t; + opj_set_default_encoder_parameters (_parameters); + + /* Set default cinema parameters */ + _parameters->tile_size_on = false; + _parameters->cp_tdx = 1; + _parameters->cp_tdy = 1; + + /* Tile part */ + _parameters->tp_flag = 'C'; + _parameters->tp_on = 1; + + /* Tile and Image shall be at (0,0) */ + _parameters->cp_tx0 = 0; + _parameters->cp_ty0 = 0; + _parameters->image_offset_x0 = 0; + _parameters->image_offset_y0 = 0; + + /* Codeblock size = 32x32 */ + _parameters->cblockw_init = 32; + _parameters->cblockh_init = 32; + _parameters->csty |= 0x01; + + /* The progression order shall be CPRL */ + _parameters->prog_order = CPRL; + + /* No ROI */ + _parameters->roi_compno = -1; + + _parameters->subsampling_dx = 1; + _parameters->subsampling_dy = 1; + + /* 9-7 transform */ + _parameters->irreversible = 1; + + _parameters->tcp_rates[0] = 0; + _parameters->tcp_numlayers++; + _parameters->cp_disto_alloc = 1; + _parameters->cp_rsiz = CINEMA2K; + _parameters->cp_comment = strdup ("OpenDCP"); + _parameters->cp_cinema = CINEMA2K_24; + + /* 3 components, so use MCT */ + _parameters->tcp_mct = 1; + + /* set max image */ + _parameters->max_comp_size = max_comp_size; + _parameters->tcp_rates[0] = ((float) (3 * _image->comps[0].w * _image->comps[0].h * _image->comps[0].prec)) / (max_cs_len * 8); + + /* get a J2K compressor handle */ + _cinfo = opj_create_compress (CODEC_J2K); + + /* Set event manager to null (openjpeg 1.3 bug) */ + _cinfo->event_mgr = 0; + +#ifdef DEBUG_HASH + md5_data ("J2K in X", _image->comps[0].data, size * sizeof (int)); + md5_data ("J2K in Y", _image->comps[1].data, size * sizeof (int)); + md5_data ("J2K in Z", _image->comps[2].data, size * sizeof (int)); +#endif + + /* Setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder (_cinfo, _parameters, _image); + + _cio = opj_cio_open ((opj_common_ptr) _cinfo, 0, 0); + + int const r = opj_encode (_cinfo, _cio, _image, 0); + if (r == 0) { + throw EncodeError ("jpeg2000 encoding failed"); + } + +#ifdef DEBUG_HASH + md5_data ("J2K out", _cio->buffer, cio_tell (_cio)); +#endif + + { + stringstream s; + s << "Finished locally-encoded frame " << _frame << " length " << cio_tell (_cio); + _log->log (s.str ()); + } + + return shared_ptr (new LocallyEncodedData (_cio->buffer, cio_tell (_cio))); +} + +/** Send this frame to a remote server for J2K encoding, then read the result. + * @param serv Server to send to. + * @return Encoded data. + */ +shared_ptr +DCPVideoFrame::encode_remotely (Server const * serv) +{ + int const fd = socket (AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + throw NetworkError ("could not create socket"); + } + + struct timeval tv; + tv.tv_sec = 20; + tv.tv_usec = 0; + + if (setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (void *) &tv, sizeof (tv)) < 0) { + close (fd); + throw NetworkError ("setsockopt failed"); + } + + if (setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, (void *) &tv, sizeof (tv)) < 0) { + close (fd); + throw NetworkError ("setsockopt failed"); + } + + struct hostent* server = gethostbyname (serv->host_name().c_str ()); + if (server == 0) { + close (fd); + throw NetworkError ("gethostbyname failed"); + } + + struct sockaddr_in server_address; + memset (&server_address, 0, sizeof (server_address)); + server_address.sin_family = AF_INET; + memcpy (&server_address.sin_addr.s_addr, server->h_addr, server->h_length); + server_address.sin_port = htons (Config::instance()->server_port ()); + if (connect (fd, (struct sockaddr *) &server_address, sizeof (server_address)) < 0) { + close (fd); + stringstream s; + s << "could not connect (" << strerror (errno) << ")"; + throw NetworkError (s.str()); + } + +#ifdef DEBUG_HASH + _input->hash ("Input for remote encoding (before sending)"); +#endif + + stringstream s; + s << "encode " + << _input->size().width << " " << _input->size().height << " " + << _input->pixel_format() << " " + << _out_size.width << " " << _out_size.height << " " + << _padding << " " + << _scaler->id () << " " + << _frame << " " + << _frames_per_second << " " + << (_post_process.empty() ? "none" : _post_process) << " " + << Config::instance()->colour_lut_index () << " " + << Config::instance()->j2k_bandwidth () << " "; + + for (int i = 0; i < _input->components(); ++i) { + s << _input->line_size()[i] << " "; + } + + socket_write (fd, (uint8_t *) s.str().c_str(), s.str().length() + 1); + + for (int i = 0; i < _input->components(); ++i) { + socket_write (fd, _input->data()[i], _input->line_size()[i] * _input->lines(i)); + } + + SocketReader reader (fd); + + char buffer[32]; + reader.read_indefinite ((uint8_t *) buffer, sizeof (buffer)); + reader.consume (strlen (buffer) + 1); + shared_ptr e (new RemotelyEncodedData (atoi (buffer))); + + /* now read the rest */ + reader.read_definite_and_consume (e->data(), e->size()); + +#ifdef DEBUG_HASH + e->hash ("Encoded image (after receiving)"); +#endif + + { + stringstream s; + s << "Finished remotely-encoded frame " << _frame << " length " << e->size(); + _log->log (s.str ()); + } + + close (fd); + return e; +} + +/** Write this data to a J2K file. + * @param opt Options. + * @param frame Frame index. + */ +void +EncodedData::write (shared_ptr opt, int frame) +{ + string const tmp_j2k = opt->frame_out_path (frame, true); + + FILE* f = fopen (tmp_j2k.c_str (), "wb"); + + if (!f) { + throw WriteFileError (tmp_j2k, errno); + } + + fwrite (_data, 1, _size, f); + fclose (f); + + /* Rename the file from foo.j2c.tmp to foo.j2c now that it is complete */ + filesystem::rename (tmp_j2k, opt->frame_out_path (frame, false)); +} + +/** Send this data to a file descriptor. + * @param fd File descriptor. + */ +void +EncodedData::send (int fd) +{ + stringstream s; + s << _size; + socket_write (fd, (uint8_t *) s.str().c_str(), s.str().length() + 1); + socket_write (fd, _data, _size); +} + +#ifdef DEBUG_HASH +void +EncodedData::hash (string n) const +{ + md5_data (n, _data, _size); +} +#endif + +/** @param s Size of data in bytes */ +RemotelyEncodedData::RemotelyEncodedData (int s) + : EncodedData (new uint8_t[s], s) +{ + +} + +RemotelyEncodedData::~RemotelyEncodedData () +{ + delete[] _data; +} diff --git a/src/lib/dcp_video_frame.h b/src/lib/dcp_video_frame.h new file mode 100644 index 000000000..26b44ad43 --- /dev/null +++ b/src/lib/dcp_video_frame.h @@ -0,0 +1,143 @@ +/* + Copyright (C) 2012 Carl Hetherington + Taken from code Copyright (C) 2010-2011 Terrence Meiczinger + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "util.h" + +/** @file src/dcp_video_frame.h + * @brief A single frame of video destined for a DCP. + */ + +class FilmState; +class Options; +class Server; +class Scaler; +class Image; +class Log; + +/** @class EncodedData + * @brief Container for J2K-encoded data. + */ +class EncodedData +{ +public: + /** @param d Data (will not be freed by this class, but may be by subclasses) + * @param s Size of data, in bytes. + */ + EncodedData (uint8_t* d, int s) + : _data (d) + , _size (s) + {} + + virtual ~EncodedData () {} + + void send (int); + void write (boost::shared_ptr, int); + +#ifdef DEBUG_HASH + void hash (std::string) const; +#endif + + /** @return data */ + uint8_t* data () const { + return _data; + } + + /** @return data size, in bytes */ + int size () const { + return _size; + } + +protected: + uint8_t* _data; ///< data + int _size; ///< data size in bytes +}; + +/** @class LocallyEncodedData + * @brief EncodedData that was encoded locally; this class + * just keeps a pointer to the data, but does no memory + * management. + */ +class LocallyEncodedData : public EncodedData +{ +public: + /** @param d Data (which will not be freed by this class) + * @param s Size of data, in bytes. + */ + LocallyEncodedData (uint8_t* d, int s) + : EncodedData (d, s) + {} +}; + +/** @class RemotelyEncodedData + * @brief EncodedData that is being read from a remote server; + * this class allocates and manages memory for the data. + */ +class RemotelyEncodedData : public EncodedData +{ +public: + RemotelyEncodedData (int s); + ~RemotelyEncodedData (); +}; + +/** @class DCPVideoFrame + * @brief A single frame of video destined for a DCP. + * + * Given an Image and some settings, this class knows how to encode + * the image to J2K either on the local host or on a remote server. + * + * Objects of this class are used for the queue that we keep + * of images that require encoding. + */ +class DCPVideoFrame +{ +public: + DCPVideoFrame (boost::shared_ptr, Size, int, Scaler const *, int, float, std::string, int, int, Log *); + virtual ~DCPVideoFrame (); + + boost::shared_ptr encode_locally (); + boost::shared_ptr encode_remotely (Server const *); + + int frame () const { + return _frame; + } + +private: + void create_openjpeg_container (); + void write_encoded (boost::shared_ptr, uint8_t *, int); + + boost::shared_ptr _input; ///< the input image + Size _out_size; ///< the required size of the output, in pixels + int _padding; + Scaler const * _scaler; ///< scaler to use + int _frame; ///< frame index within the Film + int _frames_per_second; ///< Frames per second that we will use for the DCP (rounded) + std::string _post_process; ///< FFmpeg post-processing string to use + int _colour_lut_index; ///< Colour look-up table to use (see Config::colour_lut_index ()) + int _j2k_bandwidth; ///< J2K bandwidth to use (see Config::j2k_bandwidth ()) + + Log* _log; ///< log + + opj_image_cmptparm_t _cmptparm[3]; ///< libopenjpeg's opj_image_cmptparm_t + opj_image* _image; ///< libopenjpeg's image container + opj_cparameters_t* _parameters; ///< libopenjpeg's parameters + opj_cinfo_t* _cinfo; ///< libopenjpeg's opj_cinfo_t + opj_cio_t* _cio; ///< libopenjpeg's opj_cio_t +}; diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc new file mode 100644 index 000000000..a904e085b --- /dev/null +++ b/src/lib/decoder.cc @@ -0,0 +1,300 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/decoder.cc + * @brief Parent class for decoders of content. + */ + +#include +#include +extern "C" { +#include +#include +#include +} +#include "film.h" +#include "format.h" +#include "job.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "image.h" +#include "util.h" +#include "log.h" +#include "decoder.h" +#include "filter.h" +#include "delay_line.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState of the Film. + * @param o Options. + * @param j Job that we are running within, or 0 + * @param l Log to use. + * @param minimal true to do the bare minimum of work; just run through the content. Useful for acquiring + * accurate frame counts as quickly as possible. This generates no video or audio output. + * @param ignore_length Ignore the content's claimed length when computing progress. + */ +Decoder::Decoder (boost::shared_ptr s, boost::shared_ptr o, Job* j, Log* l, bool minimal, bool ignore_length) + : _fs (s) + , _opt (o) + , _job (j) + , _log (l) + , _minimal (minimal) + , _ignore_length (ignore_length) + , _video_frame (0) + , _buffer_src_context (0) + , _buffer_sink_context (0) + , _have_setup_video_filters (false) + , _delay_line (0) + , _delay_in_bytes (0) +{ + if (_opt->decode_video_frequency != 0 && _fs->length == 0) { + throw DecodeError ("cannot do a partial decode if length == 0"); + } +} + +Decoder::~Decoder () +{ + delete _delay_line; +} + +void +Decoder::process_begin () +{ + /* This assumes 2 bytes per sample */ + _delay_in_bytes = _fs->audio_delay * _fs->audio_sample_rate * _fs->audio_channels * 2 / 1000; + delete _delay_line; + _delay_line = new DelayLine (_delay_in_bytes); +} + +void +Decoder::process_end () +{ + if (_delay_in_bytes < 0) { + uint8_t remainder[-_delay_in_bytes]; + _delay_line->get_remaining (remainder); + Audio (remainder, _delay_in_bytes); + } +} + +/** Start decoding */ +void +Decoder::go () +{ + process_begin (); + + if (_job && _ignore_length) { + _job->set_progress_unknown (); + } + + while (pass () == false) { + if (_job && !_ignore_length) { + _job->set_progress (float (_video_frame) / decoding_frames ()); + } + } + + process_end (); +} + +/** @return Number of frames that we will be decoding */ +int +Decoder::decoding_frames () const +{ + if (_opt->num_frames > 0) { + return _opt->num_frames; + } + + return _fs->length; +} + +/** Run one pass. This may or may not generate any actual video / audio data; + * some decoders may require several passes to generate a single frame. + * @return true if we have finished processing all data; otherwise false. + */ +bool +Decoder::pass () +{ + if (!_have_setup_video_filters) { + setup_video_filters (); + _have_setup_video_filters = true; + } + + if (_opt->num_frames != 0 && _video_frame >= _opt->num_frames) { + return true; + } + + return do_pass (); +} + +/** Called by subclasses to tell the world that some audio data is ready */ +void +Decoder::process_audio (uint8_t* data, int channels, int size) +{ + if (_fs->audio_gain != 0) { + float const linear_gain = pow (10, _fs->audio_gain / 20); + uint8_t* p = data; + int const samples = size / 2; + switch (_fs->audio_sample_format) { + case AV_SAMPLE_FMT_S16: + for (int i = 0; i < samples; ++i) { + /* XXX: assumes little-endian; also we should probably be dithering here */ + int const ou = p[0] | (p[1] << 8); + int const os = ou >= 0x8000 ? (- 0x10000 + ou) : ou; + int const gs = int (os * linear_gain); + int const gu = gs > 0 ? gs : (0x10000 + gs); + p[0] = gu & 0xff; + p[1] = (gu & 0xff00) >> 8; + p += 2; + } + break; + default: + assert (false); + } + } + + int available = _delay_line->feed (data, size); + Audio (data, available); +} + +/** Called by subclasses to tell the world that some video data is ready. + * We do some post-processing / filtering then emit it for listeners. + * @param frame to decode; caller manages memory. + */ +void +Decoder::process_video (AVFrame* frame) +{ + if (_minimal) { + ++_video_frame; + return; + } + + /* Use FilmState::length here as our one may be wrong */ + + int gap = 0; + if (_opt->decode_video_frequency != 0) { + gap = _fs->length / _opt->decode_video_frequency; + } + + if (_opt->decode_video_frequency != 0 && gap != 0 && (_video_frame % gap) != 0) { + ++_video_frame; + return; + } + + if (av_vsrc_buffer_add_frame (_buffer_src_context, frame, 0) < 0) { + throw DecodeError ("could not push buffer into filter chain."); + } + + while (avfilter_poll_frame (_buffer_sink_context->inputs[0])) { + AVFilterBufferRef* filter_buffer; + if (av_buffersink_get_buffer_ref (_buffer_sink_context, &filter_buffer, 0) >= 0) { + + /* This takes ownership of filter_buffer */ + shared_ptr image (new FilterBufferImage ((PixelFormat) frame->format, filter_buffer)); + + if (_opt->black_after > 0 && _video_frame > _opt->black_after) { + image->make_black (); + } + + Video (image, _video_frame); + ++_video_frame; + } + } +} + +void +Decoder::setup_video_filters () +{ + stringstream fs; + Size size_after_crop; + + if (_opt->apply_crop) { + size_after_crop = _fs->cropped_size (native_size ()); + fs << crop_string (Position (_fs->left_crop, _fs->top_crop), size_after_crop); + } else { + size_after_crop = native_size (); + fs << crop_string (Position (0, 0), size_after_crop); + } + + string filters = Filter::ffmpeg_strings (_fs->filters).first; + if (!filters.empty ()) { + filters += ","; + } + + filters += fs.str (); + + avfilter_register_all (); + + AVFilterGraph* graph = avfilter_graph_alloc(); + if (graph == 0) { + throw DecodeError ("Could not create filter graph."); + } + + AVFilter* buffer_src = avfilter_get_by_name("buffer"); + if (buffer_src == 0) { + throw DecodeError ("Could not create buffer src filter"); + } + + AVFilter* buffer_sink = avfilter_get_by_name("buffersink"); + if (buffer_sink == 0) { + throw DecodeError ("Could not create buffer sink filter"); + } + + stringstream a; + a << native_size().width << ":" + << native_size().height << ":" + << pixel_format() << ":" + << time_base_numerator() << ":" + << time_base_denominator() << ":" + << sample_aspect_ratio_numerator() << ":" + << sample_aspect_ratio_denominator(); + + int r; + if ((r = avfilter_graph_create_filter (&_buffer_src_context, buffer_src, "in", a.str().c_str(), 0, graph)) < 0) { + throw DecodeError ("could not create buffer source"); + } + + enum PixelFormat pixel_formats[] = { pixel_format(), PIX_FMT_NONE }; + if (avfilter_graph_create_filter (&_buffer_sink_context, buffer_sink, "out", 0, pixel_formats, graph) < 0) { + throw DecodeError ("could not create buffer sink."); + } + + AVFilterInOut* outputs = avfilter_inout_alloc (); + outputs->name = av_strdup("in"); + outputs->filter_ctx = _buffer_src_context; + outputs->pad_idx = 0; + outputs->next = 0; + + AVFilterInOut* inputs = avfilter_inout_alloc (); + inputs->name = av_strdup("out"); + inputs->filter_ctx = _buffer_sink_context; + inputs->pad_idx = 0; + inputs->next = 0; + + _log->log ("Using filter chain `" + filters + "'"); + if (avfilter_graph_parse (graph, filters.c_str(), &inputs, &outputs, 0) < 0) { + throw DecodeError ("could not set up filter graph."); + } + + if (avfilter_graph_config (graph, 0) < 0) { + throw DecodeError ("could not configure filter graph."); + } +} + diff --git a/src/lib/decoder.h b/src/lib/decoder.h new file mode 100644 index 000000000..db51879a1 --- /dev/null +++ b/src/lib/decoder.h @@ -0,0 +1,136 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/decoder.h + * @brief Parent class for decoders of content. + */ + +#ifndef DVDOMATIC_DECODER_H +#define DVDOMATIC_DECODER_H + +#include +#include +#include +#include +#include +#include "util.h" + +class Job; +class FilmState; +class Options; +class Image; +class Log; +class DelayLine; + +/** @class Decoder. + * @brief Parent class for decoders of content. + * + * These classes can be instructed run through their content + * (by calling ::go), and they emit signals when video or audio data is ready for something else + * to process. + */ +class Decoder +{ +public: + Decoder (boost::shared_ptr, boost::shared_ptr, Job *, Log *, bool, bool); + virtual ~Decoder (); + + /* Methods to query our input video */ + + /** @return length in video frames */ + virtual int length_in_frames () const = 0; + /** @return video frames per second, or 0 if unknown */ + virtual float frames_per_second () const = 0; + /** @return native size in pixels */ + virtual Size native_size () const = 0; + /** @return number of audio channels */ + virtual int audio_channels () const = 0; + /** @return audio sampling rate in Hz */ + virtual int audio_sample_rate () const = 0; + /** @return format of audio samples */ + virtual AVSampleFormat audio_sample_format () const = 0; + + void process_begin (); + bool pass (); + void process_end (); + void go (); + + /** @return the index of the last video frame to be processed */ + int last_video_frame () const { + return _video_frame; + } + + int decoding_frames () const; + + /** Emitted when a video frame is ready. + * First parameter is the frame. + * Second parameter is its index within the content. + */ + sigc::signal, int> Video; + + /** Emitted when some audio data is ready. + * First parameter is the interleaved sample data, format is given in the FilmState. + * Second parameter is the size of the data. + */ + sigc::signal Audio; + +protected: + /** perform a single pass at our content */ + virtual bool do_pass () = 0; + virtual PixelFormat pixel_format () const = 0; + virtual int time_base_numerator () const = 0; + virtual int time_base_denominator () const = 0; + virtual int sample_aspect_ratio_numerator () const = 0; + virtual int sample_aspect_ratio_denominator () const = 0; + + void process_video (AVFrame *); + void process_audio (uint8_t *, int, int); + + /** our FilmState */ + boost::shared_ptr _fs; + /** our options */ + boost::shared_ptr _opt; + /** associated Job, or 0 */ + Job* _job; + /** log that we can write to */ + Log* _log; + + /** true to do the bare minimum of work; just run through the content. Useful for acquiring + * accurate frame counts as quickly as possible. This generates no video or audio output. + */ + bool _minimal; + + /** ignore_length Ignore the content's claimed length when computing progress */ + bool _ignore_length; + +private: + void setup_video_filters (); + + /** last video frame to be processed */ + int _video_frame; + + AVFilterContext* _buffer_src_context; + AVFilterContext* _buffer_sink_context; + + bool _have_setup_video_filters; + DelayLine* _delay_line; + int _delay_in_bytes; +}; + +#endif diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc new file mode 100644 index 000000000..5f8fc55b3 --- /dev/null +++ b/src/lib/decoder_factory.cc @@ -0,0 +1,48 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/decoder_factory.cc + * @brief A method to create an appropriate decoder for some content. + */ + +#include +#include "ffmpeg_decoder.h" +#include "tiff_decoder.h" +#include "imagemagick_decoder.h" +#include "film_state.h" + +using namespace std; +using namespace boost; + +shared_ptr +decoder_factory ( + shared_ptr fs, shared_ptr o, Job* j, Log* l, bool minimal = false, bool ignore_length = false + ) +{ + if (filesystem::is_directory (fs->content_path ())) { + /* Assume a directory contains TIFFs */ + return shared_ptr (new TIFFDecoder (fs, o, j, l, minimal, ignore_length)); + } + + if (fs->content_type() == STILL) { + return shared_ptr (new ImageMagickDecoder (fs, o, j, l, minimal, ignore_length)); + } + + return shared_ptr (new FFmpegDecoder (fs, o, j, l, minimal, ignore_length)); +} diff --git a/src/lib/decoder_factory.h b/src/lib/decoder_factory.h new file mode 100644 index 000000000..36c14951f --- /dev/null +++ b/src/lib/decoder_factory.h @@ -0,0 +1,32 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/decoder_factory.h + * @brief A method to create an appropriate decoder for some content. + */ + +class Decoder; +class FilmState; +class Options; +class Job; +class Log; + +extern boost::shared_ptr decoder_factory ( + boost::shared_ptr, boost::shared_ptr, Job *, Log *, bool minimal = false, bool ignore_length = false + ); diff --git a/src/lib/delay_line.cc b/src/lib/delay_line.cc new file mode 100644 index 000000000..c510fb4e3 --- /dev/null +++ b/src/lib/delay_line.cc @@ -0,0 +1,110 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include "delay_line.h" + +using namespace std; + +/** Construct a DelayLine delaying by some number of bytes. + * @param d Number of bytes to delay by; +ve moves data later. + */ +DelayLine::DelayLine (int d) + : _delay (d) + , _buffer (0) + , _negative_delay_remaining (0) +{ + if (d > 0) { + /* We need a buffer to keep some data in */ + _buffer = new uint8_t[d]; + memset (_buffer, 0, d); + } else if (d < 0) { + /* We can do -ve delays just by chopping off + the start, so no buffer needed. + */ + _negative_delay_remaining = -d; + } +} + +DelayLine::~DelayLine () +{ + delete[] _buffer; +} + +int +DelayLine::feed (uint8_t* data, int size) +{ + int available = size; + + if (_delay > 0) { + + /* Copy the input data */ + uint8_t input[size]; + memcpy (input, data, size); + + int to_do = size; + + /* Write some of our buffer to the output */ + int const from_buffer = min (to_do, _delay); + memcpy (data, _buffer, from_buffer); + to_do -= from_buffer; + + /* Write some of the input to the output */ + int const from_input = min (to_do, size); + memcpy (data + from_buffer, input, from_input); + + int const left_in_buffer = _delay - from_buffer; + + /* Shuffle our buffer down */ + memmove (_buffer, _buffer + from_buffer, left_in_buffer); + + /* Copy remaining input data to our buffer */ + memcpy (_buffer + left_in_buffer, input + from_input, size - from_input); + + } else if (_delay < 0) { + + /* Chop the initial data off until _negative_delay_remaining + is zero, then just pass data. + */ + + int const to_do = min (size, _negative_delay_remaining); + available = size - to_do; + memmove (data, data + to_do, available); + _negative_delay_remaining -= to_do; + + } + + return available; +} + +/** With -ve delays, the DelayLine will have data to give after + * all input data has been passed to ::feed(). + * Call this method after passing all input data. + * + * @param buffer Pointer to buffer of _delay bytes in length, + * which will be filled with remaining data. + */ +void +DelayLine::get_remaining (uint8_t* buffer) +{ + memset (buffer, 0, -_delay); +} diff --git a/src/lib/delay_line.h b/src/lib/delay_line.h new file mode 100644 index 000000000..377553de4 --- /dev/null +++ b/src/lib/delay_line.h @@ -0,0 +1,36 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** A class which can be fed a stream of bytes and which can + * delay them by a positive or negative amount. + */ +class DelayLine +{ +public: + DelayLine (int); + ~DelayLine (); + + int feed (uint8_t *, int); + void get_remaining (uint8_t *); + +private: + int _delay; ///< delay in bytes, +ve to move data later + uint8_t* _buffer; ///< buffer for +ve delays, or 0 + int _negative_delay_remaining; ///< number of bytes of negative delay that remain to emit +}; diff --git a/src/lib/dvd.cc b/src/lib/dvd.cc new file mode 100644 index 000000000..629ba1ac8 --- /dev/null +++ b/src/lib/dvd.cc @@ -0,0 +1,78 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include + +using namespace std; +using namespace boost; + +string +find_dvd () +{ + ifstream f ("/etc/mtab"); + while (f.good ()) { + string s; + getline (f, s); + vector b; + split (b, s, is_any_of (" ")); + if (b.size() >= 3 && b[2] == "udf") { + replace_all (b[1], "\\040", " "); + return b[1]; + } + } + + return ""; +} + +vector +dvd_titles (string dvd) +{ + filesystem::path video (dvd); + video /= "VIDEO_TS"; + + vector sizes; + + for (filesystem::directory_iterator i = filesystem::directory_iterator (video); i != filesystem::directory_iterator(); ++i) { +#if BOOST_FILESYSTEM_VERSION == 3 + string const n = filesystem::path(*i).filename().generic_string(); +#else + string const n = filesystem::path(*i).filename(); +#endif + if (starts_with (n, "VTS_") && ends_with (n, ".VOB")) { + uint64_t const size = filesystem::file_size (filesystem::path (*i)); + vector p; + split (p, n, is_any_of ("_.")); + if (p.size() == 4) { + int const a = atoi (p[1].c_str ()); + int const b = atoi (p[2].c_str ()); + while (a >= int (sizes.size())) { + sizes.push_back (0); + } + + if (b > 0) { + sizes[a] += size; + } + } + } + } + + return sizes; +} diff --git a/src/lib/dvd.h b/src/lib/dvd.h new file mode 100644 index 000000000..170472121 --- /dev/null +++ b/src/lib/dvd.h @@ -0,0 +1,21 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +extern std::vector dvd_titles (std::string); +extern std::string find_dvd (); diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc new file mode 100644 index 000000000..c8eb24c80 --- /dev/null +++ b/src/lib/encoder.cc @@ -0,0 +1,71 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/encoder.h + * @brief Parent class for classes which can encode video and audio frames. + */ + +#include "encoder.h" +#include "util.h" + +using namespace boost; + +int const Encoder::_history_size = 25; + +/** @param s FilmState of the film that we are encoding. + * @param o Options. + * @param l Log. + */ +Encoder::Encoder (shared_ptr s, shared_ptr o, Log* l) + : _fs (s) + , _opt (o) + , _log (l) +{ + +} + + +/** @return an estimate of the current number of frames we are encoding per second, + * or 0 if not known. + */ +float +Encoder::current_frames_per_second () const +{ + boost::mutex::scoped_lock lock (_history_mutex); + if (int (_time_history.size()) < _history_size) { + return 0; + } + + struct timeval now; + gettimeofday (&now, 0); + + return _history_size / (seconds (now) - seconds (_time_history.back ())); +} + +void +Encoder::frame_done () +{ + boost::mutex::scoped_lock lock (_history_mutex); + struct timeval tv; + gettimeofday (&tv, 0); + _time_history.push_front (tv); + if (int (_time_history.size()) > _history_size) { + _time_history.pop_back (); + } +} diff --git a/src/lib/encoder.h b/src/lib/encoder.h new file mode 100644 index 000000000..bed2c0988 --- /dev/null +++ b/src/lib/encoder.h @@ -0,0 +1,87 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef DVDOMATIC_ENCODER_H +#define DVDOMATIC_ENCODER_H + +/** @file src/encoder.h + * @brief Parent class for classes which can encode video and audio frames. + */ + +#include +#include +#include +#include + +class FilmState; +class Options; +class Image; +class Log; + +/** @class Encoder + * @brief Parent class for classes which can encode video and audio frames. + * + * Video is supplied to process_video as YUV frames, and audio + * is supplied as uncompressed PCM in blocks of various sizes. + * + * The subclass is expected to encode the video and/or audio in + * some way and write it to disk. + */ + +class Encoder +{ +public: + Encoder (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + /** Called to indicate that a processing run is about to begin */ + virtual void process_begin () = 0; + + /** Called with a frame of video. + * @param i Video frame image. + * @param f Frame number within the film. + */ + virtual void process_video (boost::shared_ptr i, int f) = 0; + + /** Called with some audio data. + * @param d Data. + * @param s Size of data (in bytes) + */ + virtual void process_audio (uint8_t* d, int s) = 0; + + /** Called when a processing run has finished */ + virtual void process_end () = 0; + + float current_frames_per_second () const; + +protected: + void frame_done (); + + /** FilmState of the film that we are encoding */ + boost::shared_ptr _fs; + /** Options */ + boost::shared_ptr _opt; + /** Log */ + Log* _log; + + mutable boost::mutex _history_mutex; + std::list _time_history; + static int const _history_size; +}; + +#endif diff --git a/src/lib/encoder_factory.cc b/src/lib/encoder_factory.cc new file mode 100644 index 000000000..d16150fa6 --- /dev/null +++ b/src/lib/encoder_factory.cc @@ -0,0 +1,40 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/encoder_factory.cc + * @brief A method to create an appropriate encoder for some content. + */ + +#include +#include "j2k_wav_encoder.h" +#include "j2k_still_encoder.h" +#include "film_state.h" + +using namespace std; +using namespace boost; + +shared_ptr +encoder_factory (shared_ptr fs, shared_ptr o, Log* l) +{ + if (!filesystem::is_directory (fs->content_path()) && fs->content_type() == STILL) { + return shared_ptr (new J2KStillEncoder (fs, o, l)); + } + + return shared_ptr (new J2KWAVEncoder (fs, o, l)); +} diff --git a/src/lib/encoder_factory.h b/src/lib/encoder_factory.h new file mode 100644 index 000000000..2803de6f0 --- /dev/null +++ b/src/lib/encoder_factory.h @@ -0,0 +1,30 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/encoder_factory.h + * @brief A method to create an appropriate encoder for some content. + */ + +class Encoder; +class FilmState; +class Options; +class Job; +class Log; + +extern boost::shared_ptr encoder_factory (boost::shared_ptr, boost::shared_ptr, Log *); diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc new file mode 100644 index 000000000..6927715bd --- /dev/null +++ b/src/lib/examine_content_job.cc @@ -0,0 +1,69 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/examine_content_job.cc + * @brief A class to run through content at high speed to find its length. + */ + +#include "examine_content_job.h" +#include "options.h" +#include "film_state.h" +#include "decoder_factory.h" +#include "decoder.h" + +using namespace std; +using namespace boost; + +ExamineContentJob::ExamineContentJob (shared_ptr fs, Log* l) + : Job (fs, shared_ptr (), l) +{ + +} + +ExamineContentJob::~ExamineContentJob () +{ +} + +string +ExamineContentJob::name () const +{ + stringstream s; + s << "Examine content of " << _fs->name; + return s.str (); +} + +void +ExamineContentJob::run () +{ + shared_ptr o (new Options ("", "", "")); + o->out_size = Size (512, 512); + o->apply_crop = false; + + _decoder = decoder_factory (_fs, o, this, _log, true, true); + _decoder->go (); + + set_progress (1); + set_state (FINISHED_OK); +} + +int +ExamineContentJob::last_video_frame () const +{ + return _decoder->last_video_frame (); +} diff --git a/src/lib/examine_content_job.h b/src/lib/examine_content_job.h new file mode 100644 index 000000000..d149341b4 --- /dev/null +++ b/src/lib/examine_content_job.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/examine_content_job.h + * @brief A class to run through content at high speed to find its length. + */ + +#include "job.h" + +class Decoder; + +/** @class ExamineContentJob + * @brief A class to run through content at high speed to find its length. + */ +class ExamineContentJob : public Job +{ +public: + ExamineContentJob (boost::shared_ptr, Log *); + ~ExamineContentJob (); + + std::string name () const; + void run (); + + int last_video_frame () const; + +private: + boost::shared_ptr _decoder; +}; + diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h new file mode 100644 index 000000000..b16275c20 --- /dev/null +++ b/src/lib/exceptions.h @@ -0,0 +1,215 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/exceptions.h + * @brief Our exceptions. + */ + +#include +#include +#include + +/** @class StringError + * @brief A parent class for exceptions using messages held in a std::string + */ +class StringError : public std::exception +{ +public: + /** @param w Error message */ + StringError (std::string w) { + _what = w; + } + + virtual ~StringError () throw () {} + + /** @return error message */ + char const * what () const throw () { + return _what.c_str (); + } + +protected: + /** error message */ + std::string _what; +}; + +/** @class DecodeError + * @brief A low-level problem with the decoder (possibly due to the nature + * of a source file). + */ +class DecodeError : public StringError +{ +public: + DecodeError (std::string s) + : StringError (s) + {} +}; + +/** @class EncodeError + * @brief A low-level problem with an encoder. + */ +class EncodeError : public StringError +{ +public: + EncodeError (std::string s) + : StringError (s) + {} +}; + +/** @class FileError. + * @brief Parent class for file-related errors. + */ +class FileError : public StringError +{ +public: + FileError (std::string m, std::string f) + : StringError (m) + , _file (f) + {} + + virtual ~FileError () throw () {} + + std::string file () const { + return _file; + } + +private: + std::string _file; +}; + + +/** @class OpenFileError. + * @brief Indicates that some error occurred when trying to open a file. + */ +class OpenFileError : public FileError +{ +public: + /** @param f File that we were trying to open */ + OpenFileError (std::string f) + : FileError ("could not open file " + f, f) + {} +}; + +/** @class CreateFileError. + * @brief Indicates that some error occurred when trying to create a file. + */ +class CreateFileError : public FileError +{ +public: + /** @param f File that we were trying to create */ + CreateFileError (std::string f) + : FileError ("could not create file " + f, f) + {} +}; + +/** @class WriteFileError. + * @brief Indicates that some error occurred when trying to write to a file + */ +class WriteFileError : public FileError +{ +public: + /** @param f File that we were trying to write to. + * @param e errno value, or 0. + */ + WriteFileError (std::string f, int e) + : FileError ("", f) + { + std::stringstream s; + s << "could not write to file " << f; + if (e) { + s << " (" << strerror (e) << ")"; + } + _what = s.str (); + } +}; + +/** @class SettingError. + * @brief Indicates that something is wrong with a setting. + */ +class SettingError : public StringError +{ +public: + /** @param s Name of setting that was required. + * @param m Message. + */ + SettingError (std::string s, std::string m) + : StringError (m) + , _setting (s) + {} + + virtual ~SettingError () throw () {} + + /** @return name of setting in question */ + std::string setting () const { + return _setting; + } + +private: + std::string _setting; +}; + +/** @class MissingSettingError. + * @brief Indicates that a Film is missing a setting that is required for some operation. + */ +class MissingSettingError : public SettingError +{ +public: + /** @param s Name of setting that was required */ + MissingSettingError (std::string s) + : SettingError (s, "missing required setting " + s) + {} +}; + +/** @class BadSettingError + * @brief Indicates that a setting is bad in some way. + */ +class BadSettingError : public SettingError +{ +public: + /** @param s Name of setting that is bad */ + BadSettingError (std::string s, std::string m) + : SettingError (s, m) + {} +}; + +/** @class NetworkError. + * @brief Indicates some problem with communication on the network. + */ +class NetworkError : public StringError +{ +public: + NetworkError (std::string s) + : StringError (s) + {} +}; + +class PlayError : public StringError +{ +public: + PlayError (std::string s) + : StringError (s) + {} +}; + +class DVDError : public StringError +{ +public: + DVDError (std::string s) + : StringError (s) + {} +}; diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc new file mode 100644 index 000000000..af258f381 --- /dev/null +++ b/src/lib/ffmpeg_decoder.cc @@ -0,0 +1,256 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/ffmpeg_decoder.cc + * @brief A decoder using FFmpeg to decode content. + */ + +#include +#include +#include +#include +#include +#include +extern "C" { +#include +#include +#include +#include +#include +} +#include +#include "film.h" +#include "format.h" +#include "transcoder.h" +#include "job.h" +#include "filter.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "image.h" +#include "util.h" +#include "log.h" +#include "ffmpeg_decoder.h" + +using namespace std; +using namespace boost; + +FFmpegDecoder::FFmpegDecoder (boost::shared_ptr s, boost::shared_ptr o, Job* j, Log* l, bool minimal, bool ignore_length) + : Decoder (s, o, j, l, minimal, ignore_length) + , _format_context (0) + , _video_stream (-1) + , _audio_stream (-1) + , _frame (0) + , _video_codec_context (0) + , _video_codec (0) + , _audio_codec_context (0) + , _audio_codec (0) +{ + setup_general (); + setup_video (); + setup_audio (); +} + +FFmpegDecoder::~FFmpegDecoder () +{ + if (_audio_codec_context) { + avcodec_close (_audio_codec_context); + } + + if (_video_codec_context) { + avcodec_close (_video_codec_context); + } + + av_free (_frame); + avformat_close_input (&_format_context); +} + +void +FFmpegDecoder::setup_general () +{ + int r; + + av_register_all (); + + if ((r = avformat_open_input (&_format_context, _fs->content_path().c_str(), 0, 0)) != 0) { + throw OpenFileError (_fs->content_path ()); + } + + if (avformat_find_stream_info (_format_context, 0) < 0) { + throw DecodeError ("could not find stream information"); + } + + for (uint32_t i = 0; i < _format_context->nb_streams; ++i) { + if (_format_context->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + _video_stream = i; + } else if (_format_context->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) { + _audio_stream = i; + } + } + + if (_video_stream < 0) { + throw DecodeError ("could not find video stream"); + } + if (_audio_stream < 0) { + throw DecodeError ("could not find audio stream"); + } + + _frame = avcodec_alloc_frame (); + if (_frame == 0) { + throw DecodeError ("could not allocate frame"); + } +} + +void +FFmpegDecoder::setup_video () +{ + _video_codec_context = _format_context->streams[_video_stream]->codec; + _video_codec = avcodec_find_decoder (_video_codec_context->codec_id); + + if (_video_codec == 0) { + throw DecodeError ("could not find video decoder"); + } + + if (avcodec_open2 (_video_codec_context, _video_codec, 0) < 0) { + throw DecodeError ("could not open video decoder"); + } +} + +void +FFmpegDecoder::setup_audio () +{ + _audio_codec_context = _format_context->streams[_audio_stream]->codec; + _audio_codec = avcodec_find_decoder (_audio_codec_context->codec_id); + + if (_audio_codec == 0) { + throw DecodeError ("could not find audio decoder"); + } + + if (avcodec_open2 (_audio_codec_context, _audio_codec, 0) < 0) { + throw DecodeError ("could not open audio decoder"); + } +} + +bool +FFmpegDecoder::do_pass () +{ + int r = av_read_frame (_format_context, &_packet); + if (r < 0) { + return true; + } + + if (_packet.stream_index == _video_stream && _opt->decode_video) { + + int frame_finished; + if (avcodec_decode_video2 (_video_codec_context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { + process_video (_frame); + } + + } else if (_packet.stream_index == _audio_stream && _opt->decode_audio) { + + avcodec_get_frame_defaults (_frame); + + int frame_finished; + if (avcodec_decode_audio4 (_audio_codec_context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) { + int const data_size = av_samples_get_buffer_size ( + 0, _audio_codec_context->channels, _frame->nb_samples, audio_sample_format (), 1 + ); + + process_audio (_frame->data[0], _audio_codec_context->channels, data_size); + } + } + + av_free_packet (&_packet); + return false; +} + +int +FFmpegDecoder::length_in_frames () const +{ + return (_format_context->duration / AV_TIME_BASE) * frames_per_second (); +} + +float +FFmpegDecoder::frames_per_second () const +{ + return av_q2d (_format_context->streams[_video_stream]->avg_frame_rate); +} + +int +FFmpegDecoder::audio_channels () const +{ + if (_audio_codec_context == 0) { + return 0; + } + + return _audio_codec_context->channels; +} + +int +FFmpegDecoder::audio_sample_rate () const +{ + if (_audio_codec_context == 0) { + return 0; + } + + return _audio_codec_context->sample_rate; +} + +AVSampleFormat +FFmpegDecoder::audio_sample_format () const +{ + return _audio_codec_context->sample_fmt; +} + +Size +FFmpegDecoder::native_size () const +{ + return Size (_video_codec_context->width, _video_codec_context->height); +} + +PixelFormat +FFmpegDecoder::pixel_format () const +{ + return _video_codec_context->pix_fmt; +} + +int +FFmpegDecoder::time_base_numerator () const +{ + return _video_codec_context->time_base.num; +} + +int +FFmpegDecoder::time_base_denominator () const +{ + return _video_codec_context->time_base.den; +} + +int +FFmpegDecoder::sample_aspect_ratio_numerator () const +{ + return _video_codec_context->sample_aspect_ratio.num; +} + +int +FFmpegDecoder::sample_aspect_ratio_denominator () const +{ + return _video_codec_context->sample_aspect_ratio.den; +} + diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h new file mode 100644 index 000000000..d66acad48 --- /dev/null +++ b/src/lib/ffmpeg_decoder.h @@ -0,0 +1,90 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/ffmpeg_decoder.h + * @brief A decoder using FFmpeg to decode content. + */ + +#include +#include +#include +#include +extern "C" { +#include +#include +} +#include "util.h" +#include "decoder.h" + +struct AVFilterGraph; +struct AVCodecContext; +struct AVFilterContext; +struct AVFormatContext; +struct AVFrame; +struct AVBufferContext; +struct AVCodec; +class Job; +class FilmState; +class Options; +class Image; +class Log; + +/** @class FFmpegDecoder + * @brief A decoder using FFmpeg to decode content. + */ +class FFmpegDecoder : public Decoder +{ +public: + FFmpegDecoder (boost::shared_ptr, boost::shared_ptr, Job *, Log *, bool, bool); + ~FFmpegDecoder (); + + /* Methods to query our input video */ + int length_in_frames () const; + int decoding_frames () const; + float frames_per_second () const; + Size native_size () const; + int audio_channels () const; + int audio_sample_rate () const; + AVSampleFormat audio_sample_format () const; + +private: + + bool do_pass (); + PixelFormat pixel_format () const; + int time_base_numerator () const; + int time_base_denominator () const; + int sample_aspect_ratio_numerator () const; + int sample_aspect_ratio_denominator () const; + + void setup_general (); + void setup_video (); + void setup_audio (); + + AVFormatContext* _format_context; + int _video_stream; + int _audio_stream; + AVFrame* _frame; + + AVCodecContext* _video_codec_context; + AVCodec* _video_codec; + AVCodecContext* _audio_codec_context; + AVCodec* _audio_codec; + + AVPacket _packet; +}; diff --git a/src/lib/film.cc b/src/lib/film.cc new file mode 100644 index 000000000..3eea41c25 --- /dev/null +++ b/src/lib/film.cc @@ -0,0 +1,631 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "film.h" +#include "format.h" +#include "tiff_encoder.h" +#include "job.h" +#include "filter.h" +#include "transcoder.h" +#include "util.h" +#include "job_manager.h" +#include "ab_transcode_job.h" +#include "transcode_job.h" +#include "make_mxf_job.h" +#include "scp_dcp_job.h" +#include "copy_from_dvd_job.h" +#include "make_dcp_job.h" +#include "film_state.h" +#include "log.h" +#include "options.h" +#include "exceptions.h" +#include "examine_content_job.h" +#include "scaler.h" +#include "decoder_factory.h" +#include "config.h" + +using namespace std; +using namespace boost; + +/** Construct a Film object in a given directory, reading any metadata + * file that exists in that directory. An exception will be thrown if + * must_exist is true, and the specified directory does not exist. + * + * @param d Film directory. + * @param must_exist true to throw an exception if does not exist. + */ + +Film::Film (string d, bool must_exist) + : _dirty (false) +{ + /* Make _state.directory a complete path without ..s (where possible) + (Code swiped from Adam Bowen on stackoverflow) + */ + + filesystem::path p (filesystem::system_complete (d)); + filesystem::path result; + for(filesystem::path::iterator i = p.begin(); i != p.end(); ++i) { + if (*i == "..") { + if (filesystem::is_symlink (result) || result.filename() == "..") { + result /= *i; + } else { + result = result.parent_path (); + } + } else if (*i != ".") { + result /= *i; + } + } + + _state.directory = result.string (); + + if (must_exist && !filesystem::exists (_state.directory)) { + throw OpenFileError (_state.directory); + } + + read_metadata (); + + _log = new Log (_state.file ("log")); +} + +/** Copy constructor */ +Film::Film (Film const & other) + : _state (other._state) + , _dirty (other._dirty) +{ + +} + +Film::~Film () +{ + delete _log; +} + +/** Read the `metadata' file inside this Film's directory, and fill the + * object's data with its content. + */ + +void +Film::read_metadata () +{ + ifstream f (metadata_file().c_str ()); + string line; + while (getline (f, line)) { + if (line.empty ()) { + continue; + } + + if (line[0] == '#') { + continue; + } + + size_t const s = line.find (' '); + if (s == string::npos) { + continue; + } + + _state.read_metadata (line.substr (0, s), line.substr (s + 1)); + } + + _dirty = false; +} + +/** Write our state to a file `metadata' inside the Film's directory */ +void +Film::write_metadata () const +{ + filesystem::create_directories (_state.directory); + + ofstream f (metadata_file().c_str ()); + if (!f.good ()) { + throw CreateFileError (metadata_file ()); + } + + _state.write_metadata (f); + + _dirty = false; +} + +/** Set the name by which DVD-o-matic refers to this Film */ +void +Film::set_name (string n) +{ + _state.name = n; + signal_changed (NAME); +} + +/** Set the content file for this film. + * @param c New content file; if specified as an absolute path, the content should + * be within the film's _state.directory; if specified as a relative path, the content + * will be assumed to be within the film's _state.directory. + */ +void +Film::set_content (string c) +{ + if (filesystem::path(c).has_root_directory () && starts_with (c, _state.directory)) { + c = c.substr (_state.directory.length() + 1); + } + + if (c == _state.content) { + return; + } + + /* Create a temporary decoder so that we can get information + about the content. + */ + shared_ptr s = state_copy (); + s->content = c; + shared_ptr o (new Options ("", "", "")); + o->out_size = Size (1024, 1024); + + shared_ptr d = decoder_factory (s, o, 0, _log); + + _state.size = d->native_size (); + _state.length = d->length_in_frames (); + _state.frames_per_second = d->frames_per_second (); + _state.audio_channels = d->audio_channels (); + _state.audio_sample_rate = d->audio_sample_rate (); + _state.audio_sample_format = d->audio_sample_format (); + + _state.content = c; + + signal_changed (SIZE); + signal_changed (LENGTH); + signal_changed (FRAMES_PER_SECOND); + signal_changed (AUDIO_CHANNELS); + signal_changed (AUDIO_SAMPLE_RATE); + signal_changed (CONTENT); +} + +/** Set the format that this Film should be shown in */ +void +Film::set_format (Format const * f) +{ + _state.format = f; + signal_changed (FORMAT); +} + +/** Set the type to specify the DCP as having + * (feature, trailer etc.) + */ +void +Film::set_dcp_content_type (DCPContentType const * t) +{ + _state.dcp_content_type = t; + signal_changed (DCP_CONTENT_TYPE); +} + +/** Set the number of pixels by which to crop the left of the source video */ +void +Film::set_left_crop (int c) +{ + if (c == _state.left_crop) { + return; + } + + _state.left_crop = c; + signal_changed (LEFT_CROP); +} + +/** Set the number of pixels by which to crop the right of the source video */ +void +Film::set_right_crop (int c) +{ + if (c == _state.right_crop) { + return; + } + + _state.right_crop = c; + signal_changed (RIGHT_CROP); +} + +/** Set the number of pixels by which to crop the top of the source video */ +void +Film::set_top_crop (int c) +{ + if (c == _state.top_crop) { + return; + } + + _state.top_crop = c; + signal_changed (TOP_CROP); +} + +/** Set the number of pixels by which to crop the bottom of the source video */ +void +Film::set_bottom_crop (int c) +{ + if (c == _state.bottom_crop) { + return; + } + + _state.bottom_crop = c; + signal_changed (BOTTOM_CROP); +} + +/** Set the filters to apply to the image when generating thumbnails + * or a DCP. + */ +void +Film::set_filters (vector const & f) +{ + _state.filters = f; + signal_changed (FILTERS); +} + +/** Set the number of frames to put in any generated DCP (from + * the start of the film). 0 indicates that all frames should + * be used. + */ +void +Film::set_dcp_frames (int n) +{ + _state.dcp_frames = n; + signal_changed (DCP_FRAMES); +} + +void +Film::set_dcp_trim_action (TrimAction a) +{ + _state.dcp_trim_action = a; + signal_changed (DCP_TRIM_ACTION); +} + +/** Set whether or not to generate a A/B comparison DCP. + * Such a DCP has the left half of its frame as the Film + * content without any filtering or post-processing; the + * right half is rendered with filters and post-processing. + */ +void +Film::set_dcp_ab (bool a) +{ + _state.dcp_ab = a; + signal_changed (DCP_AB); +} + +void +Film::set_audio_gain (float g) +{ + _state.audio_gain = g; + signal_changed (AUDIO_GAIN); +} + +void +Film::set_audio_delay (int d) +{ + _state.audio_delay = d; + signal_changed (AUDIO_DELAY); +} + +/** @return path of metadata file */ +string +Film::metadata_file () const +{ + return _state.file ("metadata"); +} + +/** @return full path of the content (actual video) file + * of this Film. + */ +string +Film::content () const +{ + return _state.content_path (); +} + +/** The pre-processing GUI part of a thumbs update. + * Must be called from the GUI thread. + */ +void +Film::update_thumbs_pre_gui () +{ + _state.thumbs.clear (); + filesystem::remove_all (_state.dir ("thumbs")); + + /* This call will recreate the directory */ + _state.dir ("thumbs"); +} + +/** The post-processing GUI part of a thumbs update. + * Must be called from the GUI thread. + */ +void +Film::update_thumbs_post_gui () +{ + string const tdir = _state.dir ("thumbs"); + + for (filesystem::directory_iterator i = filesystem::directory_iterator (tdir); i != filesystem::directory_iterator(); ++i) { + + /* Aah, the sweet smell of progress */ +#if BOOST_FILESYSTEM_VERSION == 3 + string const l = filesystem::path(*i).leaf().generic_string(); +#else + string const l = i->leaf (); +#endif + + size_t const d = l.find (".tiff"); + if (d != string::npos) { + _state.thumbs.push_back (atoi (l.substr (0, d).c_str())); + } + } + + sort (_state.thumbs.begin(), _state.thumbs.end()); + + write_metadata (); + signal_changed (THUMBS); +} + +/** @return the number of thumbnail images that we have */ +int +Film::num_thumbs () const +{ + return _state.thumbs.size (); +} + +/** @param n A thumb index. + * @return The frame within the Film that it is for. + */ +int +Film::thumb_frame (int n) const +{ + return _state.thumb_frame (n); +} + +/** @param n A thumb index. + * @return The path to the thumb's image file. + */ +string +Film::thumb_file (int n) const +{ + return _state.thumb_file (n); +} + +/** @return The path to the directory to write JPEG2000 files to */ +string +Film::j2k_dir () const +{ + assert (format()); + + stringstream s; + + /* Start with j2c */ + s << "j2c/"; + + pair f = Filter::ffmpeg_strings (filters ()); + + /* Write stuff to specify the filter / post-processing settings that are in use, + so that we don't get confused about J2K files generated using different + settings. + */ + s << _state.format->nickname() + << "_" << _state.content + << "_" << left_crop() << "_" << right_crop() << "_" << top_crop() << "_" << bottom_crop() + << "_" << f.first << "_" << f.second + << "_" << _state.scaler->id(); + + /* Similarly for the A/B case */ + if (dcp_ab()) { + pair fa = Filter::ffmpeg_strings (Config::instance()->reference_filters()); + s << "/ab_" << Config::instance()->reference_scaler()->id() << "_" << fa.first << "_" << fa.second; + } + + return _state.dir (s.str ()); +} + +/** Handle a change to the Film's metadata */ +void +Film::signal_changed (Property p) +{ + _dirty = true; + Changed (p); +} + +/** Add suitable Jobs to the JobManager to create a DCP for this Film. + * @param true to transcode, false to use the WAV and J2K files that are already there. + */ +void +Film::make_dcp (bool transcode, int freq) +{ + string const t = name (); + if (t.find ("/") != string::npos) { + throw BadSettingError ("name", "cannot contain slashes"); + } + + { + stringstream s; + s << "DVD-o-matic " << DVDOMATIC_VERSION << " using " << dependency_version_summary (); + log()->log (s.str ()); + } + + { + char buffer[128]; + gethostname (buffer, sizeof (buffer)); + stringstream s; + s << "Starting to make a DCP on " << buffer; + log()->log (s.str ()); + } + + if (format() == 0) { + throw MissingSettingError ("format"); + } + + if (content().empty ()) { + throw MissingSettingError ("content"); + } + + if (dcp_content_type() == 0) { + throw MissingSettingError ("content type"); + } + + if (name().empty()) { + throw MissingSettingError ("name"); + } + + shared_ptr fs = state_copy (); + shared_ptr o (new Options (j2k_dir(), ".j2c", _state.dir ("wavs"))); + o->out_size = format()->dcp_size (); + if (dcp_frames() == 0) { + /* Decode the whole film, no blacking */ + o->num_frames = 0; + o->black_after = 0; + } else { + switch (dcp_trim_action()) { + case CUT: + /* Decode only part of the film, no blacking */ + o->num_frames = dcp_frames (); + o->black_after = 0; + break; + case BLACK_OUT: + /* Decode the whole film, but black some frames out */ + o->num_frames = 0; + o->black_after = dcp_frames (); + } + } + + o->decode_video_frequency = freq; + o->padding = format()->dcp_padding (); + o->ratio = format()->ratio_as_float (); + + if (transcode) { + if (_state.dcp_ab) { + JobManager::instance()->add (shared_ptr (new ABTranscodeJob (fs, o, log ()))); + } else { + JobManager::instance()->add (shared_ptr (new TranscodeJob (fs, o, log ()))); + } + } + + JobManager::instance()->add (shared_ptr (new MakeMXFJob (fs, o, log (), MakeMXFJob::VIDEO))); + if (audio_channels() > 0) { + JobManager::instance()->add (shared_ptr (new MakeMXFJob (fs, o, log (), MakeMXFJob::AUDIO))); + } + JobManager::instance()->add (shared_ptr (new MakeDCPJob (fs, o, log ()))); +} + +shared_ptr +Film::state_copy () const +{ + return shared_ptr (new FilmState (_state)); +} + +void +Film::copy_from_dvd_post_gui () +{ + const string dvd_dir = _state.dir ("dvd"); + + string largest_file; + uintmax_t largest_size = 0; + for (filesystem::directory_iterator i = filesystem::directory_iterator (dvd_dir); i != filesystem::directory_iterator(); ++i) { + uintmax_t const s = filesystem::file_size (*i); + if (s > largest_size) { + +#if BOOST_FILESYSTEM_VERSION == 3 + largest_file = filesystem::path(*i).generic_string(); +#else + largest_file = i->string (); +#endif + largest_size = s; + } + } + + set_content (largest_file); +} + +void +Film::examine_content () +{ + if (_examine_content_job) { + return; + } + + _examine_content_job.reset (new ExamineContentJob (state_copy (), log ())); + _examine_content_job->Finished.connect (sigc::mem_fun (*this, &Film::examine_content_post_gui)); + JobManager::instance()->add (_examine_content_job); +} + +void +Film::examine_content_post_gui () +{ + _state.length = _examine_content_job->last_video_frame (); + signal_changed (LENGTH); + + _examine_content_job.reset (); +} + +void +Film::set_scaler (Scaler const * s) +{ + _state.scaler = s; + signal_changed (SCALER); +} + +void +Film::set_frames_per_second (float f) +{ + _state.frames_per_second = f; + signal_changed (FRAMES_PER_SECOND); +} + +/** @return full paths to any audio files that this Film has */ +vector +Film::audio_files () const +{ + vector f; + for (filesystem::directory_iterator i = filesystem::directory_iterator (_state.dir("wavs")); i != filesystem::directory_iterator(); ++i) { + f.push_back (i->path().string ()); + } + + return f; +} + +ContentType +Film::content_type () const +{ + return _state.content_type (); +} + +void +Film::set_still_duration (int d) +{ + _state.still_duration = d; + signal_changed (STILL_DURATION); +} + +void +Film::send_dcp_to_tms () +{ + shared_ptr j (new SCPDCPJob (state_copy (), log ())); + JobManager::instance()->add (j); +} + +void +Film::copy_from_dvd () +{ + shared_ptr j (new CopyFromDVDJob (state_copy (), log ())); + j->Finished.connect (sigc::mem_fun (*this, &Film::copy_from_dvd_post_gui)); + JobManager::instance()->add (j); +} + diff --git a/src/lib/film.h b/src/lib/film.h new file mode 100644 index 000000000..f746da480 --- /dev/null +++ b/src/lib/film.h @@ -0,0 +1,275 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film.h + * @brief A representation of a piece of video (with sound), including naming, + * the source content file, and how it should be presented in a DCP. + */ + +#ifndef DVDOMATIC_FILM_H +#define DVDOMATIC_FILM_H + +#include +#include +#include +#include +#include +extern "C" { +#include +} +#include "dcp_content_type.h" +#include "film_state.h" + +class Format; +class Job; +class Filter; +class Log; +class ExamineContentJob; + +/** @class Film + * @brief A representation of a video with sound. + * + * A representation of a piece of video (with sound), including naming, + * the source content file, and how it should be presented in a DCP. + */ +class Film +{ +public: + Film (std::string d, bool must_exist = true); + Film (Film const &); + ~Film (); + + void write_metadata () const; + + /** @return complete path to directory containing the film metadata */ + std::string directory () const { + return _state.directory; + } + + std::string content () const; + ContentType content_type () const; + + /** @return name for DVD-o-matic */ + std::string name () const { + return _state.name; + } + + /** @return number of pixels to crop from the top of the original picture */ + int top_crop () const { + return _state.top_crop; + } + + /** @return number of pixels to crop from the bottom of the original picture */ + int bottom_crop () const { + return _state.bottom_crop; + } + + /** @return number of pixels to crop from the left-hand side of the original picture */ + int left_crop () const { + return _state.left_crop; + } + + /** @return number of pixels to crop from the right-hand side of the original picture */ + int right_crop () const { + return _state.right_crop; + } + + /** @return the format to present this film in (flat, scope, etc.) */ + Format const * format () const { + return _state.format; + } + + /** @return video filters that should be used when generating DCPs */ + std::vector filters () const { + return _state.filters; + } + + /** @return scaler algorithm to use */ + Scaler const * scaler () const { + return _state.scaler; + } + + /** @return number of frames to put in the DCP, or 0 for all */ + int dcp_frames () const { + return _state.dcp_frames; + } + + TrimAction dcp_trim_action () const { + return _state.dcp_trim_action; + } + + /** @return true to create an A/B comparison DCP, where the left half of the image + * is the video without any filters or post-processing, and the right half + * has the specified filters and post-processing. + */ + bool dcp_ab () const { + return _state.dcp_ab; + } + + float audio_gain () const { + return _state.audio_gain; + } + + int audio_delay () const { + return _state.audio_delay; + } + + int still_duration () const { + return _state.still_duration; + } + + void set_filters (std::vector const &); + + void set_scaler (Scaler const *); + + /** @return the type of content that this Film represents (feature, trailer etc.) */ + DCPContentType const * dcp_content_type () { + return _state.dcp_content_type; + } + + void set_dcp_frames (int); + void set_dcp_trim_action (TrimAction); + void set_dcp_ab (bool); + + void set_name (std::string); + void set_content (std::string); + void set_top_crop (int); + void set_bottom_crop (int); + void set_left_crop (int); + void set_right_crop (int); + void set_frames_per_second (float); + void set_format (Format const *); + void set_dcp_content_type (DCPContentType const *); + void set_audio_gain (float); + void set_audio_delay (int); + void set_still_duration (int); + + /** @return size, in pixels, of the source (ignoring cropping) */ + Size size () const { + return _state.size; + } + + /** @return length, in video frames */ + int length () const { + return _state.length; + } + + /** @return nnumber of video frames per second */ + float frames_per_second () const { + return _state.frames_per_second; + } + + /** @return number of audio channels */ + int audio_channels () const { + return _state.audio_channels; + } + + /** @return audio sample rate, in Hz */ + int audio_sample_rate () const { + return _state.audio_sample_rate; + } + + /** @return format of the audio samples */ + AVSampleFormat audio_sample_format () const { + return _state.audio_sample_format; + } + + std::string j2k_dir () const; + + std::vector audio_files () const; + + void update_thumbs_pre_gui (); + void update_thumbs_post_gui (); + int num_thumbs () const; + int thumb_frame (int) const; + std::string thumb_file (int) const; + + void copy_from_dvd_post_gui (); + void examine_content (); + void examine_content_post_gui (); + void send_dcp_to_tms (); + void copy_from_dvd (); + + /** @return true if our metadata has been modified since it was last saved */ + bool dirty () const { + return _dirty; + } + + void make_dcp (bool, int freq = 0); + + enum Property { + NAME, + CONTENT, + DCP_CONTENT_TYPE, + FORMAT, + LEFT_CROP, + RIGHT_CROP, + TOP_CROP, + BOTTOM_CROP, + FILTERS, + SCALER, + DCP_FRAMES, + DCP_TRIM_ACTION, + DCP_AB, + AUDIO_GAIN, + AUDIO_DELAY, + THUMBS, + SIZE, + LENGTH, + FRAMES_PER_SECOND, + AUDIO_CHANNELS, + AUDIO_SAMPLE_RATE, + STILL_DURATION + }; + + boost::shared_ptr state_copy () const; + + /** @return Logger. + * It is safe to call this from any thread. + */ + Log* log () const { + return _log; + } + + /** Emitted when some metadata property has changed */ + mutable sigc::signal1 Changed; + +private: + void read_metadata (); + std::string metadata_file () const; + void update_dimensions (); + void signal_changed (Property); + + /** The majority of our state. Kept in a separate object + * so that it can easily be copied for passing onto long-running + * jobs (which then have an unchanging set of parameters). + */ + FilmState _state; + + /** true if our metadata has changed since it was last written to disk */ + mutable bool _dirty; + + /** Log to write to */ + Log* _log; + + /** Any running ExamineContentJob, or 0 */ + boost::shared_ptr _examine_content_job; +}; + +#endif diff --git a/src/lib/film_state.cc b/src/lib/film_state.cc new file mode 100644 index 000000000..16378086c --- /dev/null +++ b/src/lib/film_state.cc @@ -0,0 +1,254 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_state.cc + * @brief The state of a Film. This is separate from Film so that + * state can easily be copied and kept around for reference + * by long-running jobs. This avoids the jobs getting confused + * by the user changing Film settings during their run. + */ + +#include +#include +#include +#include +#include +#include "film_state.h" +#include "scaler.h" +#include "filter.h" +#include "format.h" +#include "dcp_content_type.h" +#include "util.h" + +using namespace std; +using namespace boost; + +/** Write state to a stream. + * @param f Stream to write to. + */ +void +FilmState::write_metadata (ofstream& f) const +{ + /* User stuff */ + f << "name " << name << "\n"; + f << "content " << content << "\n"; + if (dcp_content_type) { + f << "dcp_content_type " << dcp_content_type->pretty_name () << "\n"; + } + f << "frames_per_second " << frames_per_second << "\n"; + if (format) { + f << "format " << format->as_metadata () << "\n"; + } + f << "left_crop " << left_crop << "\n"; + f << "right_crop " << right_crop << "\n"; + f << "top_crop " << top_crop << "\n"; + f << "bottom_crop " << bottom_crop << "\n"; + for (vector::const_iterator i = filters.begin(); i != filters.end(); ++i) { + f << "filter " << (*i)->id () << "\n"; + } + f << "scaler " << scaler->id () << "\n"; + f << "dcp_frames " << dcp_frames << "\n"; + + f << "dcp_trim_action "; + switch (dcp_trim_action) { + case CUT: + f << "cut\n"; + break; + case BLACK_OUT: + f << "black_out\n"; + break; + } + + f << "dcp_ab " << (dcp_ab ? "1" : "0") << "\n"; + f << "audio_gain " << audio_gain << "\n"; + f << "audio_delay " << audio_delay << "\n"; + f << "still_duration " << still_duration << "\n"; + + /* Cached stuff; this is information about our content; we could + look it up each time, but that's slow. + */ + for (vector::const_iterator i = thumbs.begin(); i != thumbs.end(); ++i) { + f << "thumb " << *i << "\n"; + } + f << "width " << size.width << "\n"; + f << "height " << size.height << "\n"; + f << "length " << length << "\n"; + f << "audio_channels " << audio_channels << "\n"; + f << "audio_sample_rate " << audio_sample_rate << "\n"; + f << "audio_sample_format " << audio_sample_format_to_string (audio_sample_format) << "\n"; +} + +/** Read state from a key / value pair. + * @param k Key. + * @param v Value. + */ +void +FilmState::read_metadata (string k, string v) +{ + /* User-specified stuff */ + if (k == "name") { + name = v; + } else if (k == "content") { + content = v; + } else if (k == "dcp_content_type") { + dcp_content_type = DCPContentType::from_pretty_name (v); + } else if (k == "frames_per_second") { + frames_per_second = atof (v.c_str ()); + } else if (k == "format") { + format = Format::from_metadata (v); + } else if (k == "left_crop") { + left_crop = atoi (v.c_str ()); + } else if (k == "right_crop") { + right_crop = atoi (v.c_str ()); + } else if (k == "top_crop") { + top_crop = atoi (v.c_str ()); + } else if (k == "bottom_crop") { + bottom_crop = atoi (v.c_str ()); + } else if (k == "filter") { + filters.push_back (Filter::from_id (v)); + } else if (k == "scaler") { + scaler = Scaler::from_id (v); + } else if (k == "dcp_frames") { + dcp_frames = atoi (v.c_str ()); + } else if (k == "dcp_trim_action") { + if (v == "cut") { + dcp_trim_action = CUT; + } else if (v == "black_out") { + dcp_trim_action = BLACK_OUT; + } + } else if (k == "dcp_ab") { + dcp_ab = (v == "1"); + } else if (k == "audio_gain") { + audio_gain = atof (v.c_str ()); + } else if (k == "audio_delay") { + audio_delay = atoi (v.c_str ()); + } else if (k == "still_duration") { + still_duration = atoi (v.c_str ()); + } + + /* Cached stuff */ + if (k == "thumb") { + int const n = atoi (v.c_str ()); + /* Only add it to the list if it still exists */ + if (filesystem::exists (thumb_file_for_frame (n))) { + thumbs.push_back (n); + } + } else if (k == "width") { + size.width = atoi (v.c_str ()); + } else if (k == "height") { + size.height = atoi (v.c_str ()); + } else if (k == "length") { + length = atof (v.c_str ()); + } else if (k == "audio_channels") { + audio_channels = atoi (v.c_str ()); + } else if (k == "audio_sample_rate") { + audio_sample_rate = atoi (v.c_str ()); + } else if (k == "audio_sample_format") { + audio_sample_format = audio_sample_format_from_string (v); + } +} + + +/** @param n A thumb index. + * @return The path to the thumb's image file. + */ +string +FilmState::thumb_file (int n) const +{ + return thumb_file_for_frame (thumb_frame (n)); +} + +/** @param n A frame index within the Film. + * @return The path to the thumb's image file for this frame; + * we assume that it exists. + */ +string +FilmState::thumb_file_for_frame (int n) const +{ + stringstream s; + s << dir ("thumbs") << "/"; + s.width (8); + s << setfill('0') << n << ".tiff"; + return s.str (); +} + + +/** @param n A thumb index. + * @return The frame within the Film that it is for. + */ +int +FilmState::thumb_frame (int n) const +{ + assert (n < int (thumbs.size ())); + return thumbs[n]; +} + +Size +FilmState::cropped_size (Size s) const +{ + s.width -= left_crop + right_crop; + s.height -= top_crop + bottom_crop; + return s; +} + +/** Given a directory name, return its full path within the Film's directory. + * The directory (and its parents) will be created if they do not exist. + */ +string +FilmState::dir (string d) const +{ + stringstream s; + s << directory << "/" << d; + filesystem::create_directories (s.str ()); + return s.str (); +} + +/** Given a file or directory name, return its full path within the Film's directory */ +string +FilmState::file (string f) const +{ + stringstream s; + s << directory << "/" << f; + return s.str (); +} + +string +FilmState::content_path () const +{ + if (filesystem::path(content).has_root_directory ()) { + return content; + } + + return file (content); +} + +ContentType +FilmState::content_type () const +{ +#if BOOST_FILESYSTEM_VERSION == 3 + string const ext = filesystem::path(content).extension().string(); +#else + string const ext = filesystem::path(content).extension(); +#endif + if (ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" || ext == ".png") { + return STILL; + } + + return VIDEO; +} diff --git a/src/lib/film_state.h b/src/lib/film_state.h new file mode 100644 index 000000000..52525ecd4 --- /dev/null +++ b/src/lib/film_state.h @@ -0,0 +1,155 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/film_state.h + * @brief The state of a Film. This is separate from Film so that + * state can easily be copied and kept around for reference + * by long-running jobs. This avoids the jobs getting confused + * by the user changing Film settings during their run. + */ + +#ifndef DVDOMATIC_FILM_STATE_H +#define DVDOMATIC_FILM_STATE_H + +extern "C" { +#include +#include +} +#include "scaler.h" +#include "util.h" +#include "trim_action.h" + +class Format; +class DCPContentType; +class Filter; + +/** @class FilmState + * @brief The state of a Film. + * + * This is separate from Film so that state can easily be copied and + * kept around for reference by long-running jobs. This avoids the + * jobs getting confused by the user changing Film settings during + * their run. + */ + +class FilmState +{ +public: + FilmState () + : dcp_content_type (0) + , frames_per_second (0) + , format (0) + , left_crop (0) + , right_crop (0) + , top_crop (0) + , bottom_crop (0) + , scaler (Scaler::from_id ("bicubic")) + , dcp_frames (0) + , dcp_trim_action (CUT) + , dcp_ab (false) + , audio_gain (0) + , audio_delay (0) + , still_duration (10) + , length (0) + , audio_channels (0) + , audio_sample_rate (0) + , audio_sample_format (AV_SAMPLE_FMT_NONE) + {} + + std::string file (std::string f) const; + std::string dir (std::string d) const; + + std::string content_path () const; + ContentType content_type () const; + + bool content_is_dvd () const; + + std::string thumb_file (int) const; + int thumb_frame (int) const; + + void write_metadata (std::ofstream &) const; + void read_metadata (std::string, std::string); + + Size cropped_size (Size) const; + + /** Complete path to directory containing the film metadata; + must not be relative. + */ + std::string directory; + /** Name for DVD-o-matic */ + std::string name; + /** File or directory containing content; may be relative to our directory + * or an absolute path. + */ + std::string content; + /** The type of content that this Film represents (feature, trailer etc.) */ + DCPContentType const * dcp_content_type; + /** Frames per second of the source */ + float frames_per_second; + /** The format to present this Film in (flat, scope, etc.) */ + Format const * format; + /** Number of pixels to crop from the left-hand side of the original picture */ + int left_crop; + /** Number of pixels to crop from the right-hand side of the original picture */ + int right_crop; + /** Number of pixels to crop from the top of the original picture */ + int top_crop; + /** Number of pixels to crop from the bottom of the original picture */ + int bottom_crop; + /** Video filters that should be used when generating DCPs */ + std::vector filters; + /** Scaler algorithm to use */ + Scaler const * scaler; + /** Number of frames to put in the DCP, or 0 for all */ + int dcp_frames; + + TrimAction dcp_trim_action; + + /** true to create an A/B comparison DCP, where the left half of the image + is the video without any filters or post-processing, and the right half + has the specified filters and post-processing. + */ + bool dcp_ab; + /** Gain to apply to audio in dB */ + float audio_gain; + /** Delay to apply to audio (positive moves audio later) in milliseconds */ + int audio_delay; + /** Duration to make still-sourced films (in seconds) */ + int still_duration; + + /* Data which is cached to speed things up */ + + /** Vector of frame indices for each of our `thumbnails */ + std::vector thumbs; + /** Size, in pixels, of the source (ignoring cropping) */ + Size size; + /** Length in frames */ + int length; + /** Number of audio channels */ + int audio_channels; + /** Sample rate of the audio, in Hz */ + int audio_sample_rate; + /** Format of the audio samples */ + AVSampleFormat audio_sample_format; + +private: + std::string thumb_file_for_frame (int) const; +}; + +#endif diff --git a/src/lib/filter.cc b/src/lib/filter.cc new file mode 100644 index 000000000..ab5a6316f --- /dev/null +++ b/src/lib/filter.cc @@ -0,0 +1,131 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter.cc + * @brief A class to describe one of FFmpeg's video or post-processing filters. + */ + +#include "filter.h" + +using namespace std; + +vector Filter::_filters; + +/** @param i Our id. + * @param n User-visible name. + * @param v String for a FFmpeg video filter descriptor, or "". + * @param p String for a FFmpeg post-processing descriptor, or "". + */ +Filter::Filter (string i, string n, string v, string p) + : _id (i) + , _name (n) + , _vf (v) + , _pp (p) +{ + +} + +/** @return All available filters */ +vector +Filter::all () +{ + return _filters; +} + + +/** Set up the static _filters vector; must be called before from_* + * methods are used. + */ +void +Filter::setup_filters () +{ + /* Note: "none" is a magic id name, so don't use it here */ + + _filters.push_back (new Filter ("pphb", "Horizontal deblocking filter", "", "hb")); + _filters.push_back (new Filter ("ppvb", "Vertical deblocking filter", "", "vb")); + _filters.push_back (new Filter ("ppha", "Horizontal deblocking filter A", "", "ha")); + _filters.push_back (new Filter ("ppva", "Vertical deblocking filter A", "", "va")); + _filters.push_back (new Filter ("pph1", "Experimental horizontal deblocking filter 1", "", "h1")); + _filters.push_back (new Filter ("pphv", "Experimental vertical deblocking filter 1", "", "v1")); + _filters.push_back (new Filter ("ppdr", "Deringing filter", "", "dr")); + _filters.push_back (new Filter ("pplb", "Linear blend deinterlacer", "", "lb")); + _filters.push_back (new Filter ("ppli", "Linear interpolating deinterlacer", "", "li")); + _filters.push_back (new Filter ("ppci", "Cubic interpolating deinterlacer", "", "ci")); + _filters.push_back (new Filter ("ppmd", "Median deinterlacer", "", "md")); + _filters.push_back (new Filter ("ppfd", "FFMPEG deinterlacer", "", "fd")); + _filters.push_back (new Filter ("ppl5", "FIR low-pass deinterlacer", "", "l5")); + _filters.push_back (new Filter ("mcdeint", "Motion compensating deinterlacer", "mcdeint", "")); + _filters.push_back (new Filter ("kerndeint", "Kernel deinterlacer", "kerndeint", "")); + _filters.push_back (new Filter ("pptn", "Temporal noise reducer", "", "tn")); + _filters.push_back (new Filter ("ppfq", "Force quantizer", "", "fq")); + _filters.push_back (new Filter ("gradfun", "Gradient debander", "gradfun", "")); + _filters.push_back (new Filter ("unsharp", "Unsharp mask and Gaussian blur", "unsharp", "")); + _filters.push_back (new Filter ("denoise3d", "3D denoiser", "denoise3d", "")); + _filters.push_back (new Filter ("hqdn3d", "High quality 3D denoiser", "hqdn3d", "")); + _filters.push_back (new Filter ("telecine", "Telecine filter", "telecine", "")); + _filters.push_back (new Filter ("ow", "Overcomplete wavelet denoiser", "mp=ow", "")); +} + +/** @param filters Set of filters. + * @return A pair; .first is a string to pass to FFmpeg for the video filters, + * .second is a string to pass for the post-processors. + */ +pair +Filter::ffmpeg_strings (vector const & filters) +{ + string vf; + string pp; + + for (vector::const_iterator i = filters.begin(); i != filters.end(); ++i) { + if (!(*i)->vf().empty ()) { + if (!vf.empty ()) { + vf += ","; + } + vf += (*i)->vf (); + } + + if (!(*i)->pp().empty ()) { + if (!pp.empty()) { + pp += ","; + } + pp += (*i)->pp (); + } + } + + return make_pair (vf, pp); +} + +/** @param d Our id. + * @return Corresponding Filter, or 0. + */ +Filter const * +Filter::from_id (string d) +{ + vector::iterator i = _filters.begin (); + while (i != _filters.end() && (*i)->id() != d) { + ++i; + } + + if (i == _filters.end ()) { + return 0; + } + + return *i; +} + diff --git a/src/lib/filter.h b/src/lib/filter.h new file mode 100644 index 000000000..20c55049c --- /dev/null +++ b/src/lib/filter.h @@ -0,0 +1,78 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/filter.h + * @brief A class to describe one of FFmpeg's video or post-processing filters. + */ + +#ifndef DVDOMATIC_FILTER_H +#define DVDOMATIC_FILTER_H + +#include +#include + +/** @class Filter + * @brief A class to describe one of FFmpeg's video or post-processing filters. + */ +class Filter +{ +public: + Filter (std::string, std::string, std::string, std::string); + + /** @return our id */ + std::string id () const { + return _id; + } + + /** @return user-visible name */ + std::string name () const { + return _name; + } + + /** @return string for a FFmpeg video filter descriptor */ + std::string vf () const { + return _vf; + } + + /** @return string for a FFmpeg post-processing descriptor */ + std::string pp () const { + return _pp; + } + + static std::vector all (); + static Filter const * from_id (std::string); + static void setup_filters (); + static std::pair ffmpeg_strings (std::vector const &); + +private: + + /** our id */ + std::string _id; + /** user-visible name */ + std::string _name; + /** string for a FFmpeg video filter descriptor */ + std::string _vf; + /** string for a FFmpeg post-processing descriptor */ + std::string _pp; + + /** all available filters */ + static std::vector _filters; +}; + +#endif diff --git a/src/lib/format.cc b/src/lib/format.cc new file mode 100644 index 000000000..dcc884412 --- /dev/null +++ b/src/lib/format.cc @@ -0,0 +1,189 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/format.cc + * @brief Class to describe a format (aspect ratio) that a Film should + * be shown in. + */ + +#include +#include +#include +#include +#include +#include "format.h" + +using namespace std; + +vector Format::_formats; + +/** @param r Ratio multiplied by 100 (e.g. 185) + * @param dcp Size (in pixels) of the images that we should put in a DCP. + * @param id ID (e.g. 185) + * @param n Nick name (e.g. Flat) + */ +Format::Format (int r, Size dcp, string id, string n) + : _ratio (r) + , _dcp_size (dcp) + , _id (id) + , _nickname (n) +{ + +} + +/** @return A name to be presented to the user */ +string +Format::name () const +{ + stringstream s; + if (!_nickname.empty ()) { + s << _nickname << " ("; + } + + s << setprecision(3) << (_ratio / 100.0) << ":1"; + + if (!_nickname.empty ()) { + s << ")"; + } + + return s.str (); +} + +/** @return Identifier for this format as metadata for a Film's metadata file */ +string +Format::as_metadata () const +{ + return _id; +} + +/** Fill our _formats vector with all available formats */ +void +Format::setup_formats () +{ + _formats.push_back (new Format (133, Size (1998, 1080), "133-in-flat", "4:3 within Flat")); + _formats.push_back (new Format (137, Size (1480, 1080), "137", "Academy")); + _formats.push_back (new Format (178, Size (1998, 1080), "178-in-flat", "16:9 within Flat")); + _formats.push_back (new Format (185, Size (1998, 1080), "185", "Flat")); + _formats.push_back (new Format (239, Size (2048, 858), "239", "Scope")); +} + +/** @param r Ratio multiplied by 100. + * @return Matching Format, or 0. + */ +Format const * +Format::from_ratio (int r) +{ + vector::iterator i = _formats.begin (); + while (i != _formats.end() && (*i)->ratio_as_integer() != r) { + ++i; + } + + if (i == _formats.end ()) { + return 0; + } + + return *i; +} + +/** @param n Nickname. + * @return Matching Format, or 0. + */ +Format const * +Format::from_nickname (string n) +{ + vector::iterator i = _formats.begin (); + while (i != _formats.end() && (*i)->nickname() != n) { + ++i; + } + + if (i == _formats.end ()) { + return 0; + } + + return *i; +} + +/** @param i Id. + * @return Matching Format, or 0. + */ +Format const * +Format::from_id (string i) +{ + vector::iterator j = _formats.begin (); + while (j != _formats.end() && (*j)->id() != i) { + ++j; + } + + if (j == _formats.end ()) { + return 0; + } + + return *j; +} + + +/** @param m Metadata, as returned from as_metadata(). + * @return Matching Format, or 0. + */ +Format const * +Format::from_metadata (string m) +{ + return from_id (m); +} + +/** @param f A Format. + * @return Index of f within our static list, or -1. + */ +int +Format::as_index (Format const * f) +{ + vector::size_type i = 0; + while (i < _formats.size() && _formats[i] != f) { + ++i; + } + + if (i == _formats.size ()) { + return -1; + } + + return i; +} + +/** @param i An index returned from as_index(). + * @return Corresponding Format. + */ +Format const * +Format::from_index (int i) +{ + assert (i >= 0 && i < int(_formats.size ())); + return _formats[i]; +} + +/** @return All available formats */ +vector +Format::all () +{ + return _formats; +} + +int +Format::dcp_padding () const +{ + return rint ((_dcp_size.width - (_dcp_size.height * _ratio / 100.0)) / 2.0); +} diff --git a/src/lib/format.h b/src/lib/format.h new file mode 100644 index 000000000..4b727b2e3 --- /dev/null +++ b/src/lib/format.h @@ -0,0 +1,101 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/format.h + * @brief Class to describe a format (aspect ratio) that a Film should + * be shown in. + */ + +#include +#include +#include "util.h" + +/** @class Format + * @brief Class to describe a format (aspect ratio) that a Film should + * be shown in. + */ +class Format +{ +public: + Format (int, Size, std::string, std::string); + + /** @return the aspect ratio multiplied by 100 + * (e.g. 239 for Cinemascope 2.39:1) + */ + int ratio_as_integer () const { + return _ratio; + } + + /** @return the ratio as a floating point number */ + float ratio_as_float () const { + return _ratio / 100.0; + } + + /** @return size in pixels of the images that we should + * put in a DCP for this ratio. This size will not correspond + * to the ratio when we are doing things like 16:9 in a Flat frame. + */ + Size dcp_size () const { + return _dcp_size; + } + + std::string id () const { + return _id; + } + + /** @return Full name to present to the user */ + std::string name () const; + + /** @return Nickname (e.g. Flat, Scope) */ + std::string nickname () const { + return _nickname; + } + + std::string as_metadata () const; + + int dcp_padding () const; + + static Format const * from_ratio (int); + static Format const * from_nickname (std::string n); + static Format const * from_metadata (std::string m); + static Format const * from_index (int i); + static Format const * from_id (std::string i); + static int as_index (Format const * f); + static std::vector all (); + static void setup_formats (); + +private: + + /** Ratio expressed as the actual ratio multiplied by 100 */ + int _ratio; + /** Size in pixels of the images that we should + * put in a DCP for this ratio. This size will not correspond + * to the ratio when we are doing things like 16:9 in a Flat frame. + */ + Size _dcp_size; + /** id for use in metadata */ + std::string _id; + /** nickname (e.g. Flat, Scope) */ + std::string _nickname; + + /** all available formats */ + static std::vector _formats; +}; + + diff --git a/src/lib/image.cc b/src/lib/image.cc new file mode 100644 index 000000000..7a9ac7dd5 --- /dev/null +++ b/src/lib/image.cc @@ -0,0 +1,392 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/image.cc + * @brief A set of classes to describe video images. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +} +#include "image.h" +#include "exceptions.h" +#include "scaler.h" + +#ifdef DEBUG_HASH +#include +#endif + +using namespace std; +using namespace boost; + +/** @param n Component index. + * @return Number of lines in the image for the given component. + */ +int +Image::lines (int n) const +{ + switch (_pixel_format) { + case PIX_FMT_YUV420P: + if (n == 0) { + return size().height; + } else { + return size().height / 2; + } + break; + case PIX_FMT_RGB24: + return size().height; + default: + assert (false); + } + + return 0; +} + +/** @return Number of components */ +int +Image::components () const +{ + switch (_pixel_format) { + case PIX_FMT_YUV420P: + return 3; + case PIX_FMT_RGB24: + return 1; + default: + assert (false); + } + + return 0; +} + +#ifdef DEBUG_HASH +/** Write a MD5 hash of the image's data to stdout. + * @param n Title to give the output. + */ +void +Image::hash (string n) const +{ + MHASH ht = mhash_init (MHASH_MD5); + if (ht == MHASH_FAILED) { + throw EncodeError ("could not create hash thread"); + } + + for (int i = 0; i < components(); ++i) { + mhash (ht, data()[i], line_size()[i] * lines(i)); + } + + uint8_t hash[16]; + mhash_deinit (ht, hash); + + printf ("%s: ", n.c_str ()); + for (int i = 0; i < int (mhash_get_block_size (MHASH_MD5)); ++i) { + printf ("%.2x", hash[i]); + } + printf ("\n"); +} +#endif + +/** Scale this image to a given size and convert it to RGB. + * @param out_size Output image size in pixels. + * @param scaler Scaler to use. + */ +shared_ptr +Image::scale_and_convert_to_rgb (Size out_size, int padding, Scaler const * scaler) const +{ + assert (scaler); + + Size content_size = out_size; + content_size.width -= (padding * 2); + + shared_ptr rgb (new RGBFrameImage (content_size)); + + struct SwsContext* scale_context = sws_getContext ( + size().width, size().height, pixel_format(), + content_size.width, content_size.height, PIX_FMT_RGB24, + scaler->ffmpeg_id (), 0, 0, 0 + ); + + /* Scale and convert to RGB from whatever its currently in (which may be RGB) */ + sws_scale ( + scale_context, + data(), line_size(), + 0, size().height, + rgb->data (), rgb->line_size () + ); + + /* Put the image in the right place in a black frame if are padding; this is + a bit grubby and expensive, but probably inconsequential in the great + scheme of things. + */ + if (padding > 0) { + shared_ptr padded_rgb (new RGBFrameImage (out_size)); + padded_rgb->make_black (); + + /* XXX: we are cheating a bit here; we know the frame is RGB so we can + make assumptions about its composition. + */ + uint8_t* p = padded_rgb->data()[0] + padding * 3; + uint8_t* q = rgb->data()[0]; + for (int j = 0; j < rgb->lines(0); ++j) { + memcpy (p, q, rgb->line_size()[0]); + p += padded_rgb->line_size()[0]; + q += rgb->line_size()[0]; + } + + rgb = padded_rgb; + } + + sws_freeContext (scale_context); + + return rgb; +} + +/** Run a FFmpeg post-process on this image and return the processed version. + * @param pp Flags for the required set of post processes. + * @return Post-processed image. + */ +shared_ptr +Image::post_process (string pp) const +{ + shared_ptr out (new PostProcessImage (PIX_FMT_YUV420P, size ())); + + pp_mode* mode = pp_get_mode_by_name_and_quality (pp.c_str (), PP_QUALITY_MAX); + pp_context* context = pp_get_context (size().width, size().height, PP_FORMAT_420 | PP_CPU_CAPS_MMX2); + + pp_postprocess ( + (const uint8_t **) data(), line_size(), + out->data(), out->line_size(), + size().width, size().height, + 0, 0, mode, context, 0 + ); + + pp_free_mode (mode); + pp_free_context (context); + + return out; +} + +void +Image::make_black () +{ + switch (_pixel_format) { + case PIX_FMT_YUV420P: + memset (data()[0], 0, lines(0) * line_size()[0]); + memset (data()[1], 0x80, lines(1) * line_size()[1]); + memset (data()[2], 0x80, lines(2) * line_size()[2]); + break; + + case PIX_FMT_RGB24: + memset (data()[0], 0, lines(0) * line_size()[0]); + break; + + default: + assert (false); + } +} + +/** Construct a SimpleImage of a given size and format, allocating memory + * as required. + * + * @param p Pixel format. + * @param s Size in pixels. + */ +SimpleImage::SimpleImage (PixelFormat p, Size s) + : Image (p) + , _size (s) +{ + _data = (uint8_t **) av_malloc (components() * sizeof (uint8_t *)); + _line_size = (int *) av_malloc (components() * sizeof (int)); + + for (int i = 0; i < components(); ++i) { + _data[i] = 0; + _line_size[i] = 0; + } +} + +/** Destroy a SimpleImage */ +SimpleImage::~SimpleImage () +{ + for (int i = 0; i < components(); ++i) { + av_free (_data[i]); + } + + av_free (_data); + av_free (_line_size); +} + +/** Set the size in bytes of each horizontal line of a given component. + * @param i Component index. + * @param s Size of line in bytes. + */ +void +SimpleImage::set_line_size (int i, int s) +{ + _line_size[i] = s; + _data[i] = (uint8_t *) av_malloc (s * lines (i)); +} + +uint8_t ** +SimpleImage::data () const +{ + return _data; +} + +int * +SimpleImage::line_size () const +{ + return _line_size; +} + +Size +SimpleImage::size () const +{ + return _size; +} + + +FilterBufferImage::FilterBufferImage (PixelFormat p, AVFilterBufferRef* b) + : Image (p) + , _buffer (b) +{ + +} + +FilterBufferImage::~FilterBufferImage () +{ + avfilter_unref_buffer (_buffer); +} + +uint8_t ** +FilterBufferImage::data () const +{ + return _buffer->data; +} + +int * +FilterBufferImage::line_size () const +{ + return _buffer->linesize; +} + +Size +FilterBufferImage::size () const +{ + return Size (_buffer->video->w, _buffer->video->h); +} + +/** XXX: this could be generalised to use any format, but I don't + * understand how avpicture_fill is supposed to be called with + * multi-planar images. + */ +RGBFrameImage::RGBFrameImage (Size s) + : Image (PIX_FMT_RGB24) + , _size (s) +{ + _frame = avcodec_alloc_frame (); + if (_frame == 0) { + throw EncodeError ("could not allocate frame"); + } + + _data = (uint8_t *) av_malloc (size().width * size().height * 3); + avpicture_fill ((AVPicture *) _frame, _data, PIX_FMT_RGB24, size().width, size().height); + _frame->width = size().width; + _frame->height = size().height; + _frame->format = PIX_FMT_RGB24; +} + +RGBFrameImage::~RGBFrameImage () +{ + av_free (_data); + av_free (_frame); +} + +uint8_t ** +RGBFrameImage::data () const +{ + return _frame->data; +} + +int * +RGBFrameImage::line_size () const +{ + return _frame->linesize; +} + +Size +RGBFrameImage::size () const +{ + return _size; +} + +PostProcessImage::PostProcessImage (PixelFormat p, Size s) + : Image (p) + , _size (s) +{ + _data = new uint8_t*[4]; + _line_size = new int[4]; + + for (int i = 0; i < 4; ++i) { + _data[i] = (uint8_t *) av_malloc (s.width * s.height); + _line_size[i] = s.width; + } +} + +PostProcessImage::~PostProcessImage () +{ + for (int i = 0; i < 4; ++i) { + av_free (_data[i]); + } + + delete[] _data; + delete[] _line_size; +} + +uint8_t ** +PostProcessImage::data () const +{ + return _data; +} + +int * +PostProcessImage::line_size () const +{ + return _line_size; +} + +Size +PostProcessImage::size () const +{ + return _size; +} diff --git a/src/lib/image.h b/src/lib/image.h new file mode 100644 index 000000000..97ab1d5ff --- /dev/null +++ b/src/lib/image.h @@ -0,0 +1,164 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/image.h + * @brief A set of classes to describe video images. + */ + +#ifndef DVDOMATIC_IMAGE_H +#define DVDOMATIC_IMAGE_H + +#include +#include +extern "C" { +#include +#include +} +#include "util.h" + +class Scaler; +class RGBFrameImage; +class PostProcessImage; + +/** @class Image + * @brief Parent class for wrappers of some image, in some format, that + * can present a set of components and a size in pixels. + * + * This class also has some conversion / processing methods. + * + * The main point of this class (and its subclasses) is to abstract + * details of FFmpeg's memory management and varying data formats. + */ +class Image +{ +public: + Image (PixelFormat p) + : _pixel_format (p) + {} + + virtual ~Image () {} + + /** @return Array of pointers to arrays of the component data */ + virtual uint8_t ** data () const = 0; + + /** @return Array of sizes of each line, in pixels */ + virtual int * line_size () const = 0; + + /** @return Size of the image, in pixels */ + virtual Size size () const = 0; + + int components () const; + int lines (int) const; + boost::shared_ptr scale_and_convert_to_rgb (Size, int, Scaler const *) const; + boost::shared_ptr post_process (std::string) const; + +#ifdef DEBUG_HASH + void hash (std::string) const; +#endif + + void make_black (); + + PixelFormat pixel_format () const { + return _pixel_format; + } + +private: + PixelFormat _pixel_format; ///< FFmpeg's way of describing the pixel format of this Image +}; + +/** @class FilterBufferImage + * @brief An Image that is held in an AVFilterBufferRef. + */ +class FilterBufferImage : public Image +{ +public: + FilterBufferImage (PixelFormat, AVFilterBufferRef *); + ~FilterBufferImage (); + + uint8_t ** data () const; + int * line_size () const; + Size size () const; + +private: + AVFilterBufferRef* _buffer; +}; + +/** @class SimpleImage + * @brief An Image for which memory is allocated using a `simple' av_malloc(). + */ +class SimpleImage : public Image +{ +public: + SimpleImage (PixelFormat, Size); + ~SimpleImage (); + + uint8_t ** data () const; + int * line_size () const; + Size size () const; + + void set_line_size (int, int); + +private: + Size _size; ///< size in pixels + uint8_t** _data; ///< array of pointers to components + int* _line_size; ///< array of widths of each line, in bytes +}; + +/** @class RGBFrameImage + * @brief An RGB image that is held within an AVFrame. + */ +class RGBFrameImage : public Image +{ +public: + RGBFrameImage (Size); + ~RGBFrameImage (); + + uint8_t ** data () const; + int * line_size () const; + Size size () const; + AVFrame * frame () const { + return _frame; + } + +private: + Size _size; + AVFrame* _frame; + uint8_t* _data; +}; + +/** @class PostProcessImage + * @brief An image that is the result of an FFmpeg post-processing run. + */ +class PostProcessImage : public Image +{ +public: + PostProcessImage (PixelFormat, Size); + ~PostProcessImage (); + + uint8_t ** data () const; + int * line_size () const; + Size size () const; + +private: + Size _size; + uint8_t** _data; + int* _line_size; +}; + +#endif diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc new file mode 100644 index 000000000..7cee01ec5 --- /dev/null +++ b/src/lib/imagemagick_decoder.cc @@ -0,0 +1,55 @@ +#include +#include +#include "imagemagick_decoder.h" +#include "film_state.h" +#include "image.h" + +using namespace std; + +ImageMagickDecoder::ImageMagickDecoder ( + boost::shared_ptr s, boost::shared_ptr o, Job* j, Log* l, bool minimal, bool ignore_length) + : Decoder (s, o, j, l, minimal, ignore_length) + , _done (false) +{ + _magick_image = new Magick::Image (_fs->content_path ()); +} + +Size +ImageMagickDecoder::native_size () const +{ + return Size (_magick_image->columns(), _magick_image->rows()); +} + +bool +ImageMagickDecoder::do_pass () +{ + if (_done) { + return true; + } + + Size size = native_size (); + RGBFrameImage image (size); + + uint8_t* p = image.data()[0]; + for (int y = 0; y < size.height; ++y) { + for (int x = 0; x < size.width; ++x) { + Magick::Color c = _magick_image->pixelColor (x, y); + *p++ = c.redQuantum() * 255 / MaxRGB; + *p++ = c.greenQuantum() * 255 / MaxRGB; + *p++ = c.blueQuantum() * 255 / MaxRGB; + } + + } + + process_video (image.frame ()); + + _done = true; + return false; +} + +PixelFormat +ImageMagickDecoder::pixel_format () const +{ + return PIX_FMT_RGB24; +} + diff --git a/src/lib/imagemagick_decoder.h b/src/lib/imagemagick_decoder.h new file mode 100644 index 000000000..707e6cacd --- /dev/null +++ b/src/lib/imagemagick_decoder.h @@ -0,0 +1,63 @@ +#include "decoder.h" + +namespace Magick { + class Image; +} + +class ImageMagickDecoder : public Decoder +{ +public: + ImageMagickDecoder (boost::shared_ptr, boost::shared_ptr, Job *, Log *, bool, bool); + + int length_in_frames () const { + return 1; + } + + float frames_per_second () const { + return static_frames_per_second (); + } + + Size native_size () const; + + int audio_channels () const { + return 0; + } + + int audio_sample_rate () const { + return 0; + } + + AVSampleFormat audio_sample_format () const { + return AV_SAMPLE_FMT_NONE; + } + + static float static_frames_per_second () { + return 24; + } + +protected: + bool do_pass (); + PixelFormat pixel_format () const; + + int time_base_numerator () const { + return 0; + } + + int time_base_denominator () const { + return 0; + } + + int sample_aspect_ratio_numerator () const { + /* XXX */ + return 1; + } + + int sample_aspect_ratio_denominator () const { + /* XXX */ + return 1; + } + +private: + Magick::Image* _magick_image; + bool _done; +}; diff --git a/src/lib/j2k_still_encoder.cc b/src/lib/j2k_still_encoder.cc new file mode 100644 index 000000000..f68bc5890 --- /dev/null +++ b/src/lib/j2k_still_encoder.cc @@ -0,0 +1,73 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/j2k_wav_encoder.cc + * @brief An encoder which writes JPEG2000 and WAV files. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "j2k_still_encoder.h" +#include "config.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "dcp_video_frame.h" +#include "filter.h" +#include "log.h" +#include "imagemagick_decoder.h" + +using namespace std; +using namespace boost; + +J2KStillEncoder::J2KStillEncoder (shared_ptr s, shared_ptr o, Log* l) + : Encoder (s, o, l) +{ + +} + +void +J2KStillEncoder::process_video (shared_ptr yuv, int frame) +{ + pair const s = Filter::ffmpeg_strings (_fs->filters); + DCPVideoFrame* f = new DCPVideoFrame ( + yuv, _opt->out_size, _opt->padding, _fs->scaler, 0, _fs->frames_per_second, s.second, + Config::instance()->colour_lut_index(), Config::instance()->j2k_bandwidth(), + _log + ); + + if (!boost::filesystem::exists (_opt->frame_out_path (1, false))) { + boost::shared_ptr e = f->encode_locally (); + e->write (_opt, 1); + } + + string const real = _opt->frame_out_path (1, false); + for (int i = 2; i <= (_fs->still_duration * ImageMagickDecoder::static_frames_per_second()); ++i) { + if (!boost::filesystem::exists (_opt->frame_out_path (i, false))) { + string const link = _opt->frame_out_path (i, false); + symlink (real.c_str(), link.c_str()); + } + frame_done (); + } +} diff --git a/src/lib/j2k_still_encoder.h b/src/lib/j2k_still_encoder.h new file mode 100644 index 000000000..d4d68724e --- /dev/null +++ b/src/lib/j2k_still_encoder.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/j2k_wav_encoder.h + * @brief An encoder which writes JPEG2000 and WAV files. + */ + +#include +#include +#include "encoder.h" + +class Image; +class Log; + +/** @class J2KStillEncoder + * @brief An encoder which writes repeated JPEG2000 files from a single decoded input. + */ +class J2KStillEncoder : public Encoder +{ +public: + J2KStillEncoder (boost::shared_ptr, boost::shared_ptr, Log *); + + void process_begin () {} + void process_video (boost::shared_ptr, int); + void process_audio (uint8_t *, int) {} + void process_end () {} +}; diff --git a/src/lib/j2k_wav_encoder.cc b/src/lib/j2k_wav_encoder.cc new file mode 100644 index 000000000..e6a1b285e --- /dev/null +++ b/src/lib/j2k_wav_encoder.cc @@ -0,0 +1,289 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/j2k_wav_encoder.cc + * @brief An encoder which writes JPEG2000 and WAV files. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "j2k_wav_encoder.h" +#include "config.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "dcp_video_frame.h" +#include "server.h" +#include "filter.h" +#include "log.h" + +using namespace std; +using namespace boost; + +J2KWAVEncoder::J2KWAVEncoder (shared_ptr s, shared_ptr o, Log* l) + : Encoder (s, o, l) + , _deinterleave_buffer_size (8192) + , _deinterleave_buffer (0) + , _process_end (false) +{ + /* Create sound output files with .tmp suffixes; we will rename + them if and when we complete. + */ + for (int i = 0; i < _fs->audio_channels; ++i) { + SF_INFO sf_info; + sf_info.samplerate = _fs->audio_sample_rate; + /* We write mono files */ + sf_info.channels = 1; + sf_info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_24; + SNDFILE* f = sf_open (_opt->multichannel_audio_out_path (i, true).c_str (), SFM_WRITE, &sf_info); + if (f == 0) { + throw CreateFileError (_opt->multichannel_audio_out_path (i, true)); + } + _sound_files.push_back (f); + } + + /* Create buffer for deinterleaving audio */ + _deinterleave_buffer = new uint8_t[_deinterleave_buffer_size]; +} + +J2KWAVEncoder::~J2KWAVEncoder () +{ + terminate_worker_threads (); + delete[] _deinterleave_buffer; + close_sound_files (); +} + +void +J2KWAVEncoder::terminate_worker_threads () +{ + boost::mutex::scoped_lock lock (_worker_mutex); + _process_end = true; + _worker_condition.notify_all (); + lock.unlock (); + + for (list::iterator i = _worker_threads.begin(); i != _worker_threads.end(); ++i) { + (*i)->join (); + delete *i; + } +} + +void +J2KWAVEncoder::close_sound_files () +{ + for (vector::iterator i = _sound_files.begin(); i != _sound_files.end(); ++i) { + sf_close (*i); + } + + _sound_files.clear (); +} + +void +J2KWAVEncoder::process_video (shared_ptr yuv, int frame) +{ + boost::mutex::scoped_lock lock (_worker_mutex); + + /* Wait until the queue has gone down a bit */ + while (_queue.size() >= _worker_threads.size() * 2 && !_process_end) { + _worker_condition.wait (lock); + } + + if (_process_end) { + return; + } + + /* Only do the processing if we don't already have a file for this frame */ + if (!boost::filesystem::exists (_opt->frame_out_path (frame, false))) { + pair const s = Filter::ffmpeg_strings (_fs->filters); + _queue.push_back (boost::shared_ptr ( + new DCPVideoFrame ( + yuv, _opt->out_size, _opt->padding, _fs->scaler, frame, _fs->frames_per_second, s.second, + Config::instance()->colour_lut_index (), Config::instance()->j2k_bandwidth (), + _log + ) + )); + + _worker_condition.notify_all (); + } +} + +void +J2KWAVEncoder::encoder_thread (Server* server) +{ + /* Number of seconds that we currently wait between attempts + to connect to the server; not relevant for localhost + encodings. + */ + int remote_backoff = 0; + + while (1) { + boost::mutex::scoped_lock lock (_worker_mutex); + while (_queue.empty () && !_process_end) { + _worker_condition.wait (lock); + } + + if (_process_end) { + return; + } + + boost::shared_ptr vf = _queue.front (); + _queue.pop_front (); + + lock.unlock (); + + shared_ptr encoded; + + if (server) { + try { + encoded = vf->encode_remotely (server); + + if (remote_backoff > 0) { + stringstream s; + s << server->host_name() << " was lost, but now she is found; removing backoff"; + _log->log (s.str ()); + } + + /* This job succeeded, so remove any backoff */ + remote_backoff = 0; + + } catch (std::exception& e) { + if (remote_backoff < 60) { + /* back off more */ + remote_backoff += 10; + } + stringstream s; + s << "Remote encode on " << server->host_name() << " failed (" << e.what() << "); thread sleeping for " << remote_backoff << "s."; + _log->log (s.str ()); + } + + } else { + try { + encoded = vf->encode_locally (); + } catch (std::exception& e) { + stringstream s; + s << "Local encode failed " << e.what() << "."; + _log->log (s.str ()); + } + } + + if (encoded) { + encoded->write (_opt, vf->frame ()); + frame_done (); + } else { + lock.lock (); + _queue.push_front (vf); + lock.unlock (); + } + + if (remote_backoff > 0) { + sleep (remote_backoff); + } + + lock.lock (); + _worker_condition.notify_all (); + } +} + +void +J2KWAVEncoder::process_begin () +{ + for (int i = 0; i < Config::instance()->num_local_encoding_threads (); ++i) { + _worker_threads.push_back (new boost::thread (boost::bind (&J2KWAVEncoder::encoder_thread, this, (Server *) 0))); + } + + vector servers = Config::instance()->servers (); + + for (vector::iterator i = servers.begin(); i != servers.end(); ++i) { + for (int j = 0; j < (*i)->threads (); ++j) { + _worker_threads.push_back (new boost::thread (boost::bind (&J2KWAVEncoder::encoder_thread, this, *i))); + } + } +} + +void +J2KWAVEncoder::process_end () +{ + boost::mutex::scoped_lock lock (_worker_mutex); + + /* Keep waking workers until the queue is empty */ + while (!_queue.empty ()) { + _worker_condition.notify_all (); + _worker_condition.wait (lock); + } + + lock.unlock (); + + terminate_worker_threads (); + close_sound_files (); + + /* Rename .wav.tmp files to .wav */ + for (int i = 0; i < _fs->audio_channels; ++i) { + if (boost::filesystem::exists (_opt->multichannel_audio_out_path (i, false))) { + boost::filesystem::remove (_opt->multichannel_audio_out_path (i, false)); + } + boost::filesystem::rename (_opt->multichannel_audio_out_path (i, true), _opt->multichannel_audio_out_path (i, false)); + } +} + +void +J2KWAVEncoder::process_audio (uint8_t* data, int data_size) +{ + /* Size of a sample in bytes */ + int const sample_size = 2; + + /* XXX: we are assuming that sample_size is right, the _deinterleave_buffer_size is a multiple + of the sample size and that data_size is a multiple of _fs->audio_channels * sample_size. + */ + + /* XXX: this code is very tricksy and it must be possible to make it simpler ... */ + + /* Number of bytes left to read this time */ + int remaining = data_size; + /* Our position in the output buffers, in bytes */ + int position = 0; + while (remaining > 0) { + /* How many bytes of the deinterleaved data to do this time */ + int this_time = min (remaining / _fs->audio_channels, _deinterleave_buffer_size); + for (int i = 0; i < _fs->audio_channels; ++i) { + for (int j = 0; j < this_time; j += sample_size) { + for (int k = 0; k < sample_size; ++k) { + int const to = j + k; + int const from = position + (i * sample_size) + (j * _fs->audio_channels) + k; + _deinterleave_buffer[to] = data[from]; + } + } + + switch (_fs->audio_sample_format) { + case AV_SAMPLE_FMT_S16: + sf_write_short (_sound_files[i], (const short *) _deinterleave_buffer, this_time / sample_size); + break; + default: + throw DecodeError ("unknown audio sample format"); + } + } + + position += this_time; + remaining -= this_time * _fs->audio_channels; + } +} diff --git a/src/lib/j2k_wav_encoder.h b/src/lib/j2k_wav_encoder.h new file mode 100644 index 000000000..c8485b0bc --- /dev/null +++ b/src/lib/j2k_wav_encoder.h @@ -0,0 +1,65 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/j2k_wav_encoder.h + * @brief An encoder which writes JPEG2000 and WAV files. + */ + +#include +#include +#include +#include +#include +#include "encoder.h" + +class Server; +class DCPVideoFrame; +class Image; +class Log; + +/** @class J2KWAVEncoder + * @brief An encoder which writes JPEG2000 and WAV files. + */ +class J2KWAVEncoder : public Encoder +{ +public: + J2KWAVEncoder (boost::shared_ptr, boost::shared_ptr, Log *); + ~J2KWAVEncoder (); + + void process_begin (); + void process_video (boost::shared_ptr, int); + void process_audio (uint8_t *, int); + void process_end (); + +private: + + void encoder_thread (Server *); + void close_sound_files (); + void terminate_worker_threads (); + + std::vector _sound_files; + int _deinterleave_buffer_size; + uint8_t* _deinterleave_buffer; + + bool _process_end; + std::list > _queue; + std::list _worker_threads; + mutable boost::mutex _worker_mutex; + boost::condition _worker_condition; +}; diff --git a/src/lib/job.cc b/src/lib/job.cc new file mode 100644 index 000000000..399b235d9 --- /dev/null +++ b/src/lib/job.cc @@ -0,0 +1,242 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job.cc + * @brief A parent class to represent long-running tasks which are run in their own thread. + */ + +#include +#include "job.h" +#include "util.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState for the film that we are operating on. + * @param o Options. + * @param l A log that we can write to. + */ +Job::Job (shared_ptr s, shared_ptr o, Log* l) + : _fs (s) + , _opt (o) + , _log (l) + , _state (NEW) + , _start_time (0) + , _progress_unknown (false) +{ + assert (_log); + + descend (1); +} + +/** Start the job in a separate thread, returning immediately */ +void +Job::start () +{ + set_state (RUNNING); + _start_time = time (0); + boost::thread (boost::bind (&Job::run_wrapper, this)); +} + +/** A wrapper for the ::run() method to catch exceptions */ +void +Job::run_wrapper () +{ + try { + + run (); + + } catch (std::exception& e) { + + set_progress (1); + set_state (FINISHED_ERROR); + set_error (e.what ()); + + } +} + +/** @return true if the job is running */ +bool +Job::running () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == RUNNING; +} + +/** @return true if the job has finished (either successfully or unsuccessfully) */ +bool +Job::finished () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == FINISHED_OK || _state == FINISHED_ERROR; +} + +/** @return true if the job has finished successfully */ +bool +Job::finished_ok () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == FINISHED_OK; +} + +/** @return true if the job has finished unsuccessfully */ +bool +Job::finished_in_error () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == FINISHED_ERROR; +} + +/** Set the state of this job. + * @param s New state. + */ +void +Job::set_state (State s) +{ + boost::mutex::scoped_lock lm (_state_mutex); + _state = s; +} + +/** A hack to work around our lack of cross-thread + * signalling; this emits Finished, and listeners + * assume that it will be emitted in the GUI thread, + * so this method must be called from the GUI thread. + */ +void +Job::emit_finished () +{ + Finished (); +} + +/** @return Time (in seconds) that this job has been running */ +int +Job::elapsed_time () const +{ + if (_start_time == 0) { + return 0; + } + + return time (0) - _start_time; +} + +/** Set the progress of the current part of the job. + * @param p Progress (from 0 to 1) + */ +void +Job::set_progress (float p) +{ + boost::mutex::scoped_lock lm (_progress_mutex); + _stack.back().normalised = p; +} + +/** @return fractional overall progress, or -1 if not known */ +float +Job::overall_progress () const +{ + boost::mutex::scoped_lock lm (_progress_mutex); + if (_progress_unknown) { + return -1; + } + + float overall = 0; + float factor = 1; + for (list::const_iterator i = _stack.begin(); i != _stack.end(); ++i) { + factor *= i->allocation; + overall += i->normalised * factor; + } + + if (overall > 1) { + overall = 1; + } + + return overall; +} + +/** Ascend up one level in terms of progress reporting; see descend() */ +void +Job::ascend () +{ + boost::mutex::scoped_lock lm (_progress_mutex); + + assert (!_stack.empty ()); + float const a = _stack.back().allocation; + _stack.pop_back (); + _stack.back().normalised += a; +} + +/** Descend down one level in terms of progress reporting; e.g. if + * there is a task which is split up into N subtasks, each of which + * report their progress from 0 to 100%, call descend() before executing + * each subtask, and ascend() afterwards to ensure that overall progress + * is reported correctly. + * + * @param a Fraction (from 0 to 1) of the current task to allocate to the subtask. + */ +void +Job::descend (float a) +{ + boost::mutex::scoped_lock lm (_progress_mutex); + _stack.push_back (Level (a)); +} + +/** @return Any error string that the job has generated */ +string +Job::error () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _error; +} + +/** Set the current error string. + * @param e New error string. + */ +void +Job::set_error (string e) +{ + boost::mutex::scoped_lock lm (_state_mutex); + _error = e; +} + +/** Set that this job's progress will always be unknown */ +void +Job::set_progress_unknown () +{ + boost::mutex::scoped_lock lm (_progress_mutex); + _progress_unknown = true; +} + +string +Job::status () const +{ + float const p = overall_progress (); + int const t = elapsed_time (); + + stringstream s; + if (!finished () && p >= 0 && t > 10) { + s << rint (p * 100) << "%; about " << seconds_to_approximate_hms (t / p - t) << " remaining"; + } else if (!finished () && t <= 10) { + s << rint (p * 100) << "%"; + } else if (finished_ok ()) { + s << "OK (ran for " << seconds_to_hms (t) << ")"; + } else if (finished_in_error ()) { + s << "Error (" << error() << ")"; + } + + return s.str (); +} diff --git a/src/lib/job.h b/src/lib/job.h new file mode 100644 index 000000000..2a77f78f7 --- /dev/null +++ b/src/lib/job.h @@ -0,0 +1,115 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job.h + * @brief A parent class to represent long-running tasks which are run in their own thread. + */ + +#ifndef DVDOMATIC_JOB_H +#define DVDOMATIC_JOB_H + +#include +#include +#include + +class Log; +class FilmState; +class Options; + +/** @class Job + * @brief A parent class to represent long-running tasks which are run in their own thread. + */ +class Job +{ +public: + Job (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + /** @return user-readable name of this job */ + virtual std::string name () const = 0; + /** Run this job in the current thread. */ + virtual void run () = 0; + + void start (); + + bool running () const; + bool finished () const; + bool finished_ok () const; + bool finished_in_error () const; + + std::string error () const; + + int elapsed_time () const; + virtual std::string status () const; + + void set_progress_unknown (); + void set_progress (float); + void ascend (); + void descend (float); + float overall_progress () const; + + void emit_finished (); + + /** Emitted from the GUI thread */ + sigc::signal0 Finished; + +protected: + + enum State { + NEW, ///< the job hasn't been started yet + RUNNING, ///< the job is running + FINISHED_OK, ///< the job has finished successfully + FINISHED_ERROR ///< the job has finished in error + }; + + void set_state (State); + void set_error (std::string e); + + boost::shared_ptr _fs; + boost::shared_ptr _opt; + + /** A log that this job can write to */ + Log* _log; + +private: + + void run_wrapper (); + + /** mutex for _state and _error */ + mutable boost::mutex _state_mutex; + State _state; + std::string _error; + + time_t _start_time; + + mutable boost::mutex _progress_mutex; + + struct Level { + Level (float a) : allocation (a), normalised (0) {} + + float allocation; + float normalised; + }; + + std::list _stack; + + /** true if this job's progress will always be unknown */ + bool _progress_unknown; +}; + +#endif diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc new file mode 100644 index 000000000..dd7c62c31 --- /dev/null +++ b/src/lib/job_manager.cc @@ -0,0 +1,101 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job_manager.cc + * @brief A simple scheduler for jobs. + */ + +#include +#include +#include "job_manager.h" +#include "job.h" + +using namespace std; +using namespace boost; + +JobManager* JobManager::_instance = 0; + +JobManager::JobManager () +{ + boost::thread (boost::bind (&JobManager::scheduler, this)); +} + +void +JobManager::add (shared_ptr j) +{ + boost::mutex::scoped_lock lm (_mutex); + + _jobs.push_back (j); +} + +list > +JobManager::get () const +{ + boost::mutex::scoped_lock lm (_mutex); + + return _jobs; +} + +bool +JobManager::work_to_do () const +{ + boost::mutex::scoped_lock lm (_mutex); + list >::const_iterator i = _jobs.begin(); + while (i != _jobs.end() && (*i)->finished()) { + ++i; + } + + return i != _jobs.end (); +} + +void +JobManager::scheduler () +{ + while (1) { + { + boost::mutex::scoped_lock lm (_mutex); + int running = 0; + shared_ptr first_new; + for (list >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) { + if ((*i)->running ()) { + ++running; + } else if (!(*i)->finished () && first_new == 0) { + first_new = *i; + } + + if (running == 0 && first_new) { + first_new->start (); + break; + } + } + } + + sleep (1); + } +} + +JobManager * +JobManager::instance () +{ + if (_instance == 0) { + _instance = new JobManager (); + } + + return _instance; +} diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h new file mode 100644 index 000000000..f2f5e0057 --- /dev/null +++ b/src/lib/job_manager.h @@ -0,0 +1,54 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/job_manager.h + * @brief A simple scheduler for jobs. + */ + +#include +#include + +class Job; + +/** @class JobManager + * @brief A simple scheduler for jobs. + * + * JobManager simply keeps a list of pending jobs, and assumes that all the jobs + * are sufficiently CPU intensive that there is no point running them in parallel; + * so jobs are just run one after the other. + */ +class JobManager +{ +public: + + void add (boost::shared_ptr); + std::list > get () const; + bool work_to_do () const; + + static JobManager* instance (); + +private: + JobManager (); + void scheduler (); + + mutable boost::mutex _mutex; + std::list > _jobs; + + static JobManager* _instance; +}; diff --git a/src/lib/log.cc b/src/lib/log.cc new file mode 100644 index 000000000..accf3694d --- /dev/null +++ b/src/lib/log.cc @@ -0,0 +1,63 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/log.cc + * @brief A very simple logging class. + */ + +#include +#include +#include "log.h" + +using namespace std; + +/** @param f Filename to write log to */ +Log::Log (string f) + : _file (f) + , _level (VERBOSE) +{ + +} + +/** @param n String to log */ +void +Log::log (string m, Level l) +{ + boost::mutex::scoped_lock lm (_mutex); + + if (l > _level) { + return; + } + + ofstream f (_file.c_str(), fstream::app); + + time_t t; + time (&t); + string a = ctime (&t); + + f << a.substr (0, a.length() - 1) << ": " << m << "\n"; +} + +void +Log::set_level (Level l) +{ + boost::mutex::scoped_lock lm (_mutex); + _level = l; +} + diff --git a/src/lib/log.h b/src/lib/log.h new file mode 100644 index 000000000..d4de8ebde --- /dev/null +++ b/src/lib/log.h @@ -0,0 +1,55 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/log.h + * @brief A very simple logging class. + */ + +#include +#include + +/** @class Log + * @brief A very simple logging class. + * + * This class simply accepts log messages and writes them to a file. + * Its single nod to complexity is that it has a mutex to prevent + * multi-thread logging from clashing. + */ +class Log +{ +public: + Log (std::string f); + + enum Level { + STANDARD = 0, + VERBOSE = 1 + }; + + void log (std::string m, Level l = STANDARD); + + void set_level (Level l); + +private: + /** mutex to prevent simultaneous writes to the file */ + boost::mutex _mutex; + /** filename to write to */ + std::string _file; + /** level above which to ignore log messages */ + Level _level; +}; diff --git a/src/lib/lut.h b/src/lib/lut.h new file mode 100644 index 000000000..26888a24a --- /dev/null +++ b/src/lib/lut.h @@ -0,0 +1,51 @@ +/* + Taken from OpenDCP: Builds Digital Cinema Packages + Copyright (c) 2010-2011 Terrence Meiczinger, All Rights Reserved + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** @file src/lut.h + * @brief Look-up tables for colour conversions (from OpenDCP) + */ + +#define BIT_DEPTH 12 +#define BIT_PRECISION 16 +#define COLOR_DEPTH (4095) +#define DCI_LUT_SIZE ((COLOR_DEPTH + 1) * BIT_PRECISION) +#define DCI_GAMMA (2.6) +#define DCI_DEGAMMA (1/DCI_GAMMA) +#define DCI_COEFFICENT (48.0/52.37) + +enum COLOR_PROFILE_ENUM { + CP_SRGB = 0, + CP_REC709, + CP_DC28, + CP_MAX +}; + +enum LUT_IN_ENUM { + LI_SRGB = 0, + LI_REC709, + LI_MAX +}; + +enum LUT_OUT_ENUM { + LO_DCI = 0, + LO_MAX +}; + +extern float color_matrix[3][3][3]; +extern float lut_in[LI_MAX][4095+1]; +extern int lut_out[1][DCI_LUT_SIZE]; diff --git a/src/lib/make_dcp_job.cc b/src/lib/make_dcp_job.cc new file mode 100644 index 000000000..81deb835d --- /dev/null +++ b/src/lib/make_dcp_job.cc @@ -0,0 +1,94 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/make_dcp_job.cc + * @brief A job to create DCPs. + */ + +#include +extern "C" { +#include +} +#include "make_dcp_job.h" +#include "film_state.h" +#include "dcp_content_type.h" +#include "exceptions.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState of the Film we are making the DCP for. + * @param o Options. + * @param l Log. + */ +MakeDCPJob::MakeDCPJob (shared_ptr s, shared_ptr o, Log* l) + : ShellCommandJob (s, o, l) +{ + +} + +string +MakeDCPJob::name () const +{ + stringstream s; + s << "Make DCP for " << _fs->name; + return s.str (); +} + +void +MakeDCPJob::run () +{ + set_progress_unknown (); + + string const dcp_path = _fs->dir (_fs->name); + + /* Check that we have our prerequisites */ + + if (!filesystem::exists (filesystem::path (_fs->file ("video.mxf")))) { + throw EncodeError ("missing video.mxf"); + } + + bool const have_audio = filesystem::exists (filesystem::path (_fs->file ("audio.mxf"))); + + /* Remove any old DCP */ + filesystem::remove_all (dcp_path); + + /* Re-make the DCP directory */ + _fs->dir (_fs->name); + + stringstream c; + c << "cd \"" << dcp_path << "\" && " + << " opendcp_xml -d -a " << _fs->name + << " -t \"" << _fs->name << "\"" + << " -k " << _fs->dcp_content_type->opendcp_name() + << " --reel \"" << _fs->file ("video.mxf") << "\""; + + if (have_audio) { + c << " \"" << _fs->file ("audio.mxf") << "\""; + } + + command (c.str ()); + + filesystem::rename (filesystem::path (_fs->file ("video.mxf")), filesystem::path (dcp_path + "/video.mxf")); + if (have_audio) { + filesystem::rename (filesystem::path (_fs->file ("audio.mxf")), filesystem::path (dcp_path + "/audio.mxf")); + } + + set_progress (1); +} diff --git a/src/lib/make_dcp_job.h b/src/lib/make_dcp_job.h new file mode 100644 index 000000000..4e3193572 --- /dev/null +++ b/src/lib/make_dcp_job.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/make_dcp_job.h + * @brief A job to create DCPs. + */ + +#include "shell_command_job.h" + +/** @class MakeDCPJob + * @brief A job to create DCPs + */ +class MakeDCPJob : public ShellCommandJob +{ +public: + MakeDCPJob (boost::shared_ptr, boost::shared_ptr, Log *); + + std::string name () const; + void run (); +}; + diff --git a/src/lib/make_mxf_job.cc b/src/lib/make_mxf_job.cc new file mode 100644 index 000000000..6b0c1a406 --- /dev/null +++ b/src/lib/make_mxf_job.cc @@ -0,0 +1,81 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/make_mxf_job.cc + * @brief A job that creates a MXF file from some data. + */ + +#include +#include "make_mxf_job.h" +#include "film.h" +#include "film_state.h" +#include "options.h" + +using namespace std; +using namespace boost; + +/** @class MakeMXFJob + * @brief A job that creates a MXF file from some data. + */ + +MakeMXFJob::MakeMXFJob (shared_ptr s, shared_ptr o, Log* l, Type t) + : ShellCommandJob (s, o, l) + , _type (t) +{ + +} + +string +MakeMXFJob::name () const +{ + stringstream s; + switch (_type) { + case VIDEO: + s << "Make video MXF for " << _fs->name; + break; + case AUDIO: + s << "Make audio MXF for " << _fs->name; + break; + } + + return s.str (); +} + +void +MakeMXFJob::run () +{ + set_progress_unknown (); + + /* We round for DCP: not sure if this is right */ + float fps = rintf (_fs->frames_per_second); + + stringstream c; + c << "opendcp_mxf -r " << fps << " -i "; + switch (_type) { + case VIDEO: + c << "\"" << _opt->frame_out_path () << "\" -o \"" << _fs->file ("video.mxf") << "\""; + break; + case AUDIO: + c << "\"" << _opt->multichannel_audio_out_path () << "\" -o \"" << _fs->file ("audio.mxf") << "\""; + break; + } + + command (c.str ()); + set_progress (1); +} diff --git a/src/lib/make_mxf_job.h b/src/lib/make_mxf_job.h new file mode 100644 index 000000000..462381d23 --- /dev/null +++ b/src/lib/make_mxf_job.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/make_mxf_job.h + * @brief A job that creates a MXF file from some data. + */ + +#include "shell_command_job.h" + +class FilmState; +class Options; + +/** @class MakeMXFJob + * @brief A job that creates a MXF file from some data. + */ +class MakeMXFJob : public ShellCommandJob +{ +public: + enum Type { + AUDIO, + VIDEO + }; + + MakeMXFJob (boost::shared_ptr, boost::shared_ptr, Log *, Type); + + std::string name () const; + void run (); + +private: + Type _type; +}; + diff --git a/src/lib/options.h b/src/lib/options.h new file mode 100644 index 000000000..b283e330d --- /dev/null +++ b/src/lib/options.h @@ -0,0 +1,109 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/options.h + * @brief Options for a transcoding operation. + */ + +#include +#include +#include +#include "util.h" + +/** @class Options + * @brief Options for a transcoding operation. + * + * These are settings which may be different, in different circumstances, for + * the same film; ie they are options for a particular transcode operation. + */ +class Options +{ +public: + + Options (std::string f, std::string e, std::string m) + : padding (0) + , apply_crop (true) + , num_frames (0) + , decode_video (true) + , decode_video_frequency (0) + , decode_audio (true) + , _frame_out_path (f) + , _frame_out_extension (e) + , _multichannel_audio_out_path (m) + {} + + /** @return The path to write video frames to */ + std::string frame_out_path () const { + return _frame_out_path; + } + + /** @param f Frame index. + * @param t true to return a temporary file path, otherwise a permanent one. + * @return The path to write this video frame to. + */ + std::string frame_out_path (int f, bool t) const { + std::stringstream s; + s << _frame_out_path << "/"; + s.width (8); + s << std::setfill('0') << f << _frame_out_extension; + + if (t) { + s << ".tmp"; + } + + return s.str (); + } + + /** @return Path to write multichannel audio data to */ + std::string multichannel_audio_out_path () const { + return _multichannel_audio_out_path; + } + + /** @param c Audio channel index. + * @param t true to return a temporary file path, otherwise a permanent one. + * @return The path to write this audio file to. + */ + std::string multichannel_audio_out_path (int c, bool t) const { + std::stringstream s; + s << _multichannel_audio_out_path << "/" << (c + 1) << ".wav"; + if (t) { + s << ".tmp"; + } + + return s.str (); + } + + Size out_size; ///< size of output images + float ratio; ///< ratio of the wanted output image (not considering padding) + int padding; ///< number of pixels of padding (in terms of the output size) each side of the image + bool apply_crop; ///< true to apply cropping + int num_frames; ///< number of video frames to run for, or 0 for all + int black_after; ///< first frame for which to output a black frame, rather than the actual video content, or 0 for none + bool decode_video; ///< true to decode video, otherwise false + int decode_video_frequency; ///< skip frames so that this many are decoded in all (or 0) (for generating thumbnails) + bool decode_audio; ///< true to decode audio, otherwise false + +private: + /** Path of the directory to write video frames to */ + std::string _frame_out_path; + /** Extension to use for video frame files (including the leading .) */ + std::string _frame_out_extension; + /** Path of the directory to write audio files to */ + std::string _multichannel_audio_out_path; +}; diff --git a/src/lib/player.cc b/src/lib/player.cc new file mode 100644 index 000000000..db69c66d1 --- /dev/null +++ b/src/lib/player.cc @@ -0,0 +1,227 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "player.h" +#include "film_state.h" +#include "filter.h" +#include "screen.h" +#include "exceptions.h" + +using namespace std; +using namespace boost; + +Player::Player (shared_ptr fs, shared_ptr screen, Split split) + : _stdout_reader_should_run (true) + , _position (0) + , _paused (false) +{ + assert (fs->format); + + if (pipe (_mplayer_stdin) < 0) { + throw PlayError ("could not create pipe"); + } + + if (pipe (_mplayer_stdout) < 0) { + throw PlayError ("could not create pipe"); + } + + if (pipe (_mplayer_stderr) < 0) { + throw PlayError ("could not create pipe"); + } + + int const p = fork (); + if (p < 0) { + throw PlayError ("could not fork for mplayer"); + } else if (p == 0) { + close (_mplayer_stdin[1]); + dup2 (_mplayer_stdin[0], STDIN_FILENO); + + close (_mplayer_stdout[0]); + dup2 (_mplayer_stdout[1], STDOUT_FILENO); + + close (_mplayer_stderr[0]); + dup2 (_mplayer_stderr[1], STDERR_FILENO); + + char* p[] = { strdup ("TERM=xterm"), strdup ("DISPLAY=:0"), 0 }; + environ = p; + + stringstream s; + s << "/usr/local/bin/mplayer"; + + s << " -vo x11 -noaspect -noautosub -nosub -vo x11 -noborder -slave -quiet -input nodefault-bindings:conf=/dev/null"; + s << " -sws " << fs->scaler->mplayer_id (); + + stringstream vf; + + Position position = screen->position (fs->format); + Size screen_size = screen->size (fs->format); + Size const cropped_size = fs->cropped_size (fs->size); + switch (split) { + case SPLIT_NONE: + vf << crop_string (Position (fs->left_crop, fs->top_crop), cropped_size); + s << " -geometry " << position.x << ":" << position.y; + break; + case SPLIT_LEFT: + { + Size split_size = cropped_size; + split_size.width /= 2; + vf << crop_string (Position (fs->left_crop, fs->top_crop), split_size); + screen_size.width /= 2; + s << " -geometry " << position.x << ":" << position.y; + break; + } + case SPLIT_RIGHT: + { + Size split_size = cropped_size; + split_size.width /= 2; + vf << crop_string (Position (fs->left_crop + split_size.width, fs->top_crop), split_size); + screen_size.width /= 2; + s << " -geometry " << (position.x + screen_size.width) << ":" << position.y; + break; + } + } + + vf << ",scale=" << screen_size.width << ":" << screen_size.height; + + pair filters = Filter::ffmpeg_strings (fs->filters); + + if (!filters.first.empty()) { + vf << "," << filters.first; + } + + if (!filters.second.empty ()) { + vf << ",pp=" << filters.second; + } + + s << " -vf " << vf.str(); + s << " \"" << fs->content_path() << "\" "; + + string cmd (s.str ()); + + vector b = split_at_spaces_considering_quotes (cmd); + + char** cl = new char*[b.size() + 1]; + for (vector::size_type i = 0; i < b.size(); ++i) { + cl[i] = strdup (b[i].c_str ()); + } + cl[b.size()] = 0; + + execv (cl[0], cl); + + stringstream e; + e << "exec of mplayer failed " << strerror (errno); + throw PlayError (e.str ()); + + } else { + _mplayer_pid = p; + command ("pause"); + + _stdout_reader = new boost::thread (boost::bind (&Player::stdout_reader, this)); + } +} + +Player::~Player () +{ + _stdout_reader_should_run = false; + _stdout_reader->join (); + delete _stdout_reader; + + close (_mplayer_stdin[0]); + close (_mplayer_stdout[1]); + kill (_mplayer_pid, SIGTERM); +} + +void +Player::command (string c) +{ + char buf[64]; + snprintf (buf, sizeof (buf), "%s\n", c.c_str ()); + write (_mplayer_stdin[1], buf, strlen (buf)); +} + +void +Player::stdout_reader () +{ + while (_stdout_reader_should_run) { + char buf[1024]; + int r = read (_mplayer_stdout[0], buf, sizeof (buf)); + if (r > 0) { + stringstream s (buf); + while (s.good ()) { + string line; + getline (s, line); + + vector b; + split (b, line, is_any_of ("=")); + if (b.size() < 2) { + continue; + } + + if (b[0] == "ANS_time_pos") { + set_position (atof (b[1].c_str ())); + } else if (b[0] == "ANS_pause") { + set_paused (b[1] == "yes"); + } + } + } + + usleep (5e5); + + snprintf (buf, sizeof (buf), "pausing_keep_force get_property time_pos\npausing_keep_force get_property pause\n"); + write (_mplayer_stdin[1], buf, strlen (buf)); + } +} + +void +Player::set_position (float p) +{ + /* XXX: could be an atomic */ + boost::mutex::scoped_lock lm (_state_mutex); + _position = p; +} + +void +Player::set_paused (bool p) +{ + /* XXX: could be an atomic */ + boost::mutex::scoped_lock lm (_state_mutex); + _paused = p; +} + +float +Player::position () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _position; +} + +bool +Player::paused () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _paused; +} diff --git a/src/lib/player.h b/src/lib/player.h new file mode 100644 index 000000000..fc08deb9f --- /dev/null +++ b/src/lib/player.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef DVDOMATIC_PLAYER_H +#define DVDOMATIC_PLAYER_H + +#include +#include +#include + +class FilmState; +class Screen; + +class Player +{ +public: + enum Split { + SPLIT_NONE, + SPLIT_LEFT, + SPLIT_RIGHT + }; + + Player (boost::shared_ptr, boost::shared_ptr, Split); + ~Player (); + + void command (std::string); + + float position () const; + bool paused () const; + + pid_t mplayer_pid () const { + return _mplayer_pid; + } + +private: + void stdout_reader (); + void set_position (float); + void set_paused (bool); + + int _mplayer_stdin[2]; + int _mplayer_stdout[2]; + int _mplayer_stderr[2]; + pid_t _mplayer_pid; + + boost::thread* _stdout_reader; + /* XXX: should probably be atomically accessed */ + bool _stdout_reader_should_run; + + mutable boost::mutex _state_mutex; + float _position; + bool _paused; +}; + +#endif diff --git a/src/lib/player_manager.cc b/src/lib/player_manager.cc new file mode 100644 index 000000000..74fd2383b --- /dev/null +++ b/src/lib/player_manager.cc @@ -0,0 +1,137 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "player_manager.h" +#include "player.h" +#include "film_state.h" +#include "screen.h" + +using namespace std; +using namespace boost; + +PlayerManager* PlayerManager::_instance = 0; + +PlayerManager::PlayerManager () +{ + +} + +PlayerManager * +PlayerManager::instance () +{ + if (_instance == 0) { + _instance = new PlayerManager (); + } + + return _instance; +} + +void +PlayerManager::setup (shared_ptr fs, shared_ptr sc) +{ + boost::mutex::scoped_lock lm (_players_mutex); + + _players.clear (); + _players.push_back (shared_ptr (new Player (fs, sc, Player::SPLIT_NONE))); +} + +void +PlayerManager::setup (shared_ptr fs_a, shared_ptr fs_b, shared_ptr sc) +{ + boost::mutex::scoped_lock lm (_players_mutex); + + _players.clear (); + + _players.push_back (shared_ptr (new Player (fs_a, sc, Player::SPLIT_LEFT))); + _players.push_back (shared_ptr (new Player (fs_b, sc, Player::SPLIT_RIGHT))); +} + +void +PlayerManager::pause_or_unpause () +{ + boost::mutex::scoped_lock lm (_players_mutex); + + for (list >::iterator i = _players.begin(); i != _players.end(); ++i) { + (*i)->command ("pause"); + } +} + +void +PlayerManager::set_position (float p) +{ + boost::mutex::scoped_lock lm (_players_mutex); + + stringstream s; + s << "pausing_keep_force seek " << p << " 2"; + for (list >::iterator i = _players.begin(); i != _players.end(); ++i) { + (*i)->command (s.str ()); + } +} + +float +PlayerManager::position () const +{ + boost::mutex::scoped_lock lm (_players_mutex); + + if (_players.empty ()) { + return 0; + } + + return _players.front()->position (); +} + +void +PlayerManager::child_exited (pid_t pid) +{ + boost::mutex::scoped_lock lm (_players_mutex); + + list >::iterator i = _players.begin(); + while (i != _players.end() && (*i)->mplayer_pid() != pid) { + ++i; + } + + if (i == _players.end()) { + return; + } + + _players.erase (i); +} + +PlayerManager::State +PlayerManager::state () const +{ + boost::mutex::scoped_lock lm (_players_mutex); + + if (_players.empty ()) { + return QUIESCENT; + } + + if (_players.front()->paused ()) { + return PAUSED; + } + + return PLAYING; +} + +void +PlayerManager::stop () +{ + boost::mutex::scoped_lock lm (_players_mutex); + _players.clear (); +} diff --git a/src/lib/player_manager.h b/src/lib/player_manager.h new file mode 100644 index 000000000..70a31b229 --- /dev/null +++ b/src/lib/player_manager.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include "player.h" + +class Player; +class FilmState; +class Screen; + +class PlayerManager +{ +public: + + void setup (boost::shared_ptr, boost::shared_ptr); + void setup (boost::shared_ptr, boost::shared_ptr, boost::shared_ptr); + void pause_or_unpause (); + void stop (); + + float position () const; + void set_position (float); + + enum State { + QUIESCENT, + PLAYING, + PAUSED + }; + + State state () const; + + void child_exited (pid_t); + + static PlayerManager* instance (); + +private: + PlayerManager (); + + mutable boost::mutex _players_mutex; + std::list > _players; + + static PlayerManager* _instance; +}; diff --git a/src/lib/scaler.cc b/src/lib/scaler.cc new file mode 100644 index 000000000..1e63d66b3 --- /dev/null +++ b/src/lib/scaler.cc @@ -0,0 +1,117 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/scaler.cc + * @brief A class to describe one of FFmpeg's software scalers. + */ + +#include +#include +extern "C" { +#include +} +#include "scaler.h" + +using namespace std; + +vector Scaler::_scalers; + +/** @param f FFmpeg id. + * @param m mplayer command line id. + * @param i Our id. + * @param n User-visible name. + */ +Scaler::Scaler (int f, int m, string i, string n) + : _ffmpeg_id (f) + , _mplayer_id (m) + , _id (i) + , _name (n) +{ + +} + +/** @return All available scalers */ +vector +Scaler::all () +{ + return _scalers; +} + +/** Set up the static _scalers vector; must be called before from_* + * methods are used. + */ +void +Scaler::setup_scalers () +{ + _scalers.push_back (new Scaler (SWS_BICUBIC, 2, "bicubic", "Bicubic")); + _scalers.push_back (new Scaler (SWS_X, 3, "x", "X")); + _scalers.push_back (new Scaler (SWS_AREA, 5, "area", "Area")); + _scalers.push_back (new Scaler (SWS_GAUSS, 7, "gauss", "Gaussian")); + _scalers.push_back (new Scaler (SWS_LANCZOS, 9, "lanczos", "Lanczos")); + _scalers.push_back (new Scaler (SWS_SINC, 8, "sinc", "Sinc")); + _scalers.push_back (new Scaler (SWS_SPLINE, 10, "spline", "Spline")); + _scalers.push_back (new Scaler (SWS_BILINEAR, 1, "bilinear", "Bilinear")); + _scalers.push_back (new Scaler (SWS_FAST_BILINEAR, 0, "fastbilinear", "Fast Bilinear")); +} + +/** @param id One of our ids. + * @return Corresponding scaler, or 0. + */ +Scaler const * +Scaler::from_id (string id) +{ + vector::iterator i = _scalers.begin (); + while (i != _scalers.end() && (*i)->id() != id) { + ++i; + } + + if (i == _scalers.end ()) { + return 0; + } + + return *i; +} + +/** @param s A scaler from our static list. + * @return Index of the scaler with the list, or -1. + */ +int +Scaler::as_index (Scaler const * s) +{ + vector::size_type i = 0; + while (i < _scalers.size() && _scalers[i] != s) { + ++i; + } + + if (i == _scalers.size ()) { + return -1; + } + + return i; +} + +/** @param i An index returned from as_index(). + * @return Corresponding scaler. + */ +Scaler const * +Scaler::from_index (int i) +{ + assert (i <= int(_scalers.size ())); + return _scalers[i]; +} diff --git a/src/lib/scaler.h b/src/lib/scaler.h new file mode 100644 index 000000000..8ededfe2a --- /dev/null +++ b/src/lib/scaler.h @@ -0,0 +1,78 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/scaler.h + * @brief A class to describe one of FFmpeg's software scalers. + */ + +#ifndef DVDOMATIC_SCALER_H +#define DVDOMATIC_SCALER_H + +#include +#include + +/** @class Scaler + * @brief Class to describe one of FFmpeg's software scalers + */ +class Scaler +{ +public: + Scaler (int f, int m, std::string i, std::string n); + + /** @return id used for calls to FFmpeg's pp_postprocess */ + int ffmpeg_id () const { + return _ffmpeg_id; + } + + /** @return number to use on an mplayer command line */ + int mplayer_id () const { + return _mplayer_id; + } + + /** @return id for our use */ + std::string id () const { + return _id; + } + + /** @return user-visible name for this scaler */ + std::string name () const { + return _name; + } + + static std::vector all (); + static void setup_scalers (); + static Scaler const * from_id (std::string id); + static Scaler const * from_index (int); + static int as_index (Scaler const *); + +private: + + /** id used for calls to FFmpeg's pp_postprocess */ + int _ffmpeg_id; + int _mplayer_id; + /** id for our use */ + std::string _id; + /** user-visible name for this scaler */ + std::string _name; + + /** sll available scalers */ + static std::vector _scalers; +}; + +#endif diff --git a/src/lib/scp_dcp_job.cc b/src/lib/scp_dcp_job.cc new file mode 100644 index 000000000..94e403816 --- /dev/null +++ b/src/lib/scp_dcp_job.cc @@ -0,0 +1,242 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/scp_dcp_job.cc + * @brief A job to copy DCPs to a SCP-enabled server. + */ + +#include +#include +#include +#include +#include +#include +#include "scp_dcp_job.h" +#include "exceptions.h" +#include "config.h" +#include "log.h" +#include "film_state.h" + +using namespace std; +using namespace boost; + +class SSHSession +{ +public: + SSHSession () + : _connected (false) + { + session = ssh_new (); + if (session == 0) { + throw NetworkError ("Could not start SSH session"); + } + } + + int connect () + { + int r = ssh_connect (session); + if (r == 0) { + _connected = true; + } + return r; + } + + ~SSHSession () + { + if (_connected) { + ssh_disconnect (session); + } + ssh_free (session); + } + + ssh_session session; + +private: + bool _connected; +}; + +class SSHSCP +{ +public: + SSHSCP (ssh_session s) + { + scp = ssh_scp_new (s, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, Config::instance()->tms_path().c_str ()); + if (!scp) { + stringstream s; + s << "Could not start SCP session (" << ssh_get_error (s) << ")"; + throw NetworkError (s.str ()); + } + } + + ~SSHSCP () + { + ssh_scp_free (scp); + } + + ssh_scp scp; +}; + + +SCPDCPJob::SCPDCPJob (shared_ptr s, Log* l) + : Job (s, shared_ptr (), l) + , _status ("Waiting") +{ + +} + +string +SCPDCPJob::name () const +{ + stringstream s; + s << "Copy DCP to TMS"; + return s.str (); +} + +void +SCPDCPJob::run () +{ + try { + _log->log ("SCP DCP job starting"); + + SSHSession ss; + + set_status ("Connecting"); + + ssh_options_set (ss.session, SSH_OPTIONS_HOST, Config::instance()->tms_ip().c_str ()); + ssh_options_set (ss.session, SSH_OPTIONS_USER, Config::instance()->tms_user().c_str ()); + int const port = 22; + ssh_options_set (ss.session, SSH_OPTIONS_PORT, &port); + + int r = ss.connect (); + if (r != SSH_OK) { + stringstream s; + s << "Could not connect to server " << Config::instance()->tms_ip() << " (" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + + int const state = ssh_is_server_known (ss.session); + if (state == SSH_SERVER_ERROR) { + stringstream s; + s << "SSH error (" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + + r = ssh_userauth_password (ss.session, 0, Config::instance()->tms_password().c_str ()); + if (r != SSH_AUTH_SUCCESS) { + stringstream s; + s << "Failed to authenticate with server (" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + + SSHSCP sc (ss.session); + + r = ssh_scp_init (sc.scp); + if (r != SSH_OK) { + stringstream s; + s << "Could not start SCP session (" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + + r = ssh_scp_push_directory (sc.scp, _fs->name.c_str(), S_IRWXU); + if (r != SSH_OK) { + stringstream s; + s << "Could not create remote directory " << _fs->name << "(" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + + string const dcp_dir = _fs->dir (_fs->name); + + int bytes_to_transfer = 0; + for (filesystem::directory_iterator i = filesystem::directory_iterator (dcp_dir); i != filesystem::directory_iterator(); ++i) { + bytes_to_transfer += filesystem::file_size (*i); + } + + int buffer_size = 64 * 1024; + char buffer[buffer_size]; + int bytes_transferred = 0; + + for (filesystem::directory_iterator i = filesystem::directory_iterator (dcp_dir); i != filesystem::directory_iterator(); ++i) { + + /* Aah, the sweet smell of progress */ +#if BOOST_FILESYSTEM_VERSION == 3 + string const leaf = filesystem::path(*i).leaf().generic_string (); +#else + string const leaf = i->leaf (); +#endif + + set_status ("Copying " + leaf); + + int to_do = filesystem::file_size (*i); + ssh_scp_push_file (sc.scp, leaf.c_str(), to_do, S_IRUSR | S_IWUSR); + + int fd = open (filesystem::path (*i).string().c_str(), O_RDONLY); + if (fd == 0) { + stringstream s; + s << "Could not open " << *i << " to send"; + throw NetworkError (s.str ()); + } + + while (to_do > 0) { + int const t = min (to_do, buffer_size); + read (fd, buffer, t); + r = ssh_scp_write (sc.scp, buffer, t); + if (r != SSH_OK) { + stringstream s; + s << "Could not write to remote file (" << ssh_get_error (ss.session) << ")"; + throw NetworkError (s.str ()); + } + to_do -= t; + bytes_transferred += t; + + set_progress ((double) bytes_transferred / bytes_to_transfer); + } + } + + set_progress (1); + set_status ("OK"); + set_state (FINISHED_OK); + + } catch (std::exception& e) { + + stringstream s; + set_progress (1); + set_state (FINISHED_ERROR); + set_status (e.what ()); + + s << "SCP DCP job failed (" << e.what() << ")"; + _log->log (s.str ()); + + throw; + } +} + +string +SCPDCPJob::status () const +{ + boost::mutex::scoped_lock lm (_status_mutex); + return _status; +} + +void +SCPDCPJob::set_status (string s) +{ + boost::mutex::scoped_lock lm (_status_mutex); + _status = s; +} + diff --git a/src/lib/scp_dcp_job.h b/src/lib/scp_dcp_job.h new file mode 100644 index 000000000..1c795be47 --- /dev/null +++ b/src/lib/scp_dcp_job.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/scp_dcp_job.h + * @brief A job to copy DCPs to a SCP-enabled server. + */ + +#include "job.h" + +class SCPDCPJob : public Job +{ +public: + SCPDCPJob (boost::shared_ptr, Log *); + + std::string name () const; + void run (); + std::string status () const; + +private: + void set_status (std::string); + + mutable boost::mutex _status_mutex; + std::string _status; +}; diff --git a/src/lib/screen.cc b/src/lib/screen.cc new file mode 100644 index 000000000..25e44f77d --- /dev/null +++ b/src/lib/screen.cc @@ -0,0 +1,104 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "screen.h" +#include "format.h" +#include "exceptions.h" + +using namespace std; +using namespace boost; + +Screen::Screen (string n) + : _name (n) +{ + vector f = Format::all (); + for (vector::iterator i = f.begin(); i != f.end(); ++i) { + set_geometry (*i, Position (0, 0), Size (2048, 1080)); + } +} + +void +Screen::set_geometry (Format const * f, Position p, Size s) +{ + _geometries[f] = Geometry (p, s); +} + +Position +Screen::position (Format const * f) const +{ + GeometryMap::const_iterator i = _geometries.find (f); + if (i == _geometries.end ()) { + throw PlayError ("format not found for screen"); + } + + return i->second.position; +} + +Size +Screen::size (Format const * f) const +{ + GeometryMap::const_iterator i = _geometries.find (f); + if (i == _geometries.end ()) { + throw PlayError ("format not found for screen"); + } + + return i->second.size; +} + +string +Screen::as_metadata () const +{ + stringstream s; + s << "\"" << _name << "\""; + + for (GeometryMap::const_iterator i = _geometries.begin(); i != _geometries.end(); ++i) { + s << " " << i->first->as_metadata() + << " " << i->second.position.x << " " << i->second.position.y + << " " << i->second.size.width << " " << i->second.size.height; + } + + return s.str (); +} + +shared_ptr +Screen::create_from_metadata (string v) +{ + vector b = split_at_spaces_considering_quotes (v); + + if (b.size() < 1) { + return shared_ptr (); + } + + shared_ptr s (new Screen (b[0])); + + vector::size_type i = 1; + while (b.size() > i) { + if (b.size() >= (i + 5)) { + s->set_geometry ( + Format::from_metadata (b[i].c_str()), + Position (atoi (b[i+1].c_str()), atoi (b[i+2].c_str())), + Size (atoi (b[i+3].c_str()), atoi (b[i+4].c_str())) + ); + } + i += 5; + } + + return s; +} diff --git a/src/lib/screen.h b/src/lib/screen.h new file mode 100644 index 000000000..663b3c3c4 --- /dev/null +++ b/src/lib/screen.h @@ -0,0 +1,68 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "util.h" + +class Format; + +class Screen +{ +public: + Screen (std::string); + + void set_geometry (Format const *, Position, Size); + + std::string name () const { + return _name; + } + + void set_name (std::string n) { + _name = n; + } + + struct Geometry { + Geometry () {} + + Geometry (Position p, Size s) + : position (p) + , size (s) + {} + + Position position; + Size size; + }; + + typedef std::map GeometryMap; + GeometryMap geometries () const { + return _geometries; + } + + Position position (Format const *) const; + Size size (Format const *) const; + + std::string as_metadata () const; + static boost::shared_ptr create_from_metadata (std::string); + +private: + std::string _name; + GeometryMap _geometries; +}; diff --git a/src/lib/server.cc b/src/lib/server.cc new file mode 100644 index 000000000..8a5b5cfca --- /dev/null +++ b/src/lib/server.cc @@ -0,0 +1,58 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/server.cc + * @brief Class to describe a server to which we can send + * encoding work. + */ + +#include +#include +#include +#include +#include "server.h" + +using namespace std; +using namespace boost; + +/** Create a server from a string of metadata returned from as_metadata(). + * @param v Metadata. + * @return Server, or 0. + */ +Server * +Server::create_from_metadata (string v) +{ + vector b; + split (b, v, is_any_of (" ")); + + if (b.size() != 2) { + return 0; + } + + return new Server (b[0], atoi (b[1].c_str ())); +} + +/** @return Description of this server as text */ +string +Server::as_metadata () const +{ + stringstream s; + s << _host_name << " " << _threads; + return s.str (); +} diff --git a/src/lib/server.h b/src/lib/server.h new file mode 100644 index 000000000..f7a0abb80 --- /dev/null +++ b/src/lib/server.h @@ -0,0 +1,60 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/server.h + * @brief Class to describe a server to which we can send + * encoding work. + */ + +#include + +/** @class Server + * @brief Class to describe a server to which we can send encoding work. + */ +class Server +{ +public: + /** @param h Server host name or IP address in string form. + * @param t Number of threads to use on the server. + */ + Server (std::string h, int t) + : _host_name (h) + , _threads (t) + {} + + /** @return server's host name or IP address in string form */ + std::string host_name () const { + return _host_name; + } + + /** @return number of threads to use on the server */ + int threads () const { + return _threads; + } + + std::string as_metadata () const; + + static Server * create_from_metadata (std::string v); + +private: + /** server's host name */ + std::string _host_name; + /** number of threads to use on the server */ + int _threads; +}; diff --git a/src/lib/shell_command_job.cc b/src/lib/shell_command_job.cc new file mode 100644 index 000000000..11805bdfe --- /dev/null +++ b/src/lib/shell_command_job.cc @@ -0,0 +1,71 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/shell_command_job.cc + * @brief A job which calls a command via a shell. + */ + +#include +#include "shell_command_job.h" +#include "log.h" + +using namespace std; +using namespace boost; + +/** @param s Our FilmState. + * @param o Options. + * @param l Log. + */ +ShellCommandJob::ShellCommandJob (shared_ptr s, shared_ptr o, Log* l) + : Job (s, o, l) +{ + +} + +/** Run a command via a shell. + * @param c Command to run. + */ +void +ShellCommandJob::command (string c) +{ + _log->log ("Command: " + c, Log::VERBOSE); + + int const r = system (c.c_str()); + if (r < 0) { + set_state (FINISHED_ERROR); + return; + } else if (WEXITSTATUS (r) != 0) { + set_error ("command failed"); + set_state (FINISHED_ERROR); + } else { + set_state (FINISHED_OK); + } +} + +string +ShellCommandJob::status () const +{ + if (!running () && !finished()) { + return "Waiting"; + } else if (running ()) { + return ""; + } + + return Job::status (); +} diff --git a/src/lib/shell_command_job.h b/src/lib/shell_command_job.h new file mode 100644 index 000000000..e5dd58867 --- /dev/null +++ b/src/lib/shell_command_job.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/shell_command_job.h + * @brief A job which calls a command via a shell. + */ + +#ifndef DVDOMATIC_SHELL_COMMAND_JOB_H +#define DVDOMATIC_SHELL_COMMAND_JOB_H + +#include "job.h" + +class FilmState; +class Log; + +/** @class ShellCommandJob + * @brief A job which calls a command via a shell. + */ +class ShellCommandJob : public Job +{ +public: + ShellCommandJob (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + std::string status () const; + +protected: + void command (std::string c); +}; + +#endif diff --git a/src/lib/thumbs_job.cc b/src/lib/thumbs_job.cc new file mode 100644 index 000000000..0eb116fd1 --- /dev/null +++ b/src/lib/thumbs_job.cc @@ -0,0 +1,68 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/thumbs_job.cc + * @brief A job to create thumbnails. + */ + +#include +#include "thumbs_job.h" +#include "film_state.h" +#include "tiff_encoder.h" +#include "transcoder.h" +#include "options.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState to use. + * @param o Options. + * @param l A log that we can write to. + */ +ThumbsJob::ThumbsJob (shared_ptr s, shared_ptr o, Log* l) + : Job (s, o, l) +{ + +} + +string +ThumbsJob::name () const +{ + stringstream s; + s << "Update thumbs for " << _fs->name; + return s.str (); +} + +void +ThumbsJob::run () +{ + try { + shared_ptr e (new TIFFEncoder (_fs, _opt, _log)); + Transcoder w (_fs, _opt, this, _log, e); + w.go (); + set_progress (1); + set_state (FINISHED_OK); + + } catch (std::exception& e) { + + set_progress (1); + set_error (e.what ()); + set_state (FINISHED_ERROR); + } +} diff --git a/src/lib/thumbs_job.h b/src/lib/thumbs_job.h new file mode 100644 index 000000000..1dd69a0f9 --- /dev/null +++ b/src/lib/thumbs_job.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/thumbs_job.h + * @brief A job to create thumbnails. + */ + +#include "job.h" + +class FilmState; + +/** @class ThumbsJob + * @brief A job to create thumbnails (single frames of the film spaced out throughout the film). + */ +class ThumbsJob : public Job +{ +public: + ThumbsJob (boost::shared_ptr s, boost::shared_ptr o, Log* l); + std::string name () const; + void run (); +}; diff --git a/src/lib/tiff_decoder.cc b/src/lib/tiff_decoder.cc new file mode 100644 index 000000000..6738de49b --- /dev/null +++ b/src/lib/tiff_decoder.cc @@ -0,0 +1,224 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/tiff_decoder.cc + * @brief A decoder which reads a numbered set of TIFF files, one per frame. + */ + +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +} +#include "util.h" +#include "tiff_decoder.h" +#include "film_state.h" +#include "exceptions.h" +#include "image.h" +#include "options.h" + +using namespace std; +using namespace boost; + +/** @param fs FilmState of our Film. + * @param o Options. + * @param j Job that we are associated with, or 0. + * @param l Log that we can write to. + * @param minimal true to do the bare minimum of work; just run through the content. Useful for acquiring + * accurate frame counts as quickly as possible. This generates no video or audio output. + * @param ignore_length Ignore the content's claimed length when computing progress. + */ +TIFFDecoder::TIFFDecoder (boost::shared_ptr fs, boost::shared_ptr o, Job* j, Log* l, bool minimal, bool ignore_length) + : Decoder (fs, o, j, l, minimal, ignore_length) +{ + string const dir = _fs->content_path (); + + if (!filesystem::is_directory (dir)) { + throw DecodeError ("TIFF content must be in a directory"); + } + + for (filesystem::directory_iterator i = filesystem::directory_iterator (dir); i != filesystem::directory_iterator(); ++i) { + /* Aah, the sweet smell of progress */ +#if BOOST_FILESYSTEM_VERSION == 3 + string const ext = filesystem::path(*i).extension().string(); + string const l = filesystem::path(*i).leaf().generic_string(); +#else + string const ext = filesystem::path(*i).extension(); + string const l = i->leaf (); +#endif + if (ext == ".tif" || ext == ".tiff") { + _files.push_back (l); + } + } + + _files.sort (); + + _iter = _files.begin (); + +} + +int +TIFFDecoder::length_in_frames () const +{ + return _files.size (); +} + +float +TIFFDecoder::frames_per_second () const +{ + /* We don't know */ + return 0; +} + +Size +TIFFDecoder::native_size () const +{ + if (_files.empty ()) { + throw DecodeError ("no TIFF files found"); + } + + TIFF* t = TIFFOpen (file_path (_files.front()).c_str (), "r"); + if (t == 0) { + throw DecodeError ("could not open TIFF file"); + } + + uint32_t width; + TIFFGetField (t, TIFFTAG_IMAGEWIDTH, &width); + uint32_t height; + TIFFGetField (t, TIFFTAG_IMAGELENGTH, &height); + + return Size (width, height); +} + +int +TIFFDecoder::audio_channels () const +{ + /* No audio */ + return 0; +} + +int +TIFFDecoder::audio_sample_rate () const +{ + return 0; +} + +AVSampleFormat +TIFFDecoder::audio_sample_format () const +{ + return AV_SAMPLE_FMT_NONE; +} + +bool +TIFFDecoder::do_pass () +{ + if (_iter == _files.end ()) { + return true; + } + + TIFF* t = TIFFOpen (file_path (*_iter).c_str (), "r"); + if (t == 0) { + throw DecodeError ("could not open TIFF file"); + } + + uint32_t width; + TIFFGetField (t, TIFFTAG_IMAGEWIDTH, &width); + uint32_t height; + TIFFGetField (t, TIFFTAG_IMAGELENGTH, &height); + + int const num_pixels = width * height; + uint32_t * raster = (uint32_t *) _TIFFmalloc (num_pixels * sizeof (uint32_t)); + if (raster == 0) { + throw DecodeError ("could not allocate memory to decode TIFF file"); + } + + if (TIFFReadRGBAImage (t, width, height, raster, 0) < 0) { + throw DecodeError ("could not read TIFF data"); + } + + RGBFrameImage image (Size (width, height)); + + uint8_t* p = image.data()[0]; + for (uint32_t y = 0; y < height; ++y) { + for (uint32_t x = 0; x < width; ++x) { + uint32_t const i = (height - y - 1) * width + x; + *p++ = raster[i] & 0xff; + *p++ = (raster[i] & 0xff00) >> 8; + *p++ = (raster[i] & 0xff0000) >> 16; + } + } + + _TIFFfree (raster); + TIFFClose (t); + + process_video (image.frame ()); + + ++_iter; + return false; +} + +/** @param file name within our content directory + * @return full path to the file + */ +string +TIFFDecoder::file_path (string f) const +{ + stringstream s; + s << _fs->content_path() << "/" << f; + return _fs->file (s.str ()); +} + +PixelFormat +TIFFDecoder::pixel_format () const +{ + return PIX_FMT_RGB24; +} + +int +TIFFDecoder::time_base_numerator () const +{ + return rint (_fs->frames_per_second);; +} + + +int +TIFFDecoder::time_base_denominator () const +{ + return 1; +} + +int +TIFFDecoder::sample_aspect_ratio_numerator () const +{ + /* XXX */ + return 1; +} + +int +TIFFDecoder::sample_aspect_ratio_denominator () const +{ + /* XXX */ + return 1; +} + diff --git a/src/lib/tiff_decoder.h b/src/lib/tiff_decoder.h new file mode 100644 index 000000000..dbd76f36d --- /dev/null +++ b/src/lib/tiff_decoder.h @@ -0,0 +1,69 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/tiff_decoder.h + * @brief A decoder which reads a numbered set of TIFF files, one per frame. + */ + +#ifndef DVDOMATIC_TIFF_DECODER_H +#define DVDOMATIC_TIFF_DECODER_H + +#include +#include +#include +#include +#include "util.h" +#include "decoder.h" + +class Job; +class FilmState; +class Options; +class Image; +class Log; + +/** @class TIFFDecoder. + * @brief A decoder which reads a numbered set of TIFF files, one per frame. + */ +class TIFFDecoder : public Decoder +{ +public: + TIFFDecoder (boost::shared_ptr, boost::shared_ptr, Job *, Log *, bool, bool); + + /* Methods to query our input video */ + int length_in_frames () const; + float frames_per_second () const; + Size native_size () const; + int audio_channels () const; + int audio_sample_rate () const; + AVSampleFormat audio_sample_format () const; + +private: + bool do_pass (); + PixelFormat pixel_format () const; + int time_base_numerator () const; + int time_base_denominator () const; + int sample_aspect_ratio_numerator () const; + int sample_aspect_ratio_denominator () const; + + std::string file_path (std::string) const; + std::list _files; + std::list::iterator _iter; +}; + +#endif diff --git a/src/lib/tiff_encoder.cc b/src/lib/tiff_encoder.cc new file mode 100644 index 000000000..2cf238006 --- /dev/null +++ b/src/lib/tiff_encoder.cc @@ -0,0 +1,77 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/tiff_encoder.h + * @brief An encoder that writes TIFF files (and does nothing with audio). + */ + +#include +#include +#include +#include +#include +#include +#include +#include "tiff_encoder.h" +#include "film.h" +#include "film_state.h" +#include "options.h" +#include "exceptions.h" +#include "image.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState of the film that we are encoding. + * @param o Options. + * @param l Log. + */ +TIFFEncoder::TIFFEncoder (shared_ptr s, shared_ptr o, Log* l) + : Encoder (s, o, l) +{ + +} + +void +TIFFEncoder::process_video (shared_ptr image, int frame) +{ + shared_ptr scaled = image->scale_and_convert_to_rgb (_opt->out_size, _opt->padding, _fs->scaler); + string tmp_file = _opt->frame_out_path (frame, true); + TIFF* output = TIFFOpen (tmp_file.c_str (), "w"); + if (output == 0) { + throw CreateFileError (tmp_file); + } + + TIFFSetField (output, TIFFTAG_IMAGEWIDTH, _opt->out_size.width); + TIFFSetField (output, TIFFTAG_IMAGELENGTH, _opt->out_size.height); + TIFFSetField (output, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + TIFFSetField (output, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField (output, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField (output, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField (output, TIFFTAG_SAMPLESPERPIXEL, 3); + + if (TIFFWriteEncodedStrip (output, 0, scaled->data()[0], _opt->out_size.width * _opt->out_size.height * 3) == 0) { + throw WriteFileError (tmp_file, 0); + } + + TIFFClose (output); + + boost::filesystem::rename (tmp_file, _opt->frame_out_path (frame, false)); + frame_done (); +} diff --git a/src/lib/tiff_encoder.h b/src/lib/tiff_encoder.h new file mode 100644 index 000000000..ec8e38011 --- /dev/null +++ b/src/lib/tiff_encoder.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/tiff_encoder.h + * @brief An encoder that writes TIFF files (and does nothing with audio). + */ + +#include +#include +#include "encoder.h" + +class FilmState; +class Log; + +/** @class TIFFEncoder + * @brief An encoder that writes TIFF files (and does nothing with audio). + */ +class TIFFEncoder : public Encoder +{ +public: + TIFFEncoder (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + void process_begin () {} + void process_video (boost::shared_ptr, int); + void process_audio (uint8_t *, int) {} + void process_end () {} +}; diff --git a/src/lib/timer.cc b/src/lib/timer.cc new file mode 100644 index 000000000..a45e80dcb --- /dev/null +++ b/src/lib/timer.cc @@ -0,0 +1,89 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/timer.cc + * @brief Some timing classes for debugging and profiling. + */ + +#include +#include +#include "timer.h" +#include "util.h" + +using namespace std; + +/** @param n Name to use when giving output */ +PeriodTimer::PeriodTimer (string n) + : _name (n) +{ + gettimeofday (&_start, 0); +} + +/** Destroy PeriodTimer and output the time elapsed since its construction */ +PeriodTimer::~PeriodTimer () +{ + struct timeval stop; + gettimeofday (&stop, 0); + cout << "T: " << _name << ": " << (seconds (stop) - seconds (_start)) << "\n"; +} + +/** @param n Name to use when giving output. + * @param s Initial state. + */ +StateTimer::StateTimer (string n, string s) + : _name (n) +{ + struct timeval t; + gettimeofday (&t, 0); + _time = seconds (t); + _state = s; +} + +/** @param s New state that the caller is in */ +void +StateTimer::set_state (string s) +{ + double const last = _time; + struct timeval t; + gettimeofday (&t, 0); + _time = seconds (t); + + if (_totals.find (s) == _totals.end ()) { + _totals[s] = 0; + } + + _totals[_state] += _time - last; + _state = s; +} + +/** Destroy StateTimer and generate a summary of the state timings on cout */ +StateTimer::~StateTimer () +{ + if (_state.empty ()) { + return; + } + + + set_state (""); + + cout << _name << ":\n"; + for (map::iterator i = _totals.begin(); i != _totals.end(); ++i) { + cout << "\t" << i->first << " " << i->second << "\n"; + } +} diff --git a/src/lib/timer.h b/src/lib/timer.h new file mode 100644 index 000000000..f509a7492 --- /dev/null +++ b/src/lib/timer.h @@ -0,0 +1,78 @@ +/* + Copyright (C) 2012 Carl Hetherington + Copyright (C) 2000-2007 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/timer.h + * @brief Some timing classes for debugging and profiling. + */ + +#ifndef DVDOMATIC_TIMER_H +#define DVDOMATIC_TIMER_H + +#include +#include +#include + +/** @class PeriodTimer + * @brief A class to allow timing of a period within the caller. + * + * On destruction, it will output the time since its construction. + */ +class PeriodTimer +{ +public: + PeriodTimer (std::string n); + ~PeriodTimer (); + +private: + + /** name to use when giving output */ + std::string _name; + /** time that this class was constructed */ + struct timeval _start; +}; + +/** @class StateTimer + * @brief A class to allow measurement of the amount of time a program + * spends in one of a set of states. + * + * Once constructed, the caller can call set_state() whenever + * its state changes. When StateTimer is destroyed, it will + * output (to cout) a summary of the time spent in each state. + */ +class StateTimer +{ +public: + StateTimer (std::string n, std::string s); + ~StateTimer (); + + void set_state (std::string s); + +private: + /** name to add to the output */ + std::string _name; + /** current state */ + std::string _state; + /** time that _state was entered */ + double _time; + /** time that has been spent in each state so far */ + std::map _totals; +}; + +#endif diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc new file mode 100644 index 000000000..652a18441 --- /dev/null +++ b/src/lib/transcode_job.cc @@ -0,0 +1,100 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/transcode_job.cc + * @brief A job which transcodes from one format to another. + */ + +#include +#include +#include "transcode_job.h" +#include "j2k_wav_encoder.h" +#include "film.h" +#include "format.h" +#include "transcoder.h" +#include "film_state.h" +#include "log.h" +#include "encoder_factory.h" + +using namespace std; +using namespace boost; + +/** @param s FilmState to use. + * @param o Options. + * @param l A log that we can write to. + */ +TranscodeJob::TranscodeJob (shared_ptr s, shared_ptr o, Log* l) + : Job (s, o, l) +{ + +} + +string +TranscodeJob::name () const +{ + stringstream s; + s << "Transcode " << _fs->name; + return s.str (); +} + +void +TranscodeJob::run () +{ + try { + + _log->log ("Transcode job starting"); + + _encoder = encoder_factory (_fs, _opt, _log); + Transcoder w (_fs, _opt, this, _log, _encoder); + w.go (); + set_progress (1); + set_state (FINISHED_OK); + + _log->log ("Transcode job completed successfully"); + + } catch (std::exception& e) { + + stringstream s; + set_progress (1); + set_state (FINISHED_ERROR); + + s << "Transcode job failed (" << e.what() << ")"; + _log->log (s.str ()); + + throw; + + } +} + +string +TranscodeJob::status () const +{ + if (!_encoder) { + return "0%"; + } + + float const fps = _encoder->current_frames_per_second (); + if (fps == 0) { + return Job::status (); + } + + stringstream s; + s << Job::status () << "; about " << fixed << setprecision (1) << fps << " frames per second."; + return s.str (); +} diff --git a/src/lib/transcode_job.h b/src/lib/transcode_job.h new file mode 100644 index 000000000..aa640f697 --- /dev/null +++ b/src/lib/transcode_job.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/transcode_job.h + * @brief A job which transcodes from one format to another. + */ + +#include +#include "job.h" + +class Encoder; + +/** @class TranscodeJob + * @brief A job which transcodes from one format to another. + */ +class TranscodeJob : public Job +{ +public: + TranscodeJob (boost::shared_ptr s, boost::shared_ptr o, Log* l); + + std::string name () const; + void run (); + std::string status () const; + +private: + boost::shared_ptr _encoder; +}; diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc new file mode 100644 index 000000000..3d71b68f5 --- /dev/null +++ b/src/lib/transcoder.cc @@ -0,0 +1,72 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/transcoder.cc + * @brief A class which takes a FilmState and some Options, then uses those to transcode a Film. + * + * A decoder is selected according to the content type, and the encoder can be specified + * as a parameter to the constructor. + */ + +#include +#include +#include "transcoder.h" +#include "encoder.h" +#include "decoder_factory.h" + +using namespace std; +using namespace boost; + +/** Construct a transcoder using a Decoder that we create and a supplied Encoder. + * @param s FilmState of Film that we are transcoding. + * @param o Options. + * @param j Job that we are running under, or 0. + * @param l Log that we can write to. + * @param e Encoder to use. + */ +Transcoder::Transcoder (shared_ptr s, shared_ptr o, Job* j, Log* l, shared_ptr e) + : _job (j) + , _encoder (e) + , _decoder (decoder_factory (s, o, j, l)) +{ + assert (_encoder); + + _decoder->Video.connect (sigc::mem_fun (*e, &Encoder::process_video)); + _decoder->Audio.connect (sigc::mem_fun (*e, &Encoder::process_audio)); +} + +/** Run the decoder, passing its output to the encoder, until the decoder + * has no more data to present. + */ +void +Transcoder::go () +{ + _encoder->process_begin (); + try { + _decoder->go (); + } catch (...) { + /* process_end() is important as the decoder may have worker + threads that need to be cleaned up. + */ + _encoder->process_end (); + throw; + } + + _encoder->process_end (); +} diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h new file mode 100644 index 000000000..ad6530914 --- /dev/null +++ b/src/lib/transcoder.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "decoder.h" + +/** @file src/transcoder.h + * @brief A class which takes a FilmState and some Options, then uses those to transcode a Film. + * + * A decoder is selected according to the content type, and the encoder can be specified + * as a parameter to the constructor. + */ + +class Film; +class Job; +class Encoder; +class FilmState; + +/** @class Transcoder + * @brief A class which takes a FilmState and some Options, then uses those to transcode a Film. + * + * A decoder is selected according to the content type, and the encoder can be specified + * as a parameter to the constructor. + */ +class Transcoder +{ +public: + Transcoder (boost::shared_ptr s, boost::shared_ptr o, Job* j, Log* l, boost::shared_ptr e); + + void go (); + + /** @return Our decoder */ + boost::shared_ptr decoder () { + return _decoder; + } + +protected: + /** A Job that is running this Transcoder, or 0 */ + Job* _job; + /** The encoder that we will use */ + boost::shared_ptr _encoder; + /** The decoder that we will use */ + boost::shared_ptr _decoder; +}; diff --git a/src/lib/trim_action.h b/src/lib/trim_action.h new file mode 100644 index 000000000..405d31bbc --- /dev/null +++ b/src/lib/trim_action.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef DVDOMATIC_TRIM_ACTION_H +#define DVDOMATIC_TRIM_ACTION_H + +enum TrimAction { + CUT, ///< cut everything out after dcp_frames + BLACK_OUT ///< black out after dcp_frames so that the film stays the same length (and audio continues) +}; + +#endif diff --git a/src/lib/util.cc b/src/lib/util.cc new file mode 100644 index 000000000..b8531e26b --- /dev/null +++ b/src/lib/util.cc @@ -0,0 +1,496 @@ +/* + Copyright (C) 2012 Carl Hetherington + Copyright (C) 2000-2007 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/lib/util.cc + * @brief Some utility functions and classes. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +} +#include "util.h" +#include "exceptions.h" +#include "scaler.h" +#include "format.h" +#include "dcp_content_type.h" +#include "filter.h" +#include "screen.h" +#include "film_state.h" +#include "player_manager.h" + +#ifdef DEBUG_HASH +#include +#endif + +using namespace std; +using namespace boost; + +/** Convert some number of seconds to a string representation + * in hours, minutes and seconds. + * + * @param s Seconds. + * @return String of the form H:M:S (where H is hours, M + * is minutes and S is seconds). + */ +string +seconds_to_hms (int s) +{ + int m = s / 60; + s -= (m * 60); + int h = m / 60; + m -= (h * 60); + + stringstream hms; + hms << h << ":"; + hms.width (2); + hms << setfill ('0') << m << ":"; + hms.width (2); + hms << setfill ('0') << s; + + return hms.str (); +} + +/** @param s Number of seconds. + * @return String containing an approximate description of s (e.g. "about 2 hours") + */ +string +seconds_to_approximate_hms (int s) +{ + int m = s / 60; + s -= (m * 60); + int h = m / 60; + m -= (h * 60); + + stringstream ap; + + if (h > 0) { + if (m > 30) { + ap << (h + 1) << " hours"; + } else { + if (h == 1) { + ap << "1 hour"; + } else { + ap << h << " hours"; + } + } + } else if (m > 0) { + if (m == 1) { + ap << "1 minute"; + } else { + ap << m << " minutes"; + } + } else { + ap << s << " seconds"; + } + + return ap.str (); +} + +/** @param l Mangled C++ identifier. + * @return Demangled version. + */ +static string +demangle (string l) +{ + string::size_type const b = l.find_first_of ("("); + if (b == string::npos) { + return l; + } + + string::size_type const p = l.find_last_of ("+"); + if (p == string::npos) { + return l; + } + + if ((p - b) <= 1) { + return l; + } + + string const fn = l.substr (b + 1, p - b - 1); + + int status; + try { + + char* realname = abi::__cxa_demangle (fn.c_str(), 0, 0, &status); + string d (realname); + free (realname); + return d; + + } catch (std::exception) { + + } + + return l; +} + +/** Write a stacktrace to an ostream. + * @param out Stream to write to. + * @param levels Number of levels to go up the call stack. + */ +void +stacktrace (ostream& out, int levels) +{ + void *array[200]; + size_t size; + char **strings; + size_t i; + + size = backtrace (array, 200); + strings = backtrace_symbols (array, size); + + if (strings) { + for (i = 0; i < size && (levels == 0 || i < size_t(levels)); i++) { + out << " " << demangle (strings[i]) << endl; + } + + free (strings); + } +} + +/** @param s Sample format. + * @return String representation. + */ +string +audio_sample_format_to_string (AVSampleFormat s) +{ + /* Our sample format handling is not exactly complete */ + + switch (s) { + case AV_SAMPLE_FMT_S16: + return "S16"; + default: + break; + } + + return "Unknown"; +} + +/** @param s String representation of a sample format, as returned from audio_sample_format_to_string(). + * @return Sample format. + */ +AVSampleFormat +audio_sample_format_from_string (string s) +{ + if (s == "S16") { + return AV_SAMPLE_FMT_S16; + } + + return AV_SAMPLE_FMT_NONE; +} + +/** @return Version of OpenDCP that is on the path (and hence that we will use) */ +static string +opendcp_version () +{ + FILE* f = popen ("opendcp_xml", "r"); + if (f == 0) { + throw EncodeError ("could not run opendcp_xml to check version"); + } + + string version = "unknown"; + + while (!feof (f)) { + char* buf = 0; + size_t n = 0; + ssize_t const r = getline (&buf, &n, f); + if (r > 0) { + string s (buf); + vector b; + split (b, s, is_any_of (" ")); + if (b.size() >= 3 && b[0] == "OpenDCP" && b[1] == "version") { + version = b[2]; + } + free (buf); + } + } + + pclose (f); + + return version; +} + +/** @return Version of vobcopy that is on the path (and hence that we will use) */ +static string +vobcopy_version () +{ + FILE* f = popen ("vobcopy -V 2>&1", "r"); + if (f == 0) { + throw EncodeError ("could not run vobcopy to check version"); + } + + string version = "unknown"; + + while (!feof (f)) { + char* buf = 0; + size_t n = 0; + ssize_t const r = getline (&buf, &n, f); + if (r > 0) { + string s (buf); + vector b; + split (b, s, is_any_of (" ")); + if (b.size() >= 2 && b[0] == "Vobcopy") { + version = b[1]; + } + free (buf); + } + } + + pclose (f); + + return version; +} + +/** @param v Version as used by FFmpeg. + * @return A string representation of v. + */ +static string +ffmpeg_version_to_string (int v) +{ + stringstream s; + s << ((v & 0xff0000) >> 16) << "." << ((v & 0xff00) >> 8) << "." << (v & 0xff); + return s.str (); +} + +/** Return a user-readable string summarising the versions of our dependencies */ +string +dependency_version_summary () +{ + stringstream s; + s << "libopenjpeg " << opj_version () << ", " + << "opendcp " << opendcp_version () << ", " + << "vobcopy " << vobcopy_version() << ", " + << "libswresample " << ffmpeg_version_to_string (swresample_version()) << ", " + << "libavcodec " << ffmpeg_version_to_string (avcodec_version()) << ", " + << "libavfilter " << ffmpeg_version_to_string (avfilter_version()) << ", " + << "libavformat " << ffmpeg_version_to_string (avformat_version()) << ", " + << "libavutil " << ffmpeg_version_to_string (avutil_version()) << ", " + << "libpostproc " << ffmpeg_version_to_string (postproc_version()) << ", " + << "libswscale " << ffmpeg_version_to_string (swscale_version()) << ", " + << MagickVersion << ", " + << "libssh " << ssh_version (0); + + return s.str (); +} + +/** Write some data to a socket. + * @param fd Socket file descriptor. + * @param data Data. + * @param size Amount to write, in bytes. + */ +void +socket_write (int fd, uint8_t const * data, int size) +{ + uint8_t const * p = data; + while (size) { + int const n = send (fd, p, size, MSG_NOSIGNAL); + if (n < 0) { + stringstream s; + s << "could not write (" << strerror (errno) << ")"; + throw NetworkError (s.str ()); + } + + size -= n; + p += n; + } +} + +double +seconds (struct timeval t) +{ + return t.tv_sec + (double (t.tv_usec) / 1e6); +} + +/** @param fd File descriptor to read from */ +SocketReader::SocketReader (int fd) + : _fd (fd) + , _buffer_data (0) +{ + +} + +/** Mark some data as being `consumed', so that it will not be returned + * as data again. + * @param size Amount of data to consume, in bytes. + */ +void +SocketReader::consume (int size) +{ + assert (_buffer_data >= size); + + _buffer_data -= size; + if (_buffer_data > 0) { + /* Shift still-valid data to the start of the buffer */ + memmove (_buffer, _buffer + size, _buffer_data); + } +} + +/** Read a definite amount of data from our socket, and mark + * it as consumed. + * @param data Where to put the data. + * @param size Number of bytes to read. + */ +void +SocketReader::read_definite_and_consume (uint8_t* data, int size) +{ + int const from_buffer = min (_buffer_data, size); + if (from_buffer > 0) { + /* Get data from our buffer */ + memcpy (data, _buffer, from_buffer); + consume (from_buffer); + /* Update our output state */ + data += from_buffer; + size -= from_buffer; + } + + /* read() the rest */ + while (size > 0) { + int const n = ::read (_fd, data, size); + if (n <= 0) { + throw NetworkError ("could not read"); + } + + data += n; + size -= n; + } +} + +/** Read as much data as is available, up to some limit. + * @param data Where to put the data. + * @param size Maximum amount of data to read. + */ +void +SocketReader::read_indefinite (uint8_t* data, int size) +{ + assert (size < int (sizeof (_buffer))); + + /* Amount of extra data we need to read () */ + int to_read = size - _buffer_data; + while (to_read > 0) { + /* read as much of it as we can (into our buffer) */ + int const n = ::read (_fd, _buffer + _buffer_data, to_read); + if (n <= 0) { + throw NetworkError ("could not read"); + } + + to_read -= n; + _buffer_data += n; + } + + assert (_buffer_data >= size); + + /* copy data into the output buffer */ + assert (size >= _buffer_data); + memcpy (data, _buffer, size); +} + +void +sigchld_handler (int, siginfo_t* info, void *) +{ + PlayerManager::instance()->child_exited (info->si_pid); +} + +/** Call the required functions to set up DVD-o-matic's static arrays, etc. */ +void +dvdomatic_setup () +{ + Format::setup_formats (); + DCPContentType::setup_dcp_content_types (); + Scaler::setup_scalers (); + Filter::setup_filters (); + + struct sigaction sa; + sa.sa_flags = SA_SIGINFO; + sigemptyset (&sa.sa_mask); + sa.sa_sigaction = sigchld_handler; + sigaction (SIGCHLD, &sa, 0); +} + +string +crop_string (Position start, Size size) +{ + stringstream s; + s << "crop=" << size.width << ":" << size.height << ":" << start.x << ":" << start.y; + return s.str (); +} + +vector +split_at_spaces_considering_quotes (string s) +{ + vector out; + bool in_quotes = false; + string c; + for (string::size_type i = 0; i < s.length(); ++i) { + if (s[i] == ' ' && !in_quotes) { + out.push_back (c); + c = ""; + } else if (s[i] == '"') { + in_quotes = !in_quotes; + } else { + c += s[i]; + } + } + + out.push_back (c); + return out; +} + +#ifdef DEBUG_HASH +void +md5_data (string title, void const * data, int size) +{ + MHASH ht = mhash_init (MHASH_MD5); + if (ht == MHASH_FAILED) { + throw EncodeError ("could not create hash thread"); + } + + mhash (ht, data, size); + + uint8_t hash[16]; + mhash_deinit (ht, hash); + + printf ("%s [%d]: ", title.c_str (), size); + for (int i = 0; i < int (mhash_get_block_size (MHASH_MD5)); ++i) { + printf ("%.2x", hash[i]); + } + printf ("\n"); +} +#endif + diff --git a/src/lib/util.h b/src/lib/util.h new file mode 100644 index 000000000..3901e7ec6 --- /dev/null +++ b/src/lib/util.h @@ -0,0 +1,121 @@ +/* + Copyright (C) 2012 Carl Hetherington + Copyright (C) 2000-2007 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/util.h + * @brief Some utility functions and classes. + */ + +#ifndef DVDOMATIC_UTIL_H +#define DVDOMATIC_UTIL_H + +#include +#include +#include +extern "C" { +#include +#include +} + +class Scaler; + +extern std::string seconds_to_hms (int); +extern std::string seconds_to_approximate_hms (int); +extern void stacktrace (std::ostream &, int); +extern std::string audio_sample_format_to_string (AVSampleFormat); +extern AVSampleFormat audio_sample_format_from_string (std::string); +extern std::string dependency_version_summary (); +extern void socket_write (int, uint8_t const *, int); +extern double seconds (struct timeval); +extern void dvdomatic_setup (); +extern std::vector split_at_spaces_considering_quotes (std::string); + +enum ContentType { + STILL, + VIDEO +}; + +#ifdef DEBUG_HASH +extern void md5_data (std::string, void const *, int); +#endif + +/** @class SocketReader + * @brief A helper class from reading from sockets. + */ +class SocketReader +{ +public: + SocketReader (int); + + void read_definite_and_consume (uint8_t *, int); + void read_indefinite (uint8_t *, int); + void consume (int); + +private: + /** file descriptor we are reading from */ + int _fd; + /** a buffer for small reads */ + uint8_t _buffer[256]; + /** amount of valid data in the buffer */ + int _buffer_data; +}; + +/** @class Size + * @brief Representation of the size of something */ +struct Size +{ + /** Construct a zero Size */ + Size () + : width (0) + , height (0) + {} + + /** @param w Width. + * @param h Height. + */ + Size (int w, int h) + : width (w) + , height (h) + {} + + /** width */ + int width; + /** height */ + int height; +}; + +struct Position +{ + Position () + : x (0) + , y (0) + {} + + Position (int x_, int y_) + : x (x_) + , y (y_) + {} + + int x; + int y; +}; + +extern std::string crop_string (Position, Size); + +#endif diff --git a/src/lib/wscript b/src/lib/wscript new file mode 100644 index 000000000..ec5a723e4 --- /dev/null +++ b/src/lib/wscript @@ -0,0 +1,52 @@ +def build(bld): + obj = bld(features = 'cxx cxxshlib') + obj.name = 'libdvdomatic' + obj.export_includes = ['.'] + obj.uselib = 'AVCODEC AVUTIL AVFORMAT AVFILTER SWSCALE SWRESAMPLE SNDFILE BOOST_FILESYSTEM BOOST_THREAD OPENJPEG POSTPROC TIFF SIGC++ MAGICK SSH' + if bld.env.DEBUG_HASH: + obj.uselib += ' MHASH' + obj.source = """ + ab_transcode_job.cc + ab_transcoder.cc + config.cc + copy_from_dvd_job.cc + dcp_content_type.cc + dcp_video_frame.cc + decoder.cc + decoder_factory.cc + delay_line.cc + dvd.cc + encoder.cc + encoder_factory.cc + examine_content_job.cc + ffmpeg_decoder.cc + film.cc + film_state.cc + filter.cc + format.cc + image.cc + imagemagick_decoder.cc + j2k_still_encoder.cc + j2k_wav_encoder.cc + job.cc + job_manager.cc + log.cc + lut.cc + make_dcp_job.cc + make_mxf_job.cc + player.cc + player_manager.cc + scaler.cc + screen.cc + server.cc + scp_dcp_job.cc + shell_command_job.cc + thumbs_job.cc + tiff_decoder.cc + tiff_encoder.cc + timer.cc + transcode_job.cc + transcoder.cc + util.cc + """ + obj.target = 'dvdomatic' diff --git a/src/tools/alignomatic.cc b/src/tools/alignomatic.cc new file mode 100644 index 000000000..9cab6c430 --- /dev/null +++ b/src/tools/alignomatic.cc @@ -0,0 +1,317 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/util.h" +#include "lib/config.h" +#include "lib/screen.h" +#include "lib/format.h" +#include "gtk/gtk_util.h" +#include "gtk/alignment.h" + +using namespace std; +using namespace boost; + +static Alignment* alignment = 0; +static Gtk::ComboBoxText* format_combo = 0; +static Format const * format = 0; +static Gtk::ComboBoxText* screen_combo = 0; +static shared_ptr screen; +static Gtk::Button* add_screen = 0; +static Gtk::Entry* screen_name = 0; +static Gtk::SpinButton* x_position = 0; +static Gtk::SpinButton* y_position = 0; +static Gtk::SpinButton* width = 0; +static Gtk::Button* calculate_width = 0; +static Gtk::SpinButton* height = 0; +static Gtk::Button* calculate_height = 0; +static Gtk::Button* save = 0; +static bool screen_dirty = false; + +enum GeometryPart { + GEOMETRY_PART_X, + GEOMETRY_PART_Y, + GEOMETRY_PART_WIDTH, + GEOMETRY_PART_HEIGHT +}; + +void +update_sensitivity () +{ + bool const dims = format && screen; + + x_position->set_sensitive (dims); + y_position->set_sensitive (dims); + width->set_sensitive (dims); + calculate_width->set_sensitive (dims); + height->set_sensitive (dims); + calculate_height->set_sensitive (dims); + + screen_name->set_sensitive (screen); + save->set_sensitive (screen_dirty); +} + +void +update_alignment () +{ + if (!screen || !format) { + return; + } + + delete alignment; + alignment = new Alignment (screen->position (format), screen->size (format)); + alignment->set_text_line (0, screen->name ()); + alignment->set_text_line (1, format->name ()); +} + +void +update_entries () +{ + if (!screen || !format) { + return; + } + + Position p = screen->position (format); + x_position->set_value (p.x); + y_position->set_value (p.y); + Size s = screen->size (format); + width->set_value (s.width); + height->set_value (s.height); + + update_sensitivity (); +} + +void +screen_changed () +{ + if (screen_combo->get_active_row_number() < 0) { + return; + } + + vector > screens = Config::instance()->screens (); + + if (screens[screen_combo->get_active_row_number()] == screen) { + return; + } + + screen = screens[screen_combo->get_active_row_number()]; + + update_entries (); + update_alignment (); + + screen_name->set_text (screen->name ()); + + screen_dirty = false; + update_sensitivity (); +} + +void +format_changed () +{ + vector formats = Format::all (); + + if (formats[format_combo->get_active_row_number()] == format) { + return; + } + + format = formats[format_combo->get_active_row_number()]; + + update_entries (); + update_alignment (); + update_sensitivity (); +} + +void +geometry_changed (GeometryPart p) +{ + if (p == GEOMETRY_PART_X && screen->position(format).x == x_position->get_value_as_int()) { + return; + } + + if (p == GEOMETRY_PART_Y && screen->position(format).y == y_position->get_value_as_int()) { + return; + } + + if (p == GEOMETRY_PART_WIDTH && screen->size(format).width == width->get_value_as_int()) { + return; + } + + if (p == GEOMETRY_PART_HEIGHT && screen->size(format).height == height->get_value_as_int()) { + return; + } + + screen->set_geometry ( + format, + Position (x_position->get_value_as_int(), y_position->get_value_as_int()), + Size (width->get_value_as_int(), height->get_value_as_int()) + ); + + update_alignment (); + + screen_dirty = true; + update_sensitivity (); +} + +void +save_clicked () +{ + Config::instance()->write (); + screen_dirty = false; + update_sensitivity (); +} + +void +calculate_width_clicked () +{ + width->set_value (height->get_value_as_int() * format->ratio_as_float ()); +} + +void +calculate_height_clicked () +{ + height->set_value (width->get_value_as_int() / format->ratio_as_float ()); +} + +void +update_screen_combo () +{ + screen_combo->clear (); + + vector > screens = Config::instance()->screens (); + for (vector >::iterator i = screens.begin(); i != screens.end(); ++i) { + screen_combo->append_text ((*i)->name ()); + } +} + +void +screen_name_changed () +{ + screen->set_name (screen_name->get_text ()); + + int const r = screen_combo->get_active_row_number (); + update_screen_combo (); + screen_combo->set_active (r); + + screen_dirty = true; + update_sensitivity (); +} + +void +add_screen_clicked () +{ + shared_ptr s (new Screen ("New Screen")); + vector > screens = Config::instance()->screens (); + screens.push_back (s); + Config::instance()->set_screens (screens); + update_screen_combo (); + screen_combo->set_active (screens.size() - 1); +} + +int +main (int argc, char* argv[]) +{ + dvdomatic_setup (); + + Gtk::Main kit (argc, argv); + + Gtk::Dialog dialog ("Align-o-matic"); + + screen_combo = Gtk::manage (new Gtk::ComboBoxText); + update_screen_combo (); + screen_combo->signal_changed().connect (sigc::ptr_fun (&screen_changed)); + + add_screen = Gtk::manage (new Gtk::Button ("Add")); + add_screen->signal_clicked().connect (sigc::ptr_fun (&add_screen_clicked)); + + screen_name = Gtk::manage (new Gtk::Entry ()); + screen_name->signal_changed().connect (sigc::ptr_fun (&screen_name_changed)); + + format_combo = Gtk::manage (new Gtk::ComboBoxText); + vector formats = Format::all (); + for (vector::iterator i = formats.begin(); i != formats.end(); ++i) { + format_combo->append_text ((*i)->name ()); + } + + format_combo->signal_changed().connect (sigc::ptr_fun (&format_changed)); + + save = Gtk::manage (new Gtk::Button ("Save")); + save->signal_clicked().connect (sigc::ptr_fun (&save_clicked)); + + x_position = Gtk::manage (new Gtk::SpinButton ()); + x_position->signal_value_changed().connect (sigc::bind (ptr_fun (&geometry_changed), GEOMETRY_PART_X)); + x_position->set_range (0, 2048); + x_position->set_increments (1, 16); + y_position = Gtk::manage (new Gtk::SpinButton ()); + y_position->signal_value_changed().connect (sigc::bind (sigc::ptr_fun (&geometry_changed), GEOMETRY_PART_Y)); + y_position->set_range (0, 1080); + y_position->set_increments (1, 16); + width = Gtk::manage (new Gtk::SpinButton ()); + width->signal_value_changed().connect (sigc::bind (sigc::ptr_fun (&geometry_changed), GEOMETRY_PART_WIDTH)); + width->set_range (0, 2048); + width->set_increments (1, 16); + height = Gtk::manage (new Gtk::SpinButton ()); + height->signal_value_changed().connect (sigc::bind (sigc::ptr_fun (&geometry_changed), GEOMETRY_PART_HEIGHT)); + height->set_range (0, 1080); + height->set_increments (1, 16); + + calculate_width = Gtk::manage (new Gtk::Button ("Calculate")); + calculate_width->signal_clicked().connect (sigc::ptr_fun (&calculate_width_clicked)); + calculate_height = Gtk::manage (new Gtk::Button ("Calculate")); + calculate_height->signal_clicked().connect (sigc::ptr_fun (&calculate_height_clicked)); + + Gtk::Table table; + table.set_row_spacings (12); + table.set_col_spacings (12); + table.set_border_width (12); + + int n = 0; + table.attach (left_aligned_label ("Screen"), 0, 1, n, n + 1); + table.attach (*screen_combo, 1, 2, n, n + 1); + table.attach (*add_screen, 2, 3, n, n + 1); + ++n; + table.attach (left_aligned_label ("Screen Name"), 0, 1, n, n + 1); + table.attach (*screen_name, 1, 2, n, n + 1); + ++n; + table.attach (left_aligned_label ("Format"), 0, 1, n, n + 1); + table.attach (*format_combo, 1, 2, n, n + 1); + ++n; + table.attach (left_aligned_label ("x"), 0, 1, n, n + 1); + table.attach (*x_position, 1, 2, n, n + 1); + ++n; + table.attach (left_aligned_label ("y"), 0, 1, n, n + 1); + table.attach (*y_position, 1, 2, n, n + 1); + ++n; + table.attach (left_aligned_label ("Width"), 0, 1, n, n + 1); + table.attach (*width, 1, 2, n, n + 1); + table.attach (*calculate_width, 2, 3, n, n + 1); + ++n; + table.attach (left_aligned_label ("Height"), 0, 1, n, n + 1); + table.attach (*height, 1, 2, n, n + 1); + table.attach (*calculate_height, 2, 3, n, n + 1); + ++n; + + dialog.get_vbox()->pack_start (table, false, false); + dialog.add_action_widget (*save, 0); + update_sensitivity (); + dialog.show_all (); + + Gtk::Main::run (dialog); + + return 0; +} diff --git a/src/tools/dvdomatic.cc b/src/tools/dvdomatic.cc new file mode 100644 index 000000000..803eec3c4 --- /dev/null +++ b/src/tools/dvdomatic.cc @@ -0,0 +1,328 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include "gtk/film_viewer.h" +#include "gtk/film_editor.h" +#include "gtk/film_player.h" +#include "gtk/job_manager_view.h" +#include "gtk/config_dialog.h" +#include "gtk/gpl.h" +#include "gtk/job_wrapper.h" +#include "lib/film.h" +#include "lib/format.h" +#include "lib/config.h" +#include "lib/filter.h" +#include "lib/util.h" +#include "lib/scaler.h" + +using namespace std; +using namespace boost; + +static Gtk::Window* window = 0; +static FilmViewer* film_viewer = 0; +static FilmEditor* film_editor = 0; +static FilmPlayer* film_player = 0; +static Film* film = 0; + +class FilmChangedDialog : public Gtk::MessageDialog +{ +public: + FilmChangedDialog () + : Gtk::MessageDialog ("", false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_NONE) + { + stringstream s; + s << "Save changes to film \"" << film->name() << "\" before closing?"; + set_message (s.str ()); + add_button ("Close _without saving", Gtk::RESPONSE_NO); + add_button ("_Cancel", Gtk::RESPONSE_CANCEL); + add_button ("_Save", Gtk::RESPONSE_YES); + } +}; + +bool +maybe_save_then_delete_film () +{ + if (!film) { + return false; + } + + if (film->dirty ()) { + FilmChangedDialog d; + switch (d.run ()) { + case Gtk::RESPONSE_CANCEL: + return true; + case Gtk::RESPONSE_YES: + film->write_metadata (); + break; + case Gtk::RESPONSE_NO: + return false; + } + } + + delete film; + film = 0; + return false; +} + +void +file_new () +{ + Gtk::FileChooserDialog c (*window, "New Film", Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER); + c.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); + c.add_button ("C_reate", Gtk::RESPONSE_ACCEPT); + + int const r = c.run (); + if (r == Gtk::RESPONSE_ACCEPT) { + if (maybe_save_then_delete_film ()) { + return; + } + film = new Film (c.get_filename ()); +#if BOOST_FILESYSTEM_VERSION == 3 + film->set_name (filesystem::path (c.get_filename().c_str()).filename().generic_string()); +#else + film->set_name (filesystem::path (c.get_filename().c_str()).filename()); +#endif + film_viewer->set_film (film); + film_editor->set_film (film); + } +} + +void +file_open () +{ + Gtk::FileChooserDialog c (*window, "Open Film", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); + c.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); + c.add_button ("_Open", Gtk::RESPONSE_ACCEPT); + + int const r = c.run (); + if (r == Gtk::RESPONSE_ACCEPT) { + if (maybe_save_then_delete_film ()) { + return; + } + film = new Film (c.get_filename ()); + film_viewer->set_film (film); + film_editor->set_film (film); + } +} + +void +file_save () +{ + film->write_metadata (); +} + +void +file_quit () +{ + if (maybe_save_then_delete_film ()) { + return; + } + + Gtk::Main::quit (); +} + +void +edit_preferences () +{ + ConfigDialog d; + d.run (); + Config::instance()->write (); +} + +void +jobs_make_dcp () +{ + JobWrapper::make_dcp (film, true); +} + +void +jobs_make_dcp_from_existing_transcode () +{ + JobWrapper::make_dcp (film, false); +} + +void +jobs_copy_from_dvd () +{ + film->copy_from_dvd (); +} + +void +jobs_send_dcp_to_tms () +{ + film->send_dcp_to_tms (); +} + +void +jobs_examine_content () +{ + film->examine_content (); +} + +void +help_about () +{ + Gtk::AboutDialog d; + d.set_name ("DVD-o-matic"); + d.set_version (DVDOMATIC_VERSION); + + stringstream s; + s << "DCP generation from arbitrary formats\n\n" + << "Using " << dependency_version_summary() << "\n"; + d.set_comments (s.str ()); + + vector authors; + authors.push_back ("Carl Hetherington"); + authors.push_back ("Terrence Meiczinger"); + authors.push_back ("Paul Davis"); + d.set_authors (authors); + + d.set_website ("http://carlh.net/software/dvdomatic"); + d.set_license (gpl); + + d.run (); +} + +void +setup_menu (Gtk::MenuBar& m) +{ + using namespace Gtk::Menu_Helpers; + + Gtk::Menu* file = manage (new Gtk::Menu); + MenuList& file_items (file->items ()); + file_items.push_back (MenuElem ("_New...", sigc::ptr_fun (file_new))); + file_items.push_back (MenuElem ("_Open...", sigc::ptr_fun (file_open))); + file_items.push_back (SeparatorElem ()); + file_items.push_back (MenuElem ("_Save", sigc::ptr_fun (file_save))); + file_items.push_back (SeparatorElem ()); + file_items.push_back (MenuElem ("_Quit", sigc::ptr_fun (file_quit))); + + Gtk::Menu* edit = manage (new Gtk::Menu); + MenuList& edit_items (edit->items ()); + edit_items.push_back (MenuElem ("_Preferences...", sigc::ptr_fun (edit_preferences))); + + Gtk::Menu* jobs = manage (new Gtk::Menu); + MenuList& jobs_items (jobs->items ()); + jobs_items.push_back (MenuElem ("_Make DCP", sigc::ptr_fun (jobs_make_dcp))); + jobs_items.push_back (MenuElem ("_Send DCP to TMS", sigc::ptr_fun (jobs_send_dcp_to_tms))); + jobs_items.push_back (MenuElem ("Copy from _DVD", sigc::ptr_fun (jobs_copy_from_dvd))); + jobs_items.push_back (MenuElem ("_Examine content", sigc::ptr_fun (jobs_examine_content))); + jobs_items.push_back (MenuElem ("Make DCP from _existing transcode", sigc::ptr_fun (jobs_make_dcp_from_existing_transcode))); + + Gtk::Menu* help = manage (new Gtk::Menu); + MenuList& help_items (help->items ()); + help_items.push_back (MenuElem ("_About", sigc::ptr_fun (help_about))); + + MenuList& items (m.items ()); + items.push_back (MenuElem ("_File", *file)); + items.push_back (MenuElem ("_Edit", *edit)); + items.push_back (MenuElem ("_Jobs", *jobs)); + items.push_back (MenuElem ("_Help", *help)); +} + +bool +window_closed (GdkEventAny *) +{ + if (maybe_save_then_delete_film ()) { + return true; + } + + return false; +} + +void +file_changed (string f) +{ + stringstream s; + s << "DVD-o-matic"; + if (!f.empty ()) { + s << " — " << f; + } + + window->set_title (s.str ()); +} + +int +main (int argc, char* argv[]) +{ + dvdomatic_setup (); + + Gtk::Main kit (argc, argv); + + if (argc == 2 && boost::filesystem::is_directory (argv[1])) { + film = new Film (argv[1]); + } + + window = new Gtk::Window (); + window->signal_delete_event().connect (sigc::ptr_fun (window_closed)); + + film_viewer = new FilmViewer (film); + film_editor = new FilmEditor (film); + film_player = new FilmPlayer (film); + JobManagerView jobs_view; + + window->set_title ("DVD-o-matic"); + + Gtk::VBox vbox; + + Gtk::MenuBar menu_bar; + vbox.pack_start (menu_bar, false, false); + setup_menu (menu_bar); + + Gtk::HBox hbox; + hbox.set_spacing (12); + + Gtk::VBox left_vbox; + left_vbox.set_spacing (12); + left_vbox.pack_start (film_editor->widget (), false, false); +// left_vbox.pack_start (film_player->widget (), false, false); + hbox.pack_start (left_vbox, false, false); + + Gtk::VBox right_vbox; + right_vbox.pack_start (film_viewer->widget (), true, true); + right_vbox.pack_start (jobs_view.widget(), false, false); + hbox.pack_start (right_vbox, true, true); + + vbox.pack_start (hbox, true, true); + + window->add (vbox); + window->show_all (); + + /* XXX: calling these here is a bit of a hack */ + film_editor->setup_visibility (); + film_player->setup_visibility (); + film_viewer->setup_visibility (); + + film_editor->FileChanged.connect (ptr_fun (file_changed)); + if (film) { + file_changed (film->directory ()); + } else { + file_changed (""); + } + + /* XXX this should be in JobManagerView, shouldn't it? */ + Glib::signal_timeout().connect (sigc::bind_return (sigc::mem_fun (jobs_view, &JobManagerView::update), true), 1000); + + window->maximize (); + Gtk::Main::run (*window); + + return 0; +} diff --git a/src/tools/fixlengths.cc b/src/tools/fixlengths.cc new file mode 100644 index 000000000..52696cd8b --- /dev/null +++ b/src/tools/fixlengths.cc @@ -0,0 +1,209 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include "lib/film.h" + +using namespace std; +using namespace boost; + +void +help (string n) +{ + cerr << "Syntax: " << n << " [--help] [--chop-audio-start] [--chop-audio-end] --film \n"; +} + +void +sox (vector const & audio_files, string const & process) +{ + for (vector::const_iterator i = audio_files.begin(); i != audio_files.end(); ++i) { + stringstream cmd; + cmd << "sox \"" << *i << "\" -t wav \"" << *i << ".tmp\" " << process; + cout << "> " << cmd.str() << "\n"; + int r = ::system (cmd.str().c_str()); + if (r == -1 || WEXITSTATUS (r) != 0) { + cerr << "fixlengths: call to sox failed.\n"; + exit (EXIT_FAILURE); + } + filesystem::rename (*i + ".tmp", *i); + } +} + +int main (int argc, char* argv[]) +{ + string film_dir; + bool chop_audio_start = false; + bool chop_audio_end = false; + bool pad_audio_end = false; + + while (1) { + static struct option long_options[] = { + { "help", no_argument, 0, 'h' }, + { "chop-audio-start", no_argument, 0, 'c' }, + { "chop-audio-end", no_argument, 0, 'd' }, + { "pad-audio-end", no_argument, 0, 'p' }, + { "film", required_argument, 0, 'f' }, + { 0, 0, 0, 0 } + }; + + int option_index = 0; + int c = getopt_long (argc, argv, "hcf:", long_options, &option_index); + + if (c == -1) { + break; + } + + switch (c) { + case 'h': + help (argv[0]); + exit (EXIT_SUCCESS); + case 'c': + chop_audio_start = true; + break; + case 'd': + chop_audio_end = true; + break; + case 'p': + pad_audio_end = true; + break; + case 'f': + film_dir = optarg; + break; + } + } + + if (film_dir.empty ()) { + help (argv[0]); + exit (EXIT_FAILURE); + } + + dvdomatic_setup (); + + Film* film = 0; + try { + film = new Film (film_dir, true); + } catch (std::exception& e) { + cerr << argv[0] << ": error reading film `" << film_dir << "' (" << e.what() << ")\n"; + exit (EXIT_FAILURE); + } + + /* XXX: hack */ + int video_frames = 0; + for (filesystem::directory_iterator i = filesystem::directory_iterator (film->j2k_dir()); i != filesystem::directory_iterator(); ++i) { + ++video_frames; + } + + float const video_length = video_frames / film->frames_per_second(); + cout << "Video length: " << video_length << " (" << video_frames << " frames at " << film->frames_per_second() << " frames per second).\n"; + + vector audio_files = film->audio_files (); + if (audio_files.empty ()) { + cerr << argv[0] << ": film has no audio files.\n"; + exit (EXIT_FAILURE); + } + + sf_count_t audio_frames = 0; + int audio_sample_rate = 0; + + for (vector::iterator i = audio_files.begin(); i != audio_files.end(); ++i) { + SF_INFO info; + info.format = 0; + SNDFILE* sf = sf_open (i->c_str(), SFM_READ, &info); + if (sf == 0) { + cerr << argv[0] << ": could not open WAV file for reading.\n"; + exit (EXIT_FAILURE); + } + + if (audio_frames == 0) { + audio_frames = info.frames; + } + + if (audio_sample_rate == 0) { + audio_sample_rate = info.samplerate; + } + + if (audio_frames != info.frames) { + cerr << argv[0] << ": audio files have differing lengths.\n"; + exit (EXIT_FAILURE); + } + + if (audio_sample_rate != info.samplerate) { + cerr << argv[0] << ": audio files have differing sample rates.\n"; + exit (EXIT_FAILURE); + } + + sf_close (sf); + } + + float const audio_length = audio_frames / float (audio_sample_rate); + + cout << "Audio length: " << audio_length << " (" << audio_frames << " frames at " << audio_sample_rate << " frames per second).\n"; + + cout << "\n"; + + if (audio_length > video_length) { + cout << setprecision (3); + cout << "Audio " << (audio_length - video_length) << "s longer than video.\n"; + + float const delta = audio_length - video_length; + int const delta_samples = delta * audio_sample_rate; + + if (chop_audio_start) { + cout << "Chopping difference off the start of the audio.\n"; + + stringstream s; + s << "trim " << delta_samples << "s"; + sox (audio_files, s.str ()); + + } else if (chop_audio_end) { + cout << "Chopping difference off the end of the audio.\n"; + + stringstream s; + s << "reverse trim " << delta_samples << "s reverse"; + sox (audio_files, s.str ()); + + } else { + cout << "Re-run with --chop-audio-start or --chop-audio-end, perhaps.\n"; + } + + } else if (audio_length < video_length) { + cout << setprecision (3); + cout << "Audio " << (video_length - audio_length) << "s shorter than video.\n"; + + if (pad_audio_end) { + + float const delta = video_length - audio_length; + int const delta_samples = delta * audio_sample_rate; + stringstream s; + s << "pad 0 " << delta_samples << "s"; + sox (audio_files, s.str ()); + + } else { + cout << "Re-run with --pad-audio-end, perhaps.\n"; + } + } + + + return 0; +} diff --git a/src/tools/makedcp.cc b/src/tools/makedcp.cc new file mode 100644 index 000000000..76cda8202 --- /dev/null +++ b/src/tools/makedcp.cc @@ -0,0 +1,138 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "format.h" +#include "film.h" +#include "filter.h" +#include "transcode_job.h" +#include "make_mxf_job.h" +#include "make_dcp_job.h" +#include "job_manager.h" +#include "ab_transcode_job.h" +#include "util.h" +#include "scaler.h" + +using namespace std; +using namespace boost; + +static void +help (string n) +{ + cerr << "Syntax: " << n << " [--help] [--deps] [--film ]\n"; +} + +int +main (int argc, char* argv[]) +{ + string film_dir; + + while (1) { + static struct option long_options[] = { + { "help", no_argument, 0, 'h'}, + { "deps", no_argument, 0, 'd'}, + { "film", required_argument, 0, 'f'}, + { 0, 0, 0, 0 } + }; + + int option_index = 0; + int c = getopt_long (argc, argv, "hdf:", long_options, &option_index); + + if (c == -1) { + break; + } + + switch (c) { + case 'h': + help (argv[0]); + exit (EXIT_SUCCESS); + case 'd': + cout << dependency_version_summary () << "\n"; + exit (EXIT_SUCCESS); + case 'f': + film_dir = optarg; + break; + } + } + + if (film_dir.empty ()) { + help (argv[0]); + exit (EXIT_FAILURE); + } + + dvdomatic_setup (); + + Film* film = 0; + try { + film = new Film (film_dir, true); + } catch (std::exception& e) { + cerr << argv[0] << ": error reading film `" << film_dir << "' (" << e.what() << ")\n"; + exit (EXIT_FAILURE); + } + + cout << "\nMaking "; + if (film->dcp_ab ()) { + cout << "A/B "; + } + cout << "DCP for " << film->name() << "\n"; + cout << "Content: " << film->content() << "\n"; + pair const f = Filter::ffmpeg_strings (film->filters ()); + cout << "Filters: " << f.first << " " << f.second << "\n"; + + film->make_dcp (true); + + list > jobs = JobManager::instance()->get (); + + bool all_done = false; + bool first = true; + while (!all_done) { + + sleep (5); + + if (!first) { + cout << "\033[" << jobs.size() << "A"; + cout.flush (); + } + + first = false; + + all_done = true; + for (list >::iterator i = jobs.begin(); i != jobs.end(); ++i) { + cout << (*i)->name() << ": "; + + float const p = (*i)->overall_progress (); + + if (p >= 0) { + cout << (*i)->status() << " \n"; + } else { + cout << ": Running \n"; + } + + if (!(*i)->finished ()) { + all_done = false; + } + } + } + + return 0; +} + + diff --git a/src/tools/playomatic.cc b/src/tools/playomatic.cc new file mode 100644 index 000000000..b6fcd43cd --- /dev/null +++ b/src/tools/playomatic.cc @@ -0,0 +1,67 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "lib/util.h" +#include "gtk/film_player.h" +#include "gtk/film_list.h" + +using namespace std; + +static FilmPlayer* film_player = 0; + +void +film_changed (Film const * f) +{ + film_player->set_film (f); +} + +int +main (int argc, char* argv[]) +{ + dvdomatic_setup (); + + Gtk::Main kit (argc, argv); + + if (argc != 2) { + cerr << "Syntax: " << argv[0] << " \n"; + exit (EXIT_FAILURE); + } + + Gtk::Window* window = new Gtk::Window (); + + FilmList* film_list = new FilmList (argv[1]); + film_player = new FilmPlayer (); + + Gtk::HBox hbox; + hbox.pack_start (film_list->widget(), true, true); + hbox.pack_start (film_player->widget(), true, true); + + film_list->SelectionChanged.connect (sigc::ptr_fun (&film_changed)); + + window->set_title ("Play-o-matic"); + window->add (hbox); + window->show_all (); + + window->maximize (); + Gtk::Main::run (*window); + + return 0; +} + diff --git a/src/tools/run_film_editor b/src/tools/run_film_editor new file mode 100755 index 000000000..3a3079e92 --- /dev/null +++ b/src/tools/run_film_editor @@ -0,0 +1,4 @@ +#!/bin/sh + +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build/src +build/tools/film_editor $* diff --git a/src/tools/servomatic.cc b/src/tools/servomatic.cc new file mode 100644 index 000000000..b312af352 --- /dev/null +++ b/src/tools/servomatic.cc @@ -0,0 +1,238 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "dcp_video_frame.h" +#include "exceptions.h" +#include "util.h" +#include "config.h" +#include "scaler.h" +#include "image.h" +#include "log.h" + +#define BACKLOG 8 + +using namespace std; +using namespace boost; + +static vector worker_threads; + +static std::list queue; +static mutex worker_mutex; +static condition worker_condition; +static Log log_ ("servomatic.log"); + +int +process (int fd) +{ + SocketReader reader (fd); + + char buffer[128]; + reader.read_indefinite ((uint8_t *) buffer, sizeof (buffer)); + reader.consume (strlen (buffer) + 1); + + stringstream s (buffer); + + string command; + s >> command; + if (command != "encode") { + close (fd); + return -1; + } + + Size in_size; + int pixel_format_int; + Size out_size; + int padding; + string scaler_id; + int frame; + float frames_per_second; + string post_process; + int colour_lut_index; + int j2k_bandwidth; + + s >> in_size.width >> in_size.height + >> pixel_format_int + >> out_size.width >> out_size.height + >> padding + >> scaler_id + >> frame + >> frames_per_second + >> post_process + >> colour_lut_index + >> j2k_bandwidth; + + PixelFormat pixel_format = (PixelFormat) pixel_format_int; + Scaler const * scaler = Scaler::from_id (scaler_id); + if (post_process == "none") { + post_process = ""; + } + + shared_ptr image (new SimpleImage (pixel_format, in_size)); + + for (int i = 0; i < image->components(); ++i) { + int line_size; + s >> line_size; + image->set_line_size (i, line_size); + } + + for (int i = 0; i < image->components(); ++i) { + reader.read_definite_and_consume (image->data()[i], image->line_size()[i] * image->lines(i)); + } + +#ifdef DEBUG_HASH + image->hash ("Image for encoding (as received by server)"); +#endif + + DCPVideoFrame dcp_video_frame (image, out_size, padding, scaler, frame, frames_per_second, post_process, colour_lut_index, j2k_bandwidth, &log_); + shared_ptr encoded = dcp_video_frame.encode_locally (); + encoded->send (fd); + +#ifdef DEBUG_HASH + encoded->hash ("Encoded image (as made by server and as sent back)"); +#endif + + + return frame; +} + +void +worker_thread () +{ + while (1) { + mutex::scoped_lock lock (worker_mutex); + while (queue.empty ()) { + worker_condition.wait (lock); + } + + int fd = queue.front (); + queue.pop_front (); + + lock.unlock (); + + int frame = -1; + + struct timeval start; + gettimeofday (&start, 0); + + try { + frame = process (fd); + } catch (std::exception& e) { + cerr << "Error: " << e.what() << "\n"; + } + + close (fd); + + lock.lock (); + + if (frame >= 0) { + struct timeval end; + gettimeofday (&end, 0); + cout << "Encoded frame " << frame << " in " << (seconds (end) - seconds (start)) << "\n"; + } + + worker_condition.notify_all (); + } +} + +int +main () +{ + Scaler::setup_scalers (); + + int const num_threads = Config::instance()->num_local_encoding_threads (); + + for (int i = 0; i < num_threads; ++i) { + worker_threads.push_back (new thread (worker_thread)); + } + + int fd = socket (AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + throw NetworkError ("could not open socket"); + } + + int const o = 1; + setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &o, sizeof (o)); + + struct timeval tv; + tv.tv_sec = 20; + tv.tv_usec = 0; + setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (void *) &tv, sizeof (tv)); + setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, (void *) &tv, sizeof (tv)); + + struct sockaddr_in server_address; + memset (&server_address, 0, sizeof (server_address)); + server_address.sin_family = AF_INET; + server_address.sin_addr.s_addr = INADDR_ANY; + server_address.sin_port = htons (Config::instance()->server_port ()); + if (::bind (fd, (struct sockaddr *) &server_address, sizeof (server_address)) < 0) { + stringstream s; + s << "could not bind to port " << Config::instance()->server_port() << " (" << strerror (errno) << ")"; + throw NetworkError (s.str()); + } + + listen (fd, BACKLOG); + + while (1) { + struct sockaddr_in client_address; + socklen_t client_length = sizeof (client_address); + int new_fd = accept (fd, (struct sockaddr *) &client_address, &client_length); + if (new_fd < 0) { + if (errno != EAGAIN && errno != EWOULDBLOCK) { + throw NetworkError ("accept failed"); + } + + continue; + } + + mutex::scoped_lock lock (worker_mutex); + + /* Wait until the queue has gone down a bit */ + while (int (queue.size()) >= num_threads * 2) { + worker_condition.wait (lock); + } + + struct timeval tv; + tv.tv_sec = 20; + tv.tv_usec = 0; + setsockopt (new_fd, SOL_SOCKET, SO_RCVTIMEO, (void *) &tv, sizeof (tv)); + setsockopt (new_fd, SOL_SOCKET, SO_SNDTIMEO, (void *) &tv, sizeof (tv)); + + queue.push_back (new_fd); + worker_condition.notify_all (); + } + + close (fd); + + return 0; +} diff --git a/src/tools/servomatictest.cc b/src/tools/servomatictest.cc new file mode 100644 index 000000000..0f37e73a5 --- /dev/null +++ b/src/tools/servomatictest.cc @@ -0,0 +1,159 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include "format.h" +#include "film.h" +#include "filter.h" +#include "util.h" +#include "scaler.h" +#include "server.h" +#include "dcp_video_frame.h" +#include "options.h" +#include "decoder.h" +#include "exceptions.h" +#include "scaler.h" +#include "log.h" +#include "decoder_factory.h" + +using namespace std; +using namespace boost; + +static Server* server; +static Log log_ ("servomatictest.log"); + +void +process_video (shared_ptr image, int frame) +{ + shared_ptr local (new DCPVideoFrame (image, Size (1024, 1024), 0, Scaler::from_id ("bicubic"), frame, 24, "", 0, 250000000, &log_)); + shared_ptr remote (new DCPVideoFrame (image, Size (1024, 1024), 0, Scaler::from_id ("bicubic"), frame, 24, "", 0, 250000000, &log_)); + +#if defined(DEBUG_HASH) + cout << "Frame " << frame << ":\n"; +#else + cout << "Frame " << frame << ": "; + cout.flush (); +#endif + + shared_ptr local_encoded = local->encode_locally (); + shared_ptr remote_encoded; + + string remote_error; + try { + remote_encoded = remote->encode_remotely (server); + } catch (NetworkError& e) { + remote_error = e.what (); + } + +#if defined(DEBUG_HASH) + cout << "Frame " << frame << ": "; + cout.flush (); +#endif + + if (!remote_error.empty ()) { + cout << "\033[0;31mnetwork problem: " << remote_error << "\033[0m\n"; + return; + } + + if (local_encoded->size() != remote_encoded->size()) { + cout << "\033[0;31msizes differ\033[0m\n"; + return; + } + + uint8_t* p = local_encoded->data(); + uint8_t* q = remote_encoded->data(); + for (int i = 0; i < local_encoded->size(); ++i) { + if (*p++ != *q++) { + cout << "\033[0;31mdata differ\033[0m at byte " << i << "\n"; + return; + } + } + + cout << "\033[0;32mgood\033[0m\n"; +} + +static void +help (string n) +{ + cerr << "Syntax: " << n << " [--help] --film --server \n"; + exit (EXIT_FAILURE); +} + +int +main (int argc, char* argv[]) +{ + string film_dir; + string server_host; + + while (1) { + static struct option long_options[] = { + { "help", no_argument, 0, 'h'}, + { "server", required_argument, 0, 's'}, + { "film", required_argument, 0, 'f'}, + { 0, 0, 0, 0 } + }; + + int option_index = 0; + int c = getopt_long (argc, argv, "hs:f:", long_options, &option_index); + + if (c == -1) { + break; + } + + switch (c) { + case 'h': + help (argv[0]); + exit (EXIT_SUCCESS); + case 's': + server_host = optarg; + break; + case 'f': + film_dir = optarg; + break; + } + } + + if (server_host.empty() || film_dir.empty()) { + help (argv[0]); + exit (EXIT_FAILURE); + } + + dvdomatic_setup (); + + server = new Server (server_host, 1); + Film film (film_dir, true); + + shared_ptr opt (new Options ("fred", "jim", "sheila")); + opt->out_size = Size (1024, 1024); + opt->apply_crop = false; + opt->decode_audio = false; + + shared_ptr decoder = decoder_factory (film.state_copy(), opt, 0, &log_); + try { + decoder->Video.connect (sigc::ptr_fun (process_video)); + decoder->go (); + } catch (std::exception& e) { + cerr << "Error: " << e.what() << "\n"; + } + + return 0; +} diff --git a/src/tools/test.cc b/src/tools/test.cc new file mode 100644 index 000000000..f81814160 --- /dev/null +++ b/src/tools/test.cc @@ -0,0 +1,15 @@ +#include +#include +#include "image.h" +#include "server.h" + +using namespace boost; + +int main () +{ + uint8_t* rgb = new uint8_t[256]; + shared_ptr image (new Image (rgb, 0, 32, 32, 24)); + Server* s = new Server ("localhost", 2); + image->encode_remotely (s); + return 0; +} diff --git a/src/tools/wscript b/src/tools/wscript new file mode 100644 index 000000000..919c98e3f --- /dev/null +++ b/src/tools/wscript @@ -0,0 +1,17 @@ +def build(bld): + for t in ['makedcp', 'servomatic', 'servomatictest', 'fixlengths']: + obj = bld(features = 'cxx cxxprogram') + obj.uselib = 'BOOST_THREAD' + obj.includes = ['..'] + obj.use = ['libdvdomatic'] + obj.source = '%s.cc' % t + obj.target = t + + if not bld.env.DISABLE_GUI: + for t in ['dvdomatic', 'playomatic', 'alignomatic']: + obj = bld(features = 'cxx cxxprogram') + obj.uselib = 'BOOST_THREAD GTKMM' + obj.includes = ['..'] + obj.use = ['libdvdomatic', 'libdvdomatic-gtk'] + obj.source = '%s.cc' % t + obj.target = t diff --git a/src/wscript b/src/wscript new file mode 100644 index 000000000..9ae35d507 --- /dev/null +++ b/src/wscript @@ -0,0 +1,5 @@ +def build(bld): + bld.recurse('lib') + bld.recurse('tools') + if not bld.env.DISABLE_GUI: + bld.recurse('gtk') diff --git a/test/dvd/VIDEO_TS/VIDEO_TS.BUP b/test/dvd/VIDEO_TS/VIDEO_TS.BUP new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VIDEO_TS.IFO b/test/dvd/VIDEO_TS/VIDEO_TS.IFO new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VIDEO_TS.VOB b/test/dvd/VIDEO_TS/VIDEO_TS.VOB new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VST_01_1.VOB b/test/dvd/VIDEO_TS/VST_01_1.VOB new file mode 100644 index 000000000..190a18037 --- /dev/null +++ b/test/dvd/VIDEO_TS/VST_01_1.VOB @@ -0,0 +1 @@ +123 diff --git a/test/dvd/VIDEO_TS/VTS_01_0.IFO b/test/dvd/VIDEO_TS/VTS_01_0.IFO new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VTS_01_0.VOB b/test/dvd/VIDEO_TS/VTS_01_0.VOB new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VTS_01_1.VOB b/test/dvd/VIDEO_TS/VTS_01_1.VOB new file mode 100644 index 000000000..e69de29bb diff --git a/test/dvd/VIDEO_TS/VTS_02_0.VOB b/test/dvd/VIDEO_TS/VTS_02_0.VOB new file mode 100644 index 000000000..8d38505c1 --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_02_0.VOB @@ -0,0 +1 @@ +456 diff --git a/test/dvd/VIDEO_TS/VTS_02_1.VOB b/test/dvd/VIDEO_TS/VTS_02_1.VOB new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_02_1.VOB @@ -0,0 +1 @@ +1 diff --git a/test/dvd/VIDEO_TS/VTS_02_2.VOB b/test/dvd/VIDEO_TS/VTS_02_2.VOB new file mode 100644 index 000000000..48082f72f --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_02_2.VOB @@ -0,0 +1 @@ +12 diff --git a/test/dvd/VIDEO_TS/VTS_02_3.VOB b/test/dvd/VIDEO_TS/VTS_02_3.VOB new file mode 100644 index 000000000..190a18037 --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_02_3.VOB @@ -0,0 +1 @@ +123 diff --git a/test/dvd/VIDEO_TS/VTS_02_4.VOB b/test/dvd/VIDEO_TS/VTS_02_4.VOB new file mode 100644 index 000000000..81c545efe --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_02_4.VOB @@ -0,0 +1 @@ +1234 diff --git a/test/dvd/VIDEO_TS/VTS_03_0.IFO b/test/dvd/VIDEO_TS/VTS_03_0.IFO new file mode 100644 index 000000000..e56e15bb7 --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_03_0.IFO @@ -0,0 +1 @@ +12345 diff --git a/test/dvd/VIDEO_TS/VTS_03_0.VOB b/test/dvd/VIDEO_TS/VTS_03_0.VOB new file mode 100644 index 000000000..e56e15bb7 --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_03_0.VOB @@ -0,0 +1 @@ +12345 diff --git a/test/dvd/VIDEO_TS/VTS_03_1.VOB b/test/dvd/VIDEO_TS/VTS_03_1.VOB new file mode 100644 index 000000000..9f358a4ad --- /dev/null +++ b/test/dvd/VIDEO_TS/VTS_03_1.VOB @@ -0,0 +1 @@ +123456 diff --git a/test/film/log b/test/film/log new file mode 100644 index 000000000..c88741037 --- /dev/null +++ b/test/film/log @@ -0,0 +1,3 @@ +Fri Feb 17 18:54:32 2012: Starting to make a DCP on shankly +Fri Feb 17 18:54:32 2012: Transcode job starting +Fri Feb 17 18:54:37 2012: Transcode job completed successfully diff --git a/test/film/metadata b/test/film/metadata new file mode 100644 index 000000000..6c5afd6c9 --- /dev/null +++ b/test/film/metadata @@ -0,0 +1,18 @@ +name +content +dcp_long_name +guess_dcp_long_name 0 +frames_per_second 0 +left_crop 0 +right_crop 0 +top_crop 0 +bottom_crop 0 +scaler bicubic +dcp_frames 0 +dcp_ab 0 +width 0 +height 0 +length 0 +audio_channels 0 +audio_sample_rate 0 +audio_sample_format Unknown diff --git a/test/long.cc b/test/long.cc new file mode 100644 index 000000000..6be1ef2ff --- /dev/null +++ b/test/long.cc @@ -0,0 +1,156 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include "format.h" +#include "film.h" +#include "filter.h" +#include "job_manager.h" +#include "util.h" +#include "exceptions.h" +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE dvdomatic_test +#include + +using namespace std; +using namespace boost; + +bool +compare (string ref, string test, list exclude) +{ + ifstream r (ref.c_str ()); + ifstream t (test.c_str ()); + + while (r.good ()) { + string rl; + getline (r, rl); + string tl; + getline (t, tl); + + bool ex = false; + for (list::iterator i = exclude.begin(); i != exclude.end(); ++i) { + if (rl.find (*i) != string::npos && tl.find (*i) != string::npos) { + ex = true; + } + } + + if (!ex && rl != tl) { + cerr << "Fail:\n" << rl << "\n" << tl << "\n"; + return true; + } + } + + return false; +} + + +BOOST_AUTO_TEST_CASE (make_dcp_test) +{ + dvdomatic_setup (); + + string const dcp_name = "FOO-BAR-BAZ"; + + string const ref_film = "test/film"; + string const ref_dcp = ref_film + "/" + dcp_name; + string const ref_pkl = ref_dcp + "/bdb4ae0a-0d09-4554-8557-0b4260f4c359_pkl.xml"; + string const ref_cpl = ref_dcp + "/08dd6e45-83b5-41dc-9179-d7c59f597a12_cpl.xml"; + string const test_film = "build/test/film"; + string const test_dcp = test_film + "/" + dcp_name; + + if (boost::filesystem::exists (test_film)) { + boost::filesystem::remove_all (test_film); + } + + Film f (test_film, false); + f.write_metadata (); + boost::filesystem::copy_file ("test/zombie.mpeg", "build/test/film/zombie.mpeg"); + f.set_content ("zombie.mpeg"); + f.set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); + + BOOST_CHECK_EQUAL (f.audio_channels(), 2); + BOOST_CHECK_EQUAL (f.audio_sample_rate(), 48000); + BOOST_CHECK_EQUAL (audio_sample_format_to_string (f.audio_sample_format()), "S16"); + + f.set_format (Format::from_nickname ("Flat")); + + f.make_dcp (true, 5); + + while (JobManager::instance()->work_to_do ()) { + sleep (1); + } + + { + stringstream s; + s << "diff -ur test/film/j2c " << test_film << "/j2c"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + { + stringstream s; + s << "diff -ur test/film/wavs " << test_film << "/wavs"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + { + stringstream s; + s << "diff -u test/film/metadata " << test_film << "/metadata"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + /* Find the test pkl and cpl */ + string test_pkl; + string test_cpl; + + for (filesystem::directory_iterator i = filesystem::directory_iterator (test_dcp); i != filesystem::directory_iterator(); ++i) { +#if BOOST_FILESYSTEM_VERSION == 3 + string const t = filesystem::path(*i).generic_string (); +#else + string const t = i->string (); +#endif + if (algorithm::ends_with (t, "cpl.xml")) { + test_cpl = t; + } else if (algorithm::ends_with (t, "pkl.xml")) { + test_pkl = t; + } + } + + { + list exclude; + exclude.push_back ("urn:uuid"); + exclude.push_back ("urn:uri"); + exclude.push_back (""); + exclude.push_back (""); + exclude.push_back (""); + BOOST_CHECK_EQUAL (compare (ref_cpl, test_cpl, exclude), false); + } + + { + list exclude; + exclude.push_back ("urn:uuid"); + exclude.push_back (""); + exclude.push_back (""); + BOOST_CHECK_EQUAL (compare (ref_pkl, test_pkl, exclude), false); + } +} diff --git a/test/metadata.ref b/test/metadata.ref new file mode 100644 index 000000000..61b6df751 --- /dev/null +++ b/test/metadata.ref @@ -0,0 +1,24 @@ +name fred +content +dcp_long_name sheila +guess_dcp_long_name 0 +dcp_content_type Short +frames_per_second 0 +format 185 +left_crop 1 +right_crop 2 +top_crop 3 +bottom_crop 4 +filter pphb +filter unsharp +scaler bicubic +dcp_frames 42 +dcp_ab 1 +audio_gain 0 +audio_delay 0 +width 0 +height 0 +length 0 +audio_channels 0 +audio_sample_rate 0 +audio_sample_format Unknown diff --git a/test/short.cc b/test/short.cc new file mode 100644 index 000000000..3f010379c --- /dev/null +++ b/test/short.cc @@ -0,0 +1,220 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include "format.h" +#include "film.h" +#include "filter.h" +#include "job_manager.h" +#include "util.h" +#include "exceptions.h" +#include "dvd.h" +#include "delay_line.h" +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE dvdomatic_test +#include + +using namespace std; +using namespace boost; + +BOOST_AUTO_TEST_CASE (film_metadata_test) +{ + dvdomatic_setup (); + + string const test_film = "build/test/film"; + + if (boost::filesystem::exists (test_film)) { + boost::filesystem::remove_all (test_film); + } + + BOOST_CHECK_THROW (new Film ("build/test/film", true), OpenFileError); + + Film f (test_film, false); + BOOST_CHECK (f.format() == 0); + BOOST_CHECK (f.dcp_content_type() == 0); + BOOST_CHECK (f.filters ().empty()); + + f.set_name ("fred"); + BOOST_CHECK_THROW (f.set_content ("jim"), OpenFileError); + f.set_dcp_content_type (DCPContentType::from_pretty_name ("Short")); + f.set_format (Format::from_nickname ("Flat")); + f.set_left_crop (1); + f.set_right_crop (2); + f.set_top_crop (3); + f.set_bottom_crop (4); + vector f_filters; + f_filters.push_back (Filter::from_id ("pphb")); + f_filters.push_back (Filter::from_id ("unsharp")); + f.set_filters (f_filters); + f.set_dcp_frames (42); + f.set_dcp_ab (true); + f.write_metadata (); + + stringstream s; + s << "diff -u test/metadata.ref " << test_film << "/metadata"; + BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); + + Film g (test_film, true); + + BOOST_CHECK_EQUAL (g.name(), "fred"); + BOOST_CHECK_EQUAL (g.dcp_content_type(), DCPContentType::from_pretty_name ("Short")); + BOOST_CHECK_EQUAL (g.format(), Format::from_nickname ("Flat")); + BOOST_CHECK_EQUAL (g.left_crop(), 1); + BOOST_CHECK_EQUAL (g.right_crop(), 2); + BOOST_CHECK_EQUAL (g.top_crop(), 3); + BOOST_CHECK_EQUAL (g.bottom_crop(), 4); + vector g_filters = g.filters (); + BOOST_CHECK_EQUAL (g_filters.size(), 2); + BOOST_CHECK_EQUAL (g_filters.front(), Filter::from_id ("pphb")); + BOOST_CHECK_EQUAL (g_filters.back(), Filter::from_id ("unsharp")); + BOOST_CHECK_EQUAL (g.dcp_frames(), 42); + BOOST_CHECK_EQUAL (g.dcp_ab(), true); + + g.write_metadata (); + BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); +} + +BOOST_AUTO_TEST_CASE (format_test) +{ + Format::setup_formats (); + + Format const * f = Format::from_nickname ("Flat"); + BOOST_CHECK (f); + BOOST_CHECK_EQUAL (f->ratio_as_integer(), 185); + + f = Format::from_nickname ("Scope"); + BOOST_CHECK (f); + BOOST_CHECK_EQUAL (f->ratio_as_integer(), 239); +} + +BOOST_AUTO_TEST_CASE (util_test) +{ + string t = "Hello this is a string \"with quotes\" and indeed without them"; + vector b = split_at_spaces_considering_quotes (t); + vector::iterator i = b.begin (); + BOOST_CHECK_EQUAL (*i++, "Hello"); + BOOST_CHECK_EQUAL (*i++, "this"); + BOOST_CHECK_EQUAL (*i++, "is"); + BOOST_CHECK_EQUAL (*i++, "a"); + BOOST_CHECK_EQUAL (*i++, "string"); + BOOST_CHECK_EQUAL (*i++, "with quotes"); + BOOST_CHECK_EQUAL (*i++, "and"); + BOOST_CHECK_EQUAL (*i++, "indeed"); + BOOST_CHECK_EQUAL (*i++, "without"); + BOOST_CHECK_EQUAL (*i++, "them"); +} + +BOOST_AUTO_TEST_CASE (dvd_test) +{ + vector const t = dvd_titles ("test/dvd"); + BOOST_CHECK_EQUAL (t.size(), 4); + BOOST_CHECK_EQUAL (t[1], 0); + BOOST_CHECK_EQUAL (t[2], 14); + BOOST_CHECK_EQUAL (t[3], 7); +} + +void +do_positive_delay_line_test (int delay_length, int block_length) +{ + DelayLine d (delay_length); + uint8_t data[block_length]; + + int in = 0; + int out = 0; + int returned = 0; + int zeros = 0; + + for (int i = 0; i < 64; ++i) { + for (int j = 0; j < block_length; ++j) { + data[j] = in; + ++in; + } + + int const a = d.feed (data, block_length); + returned += a; + + for (int j = 0; j < a; ++j) { + if (zeros < delay_length) { + BOOST_CHECK_EQUAL (data[j], 0); + ++zeros; + } else { + BOOST_CHECK_EQUAL (data[j], out & 0xff); + ++out; + } + } + } + + BOOST_CHECK_EQUAL (returned, 64 * block_length); +} + +void +do_negative_delay_line_test (int delay_length, int block_length) +{ + DelayLine d (delay_length); + uint8_t data[block_length]; + + int in = 0; + int out = -delay_length; + int returned = 0; + + for (int i = 0; i < 256; ++i) { + for (int j = 0; j < block_length; ++j) { + data[j] = in; + ++in; + } + + int const a = d.feed (data, block_length); + returned += a; + + for (int j = 0; j < a; ++j) { + BOOST_CHECK_EQUAL (data[j], out & 0xff); + ++out; + } + } + + uint8_t remainder[-delay_length]; + d.get_remaining (remainder); + returned += -delay_length; + + for (int i = 0; i < -delay_length; ++i) { + BOOST_CHECK_EQUAL (remainder[i], 0); + ++out; + } + + BOOST_CHECK_EQUAL (returned, 256 * block_length); + +} + +BOOST_AUTO_TEST_CASE (delay_line_test) +{ + do_positive_delay_line_test (64, 128); + do_positive_delay_line_test (128, 64); + do_positive_delay_line_test (3, 512); + do_positive_delay_line_test (512, 3); + + do_positive_delay_line_test (0, 64); + + do_negative_delay_line_test (-64, 128); + do_negative_delay_line_test (-128, 64); + do_negative_delay_line_test (-3, 512); + do_negative_delay_line_test (-512, 3); +} diff --git a/test/wscript b/test/wscript new file mode 100644 index 000000000..7ea02a804 --- /dev/null +++ b/test/wscript @@ -0,0 +1,16 @@ +def build(bld): + obj = bld(features = 'cxx cxxprogram') + obj.name = 'short-unit-tests' + obj.uselib = 'BOOST_TEST' + obj.use = 'libdvdomatic' + obj.source = 'short.cc' + obj.target = 'short-unit-tests' + obj.install_path = '' + + obj = bld(features = 'cxx cxxprogram') + obj.name = 'long-unit-tests' + obj.uselib = 'BOOST_TEST' + obj.use = 'libdvdomatic' + obj.source = 'long.cc' + obj.target = 'long-unit-tests' + obj.install_path = '' diff --git a/waf b/waf new file mode 100755 index 0000000000000000000000000000000000000000..178461f113668f7b3bb794abe3cb788e7c69322c GIT binary patch literal 87683 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 literal 0 HcmV?d00001 diff --git a/wscript b/wscript new file mode 100644 index 000000000..98fa0f6f7 --- /dev/null +++ b/wscript @@ -0,0 +1,91 @@ +APPNAME = 'dvdomatic' +VERSION = '0.26pre' + +def options(opt): + opt.load('compiler_cxx') + opt.add_option('--debug-hash', action='store_true', default = False, help = 'print hashes of data at various points') + opt.add_option('--enable-debug', action='store_true', default = False, help = 'build with debugging information and without optimisation') + opt.add_option('--disable-gui', action='store_true', default = False, help = 'disable building of GUI tools') + +def configure(conf): + conf.load('compiler_cxx') + + conf.env.append_value('CXXFLAGS', ['-D__STDC_CONSTANT_MACROS', '-D__STDC_LIMIT_MACROS', '-msse', '-mfpmath=sse', '-ffast-math', '-Wall']) + conf.env.append_value('CXXFLAGS', ['-DDVDOMATIC_VERSION="%s"' % VERSION]) + + conf.env.DEBUG_HASH = conf.options.debug_hash + if conf.options.debug_hash: + conf.env.append_value('CXXFLAGS', '-DDEBUG_HASH') + conf.check_cc(msg = 'Checking for library libmhash', function_name = 'mhash_init', header_name = 'mhash.h', lib = 'mhash', uselib_store = 'MHASH') + + if conf.options.enable_debug: + conf.env.append_value('CXXFLAGS', '-g') + else: + conf.env.append_value('CXXFLAGS', '-O3') + + conf.env.DISABLE_GUI = conf.options.disable_gui + if conf.options.disable_gui is False: + conf.check_cfg(package = 'glib-2.0', args = '--cflags --libs', uselib_store = 'GLIB', mandatory = True) + conf.check_cfg(package = 'gtkmm-2.4', args = '--cflags --libs', uselib_store = 'GTKMM', mandatory = True) + conf.check_cfg(package = 'cairomm-1.0', args = '--cflags --libs', uselib_store = 'CAIROMM', mandatory = True) + + conf.check_cfg(package = 'sigc++-2.0', args = '--cflags --libs', uselib_store = 'SIGC++', mandatory = True) + conf.check_cfg(package = 'libavformat', args = '--cflags --libs', uselib_store = 'AVFORMAT', mandatory = True) + conf.check_cfg(package = 'libavfilter', args = '--cflags --libs', uselib_store = 'AVFILTER', mandatory = True) + conf.check_cfg(package = 'libavcodec', args = '--cflags --libs', uselib_store = 'AVCODEC', mandatory = True) + conf.check_cfg(package = 'libavutil', args = '--cflags --libs', uselib_store = 'AVUTIL', mandatory = True) + conf.check_cfg(package = 'libswscale', args = '--cflags --libs', uselib_store = 'SWSCALE', mandatory = True) + conf.check_cfg(package = 'libswresample', args = '--cflags --libs', uselib_store = 'SWRESAMPLE', mandatory = True) + conf.check_cfg(package = 'libpostproc', args = '--cflags --libs', uselib_store = 'POSTPROC', mandatory = True) + conf.check_cfg(package = 'sndfile', args = '--cflags --libs', uselib_store = 'SNDFILE', mandatory = True) + conf.check_cfg(package = '', path = 'Magick++-config', args = '--cppflags --cxxflags --libs', uselib_store = 'MAGICK', mandatory = True) + conf.check_cc(msg = 'Checking for library libtiff', function_name = 'TIFFOpen', header_name = 'tiffio.h', lib = 'tiff', uselib_store = 'TIFF') + conf.check_cc(fragment = """ + #include \n + #include \n + int main () {\n + void* p = (void *) opj_image_create;\n + return 0;\n + } + """, msg = 'Checking for library openjpeg', lib = 'openjpeg', uselib_store = 'OPENJPEG') + + conf.check_cc(fragment = """ + #include \n + int main () {\n + ssh_session s = ssh_new ();\n + return 0;\n + } + """, msg = 'Checking for library libssh', lib = 'ssh', uselib_store = 'SSH') + + conf.check_cxx(fragment = """ + #include \n + int main() { boost::thread t (); }\n + """, msg = 'Checking for boost threading library', lib = 'boost_thread', uselib_store = 'BOOST_THREAD') + conf.check_cxx(fragment = """ + #include \n + int main() { boost::filesystem::copy_file ("a", "b"); }\n + """, msg = 'Checking for boost filesystem library', libpath = '/usr/local/lib', lib = ['boost_filesystem', 'boost_system'], uselib_store = 'BOOST_FILESYSTEM') + conf.check_cxx(fragment = """ + #define BOOST_TEST_MODULE Config test\n + #include \n + int main() {} + """, msg = 'Checking for boost unit testing library', lib = 'boost_unit_test_framework', uselib_store = 'BOOST_TEST') + +def build(bld): + bld.recurse('src') + bld.recurse('test') + + d = { 'PREFIX' : '${PREFIX' } + + obj = bld(features = 'subst') + obj.source = 'dvdomatic.desktop.in' + obj.target = 'dvdomatic.desktop' + obj.dict = d + + bld.install_files('${PREFIX}/share/applications', 'dvdomatic.desktop') + for r in ['22x22', '32x32', '48x48', '64x64', '128x128']: + bld.install_files('${PREFIX}/share/icons/hicolor/%s/apps' % r, 'icons/%s/dvdomatic.png' % r) + + +def dist(ctx): + ctx.excl = 'TODO core *~ src/gtk/*~ src/lib/*~ .waf* build' -- 2.30.2

iOHHC~`FQ(+ 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