pax_global_header00006660000000000000000000000064146125234360014520gustar00rootroot0000000000000052 comment=c79144b882639e4dbe2a21a29d5570ea1a42b8ac xjadeo-0.8.14/000077500000000000000000000000001461252343600130645ustar00rootroot00000000000000xjadeo-0.8.14/AUTHORS000066400000000000000000000002571461252343600141400ustar00rootroot00000000000000Luis Garrido Robin Gareus Translations: * French: R. Doursenaud * Russian: Alexandre Prokoudine * Czech: Pavel Fric xjadeo-0.8.14/COPYING000066400000000000000000000431101461252343600141160ustar00rootroot00000000000000 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. xjadeo-0.8.14/ChangeLog000066400000000000000000000631751461252343600146520ustar00rootroot000000000000002024-04-25 (0.8.14) Robin Gareus * Fix JACK Transport when using pipewire * Update build-script (disable QT GUI) 2023-09-03 (0.8.13) Robin Gareus * wrap-around/loop: fix modulo calculation (by trinitou) * Add Xinerama support (linux, by Ion Reguera) * Update build-scripts, fix macOS portmidi support 2023-01-01 (0.8.12) Robin Gareus * add compatibility for ffmpeg-5.1 * fix UI scale when building on 10.15 or later 2022-04-01 (0.8.11) Robin Gareus * add compatibility for ffmpeg-5.0 * update static-builder to use ffmpeg-5.0 * add support for modern mingw (pthread) * update git clone URIs - avoid git:// 2021-01-06 (0.8.10) Robin Gareus * add keyboard shortcuts for +/- 1 second offsets * tweak Windows installer 32/64bit reg-keys * fix Linux gcc10 builds * add support for macOS BigSur and Apple/ARM 2018-11-30 (0.8.9) Robin Gareus * prefer -pthread over -lpthread, fixes #18 * mainly a build-system, binary only update 2018-06-06 (0.8.8) Robin Gareus * use PortMidi default device (allow using portmidisetup) * fix loading fonts with non ASCII paths on Windows * allow verbose/debug logging on windows 2016-11-28 (0.8.7) Robin Gareus * fix release builds (mistake in 0.8.6) 2016-11-28 (0.8.6) Robin Gareus * explicitly request single-screen fullscreen on OSX * weak-link against libjack (binaries) * add NetBSD support 2015-11-26 (0.8.5) Robin Gareus * release openGL context * add compatibility for ffmpeg-2.9 * allow to compile on OSX/10.11 2015-09-09 (0.8.4) Robin Gareus * drop jack requirement for OSX 2015-09-09 (0.8.3) Robin Gareus * defined LARGEFILE64 for huge videos * fix OSX openGL init (El Capitan support) 2015-06-24 (0.8.2) Robin Gareus * fix CPU-hog after end of video * fix compilation with gcc5 * fix typos in manaul * various build-system updates (OSX, win) 2014-11-23 (0.8.1) Robin Gareus * fix OSX remote-control threading * X11 file open dialog * add recently-used files list * show splash screen when no file is open * various typo fixes 2014-08-22 (0.8.0) Robin Gareus * fix various typos * prepare build-stack for binary releases * re-add windows on-jack-shutdown handler * update app icon * fix some compiler warnings * request X11-focus after file drag/drop. 2014-08-15 (0.8.0-rc3) Robin Gareus * embed font-file in Linux statically linked binaries * improve overall consistency, interaction and display: - add "Offset" menu to document all keyboard shortcuts - "Close Video" menu entry - dedicated VTC OSD as alternative to frame-number - remove 'q' quit shortcut (use Esc or Ctrl-Q) - darker 'cross' for RGB[A] display (was already grey for YUV) * improve OSD text and optimize OSD re-exposure * Add File Time and Geometry Info OSD * update icons and splash image * fix various typos * re-use color-eq bars for progress-bar. * new example/test video * update xjadeorc documentation 2014-07-31 (0.8.0-rc2) Robin Gareus * update usage() help text * add --osc-doc option * rearrange remote-control commands and improve their doc. * re-do website and documentation * amend seek-index, create table for PTS * disable screensaver * overhaul windows UI (threading, draw while resize, fullscreen screen) * proper monospace for timecode + framenumber OSD * complete migration to 64 bit timecode * enable letterbox by default * update expose strategy and OSD + splash rendering 2014-07-27 (0.8.0-rc1) Robin Gareus * v0.8 pre-release * add openGL display (Linux, Win32, OSX) * fix RGBA32 (imlib2, openGL) blank frame alpha. * weak linking against jack (windows, OSX) * OSX: don't connect to jack by default. * support XDG_CONFIG_HOME * remove deprecated qjadeo import (xjinfo/mencoder) -> use ffmpeg * remove LASH support (use jack-session) * remove support for ancient ffmpeg < 0.5 * change -J semantics: don't connect to and later (remote) don't autostart jack * major cleanup of accumulated cruft. * rework fps detection (new ffmpeg API) * remove custom debian package -> use debian's *real* package. * fix memleak when connecting jack-midi ports * add override for sync and file changes (OSX menu, X11 DnD) * fix X11/GLX drag-drop * built-in X11/GLX context-menu * disable left/right mouse button scaling. * allow to start xjadeo without file (use DnD or Menu to load) * update seek-mechanism: create seek index table * remove -k option (no more seek-modes!) all indexed * -K option changed to specify max-continuous-keyframe limit. * add native windows application support (openGL) and context-menu * decrease max possible OSD font-size (to accommodate messages) 2014-07-13 (0.7.8) Robin Gareus * document -J option in --help * SDL window-position and on-top functionality (now SDL is compatible to xv and x11 video backends) * built script updates for statically linked binaries: - dynamically link to libX11/libxcb - add statically linked SDL (in case XVideo is n/a) - add fallback to imlib2/x11 output in case no hardware acceleration is available 2014-06-06 (0.7.7) Robin Gareus * add -J option (don't connect to jackd by default) * fix registry key for windows installer * updates for libav * Fix hardening for qjadeo, passed CPPFLAGS and LDFLAGS to qmake. (from mira) * Misspelling patch (also by Jaromír Mikeš) 2013-08-08 (0.7.6) Robin Gareus * fix DAR, SAR aspect ratio and odd-number of lines * detect jack-latency API independently from jack-sessio * fix some compiler warnings & work-around undocumented libav API change 2013-07-25 (0.7.5) Robin Gareus * fix UYVY422 colorspace (OSX default) stride * xjinfo - fix segfault if invalid file-name is given 2013-06-27 (0.7.4) Robin Gareus * fix for XVideo, YUV - force even number of pixels per line * OSX build w/header-pad for dynamic libs. 2013-06-16 (0.7.3) Robin Gareus * propagate unhandled keyboard events to remote ctrl * Add Czech translation by Pavel Fric * add missing remote.h source * fix windows installer * tentative seek-to-frame workarounds for OSX m4v. 2013-06-09 (0.7.2) Robin Gareus * rework X11 keyboard events (use xkeymap) * allow to forward keyboard events via remote-control * request settings-dump on exit (via remote-ctrl) 2013-05-31 (0.7.1) Robin Gareus * fix OSD font-spacing * add -T option to set OSD font * fix 32/64bit issue in xjinfo, allow to hardedn qjadeo * deprecated qjadeo GUI and xjinfo (use ffprobe instead) explicit --enable-qt-gui is requred to build either. * prepare moving repo & issue-tracker to github. * fix LTC jack-latency compensation * fix LTC 32 bit wrap-around (i386 only) * various build-system updates 2013-04-07 (0.7.0) Robin Gareus * fixes for clang/llvm compiler * SMPTE on-screen-display ignore offset * use libltc; deprecate libltcsmpte support * reset aspect-ratio when opening a new file * add /jadeo/cmd OSC command - full remote control * fix OSC concurrency problems. * graceful jack shutdown handling * reverse scroll-wheel zoom direction 2012-05-14 (0.6.4) Robin Gareus * pixel and display aspect ratio corrections done during rendering 2012-04-15 (0.6.3) Robin Gareus * update to new ffmpeg API * fixed some compiler warnings. 2011-09-26 (0.6.2) Robin Gareus * updated French translation Raphael Doursenaud) * fixed issue with remote-ctrl closing filedes on fork. 2011-07-13 (0.6.1) Robin Gareus * added qjadeo translations - thanks to Alexandre Prokoudine * JACK-Session support. * LTC+JACK - new jack latency API 2011-07-03 (0.6.0) Robin Gareus * Changes since 0.6.0-rc7: - fixed LTC parsing for other than 25fps - splash screen update (fixed duration) - added greek translation by Michales Michaloudes. - ffmpeg compat - build system updates (require libX, git version detection..) - version 0.6.0 * Changes since 0.4.X: - rewritten/updated manual - win32 support - qjadeo QT3 -> QT4 - added LTC sync source - disabled LASH (by default) soon to be removed in favor of JACK-Session - various autoconf updates - interaction overrides and remote-control features for ardour integration 2010-11-21 (0.6.0~rc7) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-12 (0.6.0~rc6) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-12 (0.6.0~rc5) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-11 (0.6.0~rc4) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-10 (0.6.0~rc3) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-10 (0.6.0~rc2) Robin Gareus * release candidate v0.6 ... see git changelog 2010-10-03 (0.6.0~rc1) Robin Gareus * release candidate v0.6 detailed changelog will be included here with 0.6.0 2010-10-01 (0.5.99) Robin Gareus * discard 0.5-branch (xj-five) opengl/vblank/shmem experiments 2010-08-03 (0.4.13) Robin Gareus * made portmidi optional - Thanks to Alex Stone. * added 'mididriver' config-file option * qjadeo - MTC menu: ALSA/JACK * qjadeo - added OSD box toggle * fixed remote-ctrl frame notification * use ffmpeg fps ratio calculation functions * fixed some spelling errors & text clarifications 2010-07-25 (0.4.12) Robin Gareus * allow to select midi-driver on runtime (JACK-MIDI, ALSA-sequencer, portmidi, ALSA-raw-midi). * fixed rounding error for non-integer framerates in the remote-ctrl SMPTE-text parser. (xjadeo+JACK or MTC is not affected; it's only relevant when useing 'seek ' instead of 'seek SMPTE' * fixed unresponsive "Preferences" Alert message (OSX) * added JACK-Midi to menu (OSX) 2010-07-15 (0.4.11) Robin Gareus * new defaults (update-fps = filefps, MTC-quater-frame: on) * added System-V IPC remote ctrl mode (for OSX) * add xjremote to OSX bundle * many small remote-ctl extensions for ardour3 integration * added JACK-MIDI for MTC 2010-05-23 (0.4.10) Robin Gareus * implemented file drop-frame timecode detection 2010-02-08 (0.4.9) Robin Gareus * re-implemented start-time parsing * re-added contrib folder to dist 2010-02-05 (0.4.8) Robin Gareus * fixed parsing video-start offset for m2v files 2009-04-04 (0.4.7) Robin Gareus * added basic OSC control support * cleaned up configure.ac - ffmpeg-header include files * framecropping (for sahra's installation) 2009-02-02 (0.4.6) Robin Gareus * updated URLs in doc * minor fixes for ffmpeg API changes 2008-07-28 (0.4.5) Robin Gareus * xjadeo now leaves XV-colorkey untouched. * changed include paths for ffmpeg. * fixed a compiler warnings for gcc-4.3.1 2008-04-01 (0.4.4) Robin Gareus * updates for ffmpeg-svn compat (ffmpeg-svn 12642,12665) 2008-03-20 (0.4.3) Robin Gareus * fixed backwards compat ffmpeg w/o swscale * fixed segfault using remote-mode w/o video-file (swscale) 2007-09-12 (0.4.2) Robin Gareus * added -s --fullscreen command line option * removed SDL video mode * obsoleted imlib1 * fixed automake variable substitution * added ffmpeg swscale support 2007-05-07 (0.4.1) Robin Gareus * default black-YUV frame * minor updates in the manual. * preparing for 0.5 development branch. * fixed contrib configure bug. 2007-02-23 (0.4.0) Robin Gareus * added call to jack_activate * fixed segfault when movie is smaller than splashscreen (neg. x-offset) * disabled splash-screen when it's larger than current movie anyway. * added POSIX sys includes * added -lavutil -lmp3lame to auto-detected ffmpeg configuration. * disabled PPC duration workaround (only ffmpeg-0.4.9 - LIBAVFORMAT_BUILD 4616) * merged-in French qjadeo translation - thanks to R. Doursenaud * fixed av_q2d for LIBAVFORMAT_BUILD <= 4623 2006-12-02 (0.4.0~rc3) Robin Gareus * fixed fontfile= config option * fixed build --enable-contrib --enable-midi=off 2006-12-01 (0.4.0~rc2) Robin Gareus * fixed version to comply with RPM '-' -> '.' -> 0.4.0.rc2 * added contrib/tsmm - time stamp movie maker * added autogen.sh to debian/rules 2006-11-30 (0.4.0~rc1) Robin Gareus * bump version to 0.4.0-rc1 2006-11-30 (0.3.29-3) Robin Gareus * qjadeo - round update fps * xjadeo remote commands - 'window size' -> 'window resize' - 'window fixaspect' -> RMB 2006-11-30 (0.3.29-2) Robin Gareus * debian control imlib2-dev -> libimlib2-dev * xjadeo new remote command - 'window mouse [on|off|toggle]' 2006-11-29 (0.3.29-1) Robin Gareus * updated xjinfo + dtd - rational values - added sample aspect ratio - updated information fields (title,author,..) - xml-version 0.2 2006-11-28 (0.3.29) Robin Gareus * qjadeo disable frame notification on disconnect, terminate xjadeo when disconnecting. * xjadeo remote commands: 'notify off' alias for 'notify disable' 'exit' - print warning that xjadeo is not xjremote * fixed contrib build * added xml-preamble and DOCTYPE to xjinfo 2006-11-27 (0.3.28) Robin Gareus * fixed typos * begin to clean up source tree for 0.4 * removed pts/dts calc for ffmpeg_seek LIBAVFORMAT_BUILD < 4617 * new seek code only for AVFORMAT_BUILD > 2629 * missing manual page xjinfo.1 2006-11-27 x42 *** CHANGELOG STYLE CHANGE *** git log is the preferred method. 2006-11-25 x42 - manual and xjadeorc typo - xjadeo usage() and cosmetic code changes - preliminary jack_position_t->audio_frames_per_video_frame support. 2006-11-24 x42 - splash screen + config option - '-A' --avverbose : print ffmpeg messages. - spec.in updated. - install icons and menu entry - mpeg dts/pts timestamps - --genpts, -P (ffmpeg option) - --ignorefileoffset, -I for splitted avi/vob files. * version v0.3.27 2006-11-22 x42 - XV (hardware) color eq - imlib2 (software) color eq - OSD improvements - changed qjadeo environement variable from XJADEO to XJREMOTE. - reduced xjremote timeout 5sec -> 0.5 sec - qjadeo extra mencoder options * version v0.3.26 2006-11-21 x42 - fixed xjremote, xjadeo path detection. - xjinfo version '-V' 2006-11-21 x42 - xjinfo - fixed BINDIR, SYSCFGFIR '/' suffix - qtjadeo file-info via xjinfo - version via svnversion - qjadeo icons + seek menu * version v0.3.24 2006-11-20 x42 - qt-gui removed debug, added QMessageBoxes, qjadeo preferences dialog update. - xjadeo: 'l' key to toggle letterbox - letterbox mode for imlib2 - xjadeo DnD fix * version v0.3.23 2006-11-19 x42 - qt-gui improvements (mencoder dialog, prefs) 2006-11-18 x42 - LASH remember window position - key bindings to scale video output 2006-11-17 x42 - change between all window modes: x11+imlib re-init/retain - added keystrokes to control OSD and offset * version v0.3.22 2006-11-16 x42 - properly convert escaped DnD text - portmidi quarter frames support 2006-11-15 x42 - SMPTE / MIDI TC drop frames code - alsa-midi: parse quarter frames (-C) - added midi options to cfgfile - removed command 'midi autoconnect' and added 'midi reconnect' - crudly convert '%20' to whitespaces when receiving drag data. - added '-P' --noping option to xjremote. 2006-11-14 rgareus - preparing for proper midi+smpte conversion. - added debian files to SVN. 2006-11-14 rgareus - qjadeo - sync-menu radio buttons - position slider (sync off mode) - query xjadeo settings (OSD, sync) on startup - renamed fullscreen -> maximize - xjadeo: get osdcfg, get syncsource remote commands - Xv letterbox (-b, --leterbox, "window letterbox [on|off]") - use file-fps as delay when (0 >= delay ) * version v0.3.21 2006-11-13 rgareus - fixed drag/drop accept area. - catch signals + clean up 2006-11-13 rgareus - `ffmpeg-config` and other configure.ac updates. - lash=[yes|no] and mq=[yes|no] config file options. - a little more documentation. * version v0.3.20 2006-11-12 rgareus - moved icons - completed lash support - unlink stale message queues - added x86_64*) ARCH=amd64 ;; (thanks to Detlef Reichelt & the PackMan-Team) - created xjremote man page. - message queues option becomes -Q - unlink option for xjremote 2006-11-11 rgareus - implemented message queues: xjremote! - 'remote=yes|no' config file option - -L, --nolash - more variables stored in lash config. - preliminary qjadeo patch -> xjremote. 2006-11-10 rgareus - icon - fixed qt BINDIR define (again) - prepared remote stdio replacement: mqueues prereq. for proper lash + gui 2006-11-09 rgareus - display_x11 cleanup part one. - docs description update - seek timeout. - re-indented sources (!) 2006-11-09 rgareus - on LASH resume -> ignore '-R' remote-mode - imlib2 - RGB24+RGBA32 - dropped gdk/gtk - revamped configure.ac - fixed continuous seeking (was in debug mode) 2006-11-07 rgareus - preliminary LASH support - so far only command line args. - preliminary Xv/x11 dnd 2006-11-06 rgareus - imlib2 support 2006-11-05 rgareus - added support for LIBAVCODEC_BUILD 4646 (ffmpeg-0.4.9-pre1) old seek code. 2006-11-04 rgareus - changed default seek behaviour to SEEK_ANY -k -> seek only to keyframes -K -> continuously decode all frames (starting @ keyframe) - config-file option seek=any|key|cont - removed hardcoded list of font files. 2006-10-28 rgareus - made -V a little more verbose. and -q a little more quiet :D 2006-10-28 rgareus - changed audioframe -> videoframe conversion back to floor() - updated framerate detection. - re-indented seek code. and changed -K, -k behaviour (no continuous seeks) - fixed ffmpeg packet allocation - XV-videomode only: - added always on top feature. ( '-a' ; press 'a' on widow ; no remote command for that yet) - added support to hide [mouse] cursor (press 'm' ) 2006-08-27 rgareus - added simple Extended Window Manager Hints(EWMH) fullscreen support for XV videomode. 2006-08-12 rgareus - av_q2d - fix to compile with older ffmpeg before LIBAVCODEC_BUILD 4753 2006-06-25 rgareus - updated debian-marillat to debian-multimedia in doc 2006-06-16 rgareus - updated contrib README and encode.sh 2006-06-13 rgareus - added jadio to contrib folder. 2006-06-12 rgareus - smpte support for non-integer fps - '-F ' allow to override fps info of file - '-K' -> 'old' seek to any frame mode - messed up avseek - added support for multi-packet frames. urgent TODO: remove all the nasty goto's from the initial example code :-X now that seeking is 'known to work' rewrite the whole darn thing and fix the dts/pts issues. This release is better than the version from June 06 as it fixes a possible endless (until EOF) frame seek issue... 2006-06-06 rgareus - when seeking to non key frames, the video can be decoded starting from the prev keyframe. - removed LIBAVCODEC < 4622 backwards seek compat. - new valid seekmodes (remote ctrl) are 'key', 'any' and 'continuous' (default). - OSD Frame is now the displayed frame, while the SMPTE still corresponds to jack time. - XV,SDL (YUV): added support for video image strides other than XV pitches. eg. if video width is not a multiple of 8 - prev. versions of xjadeo either crash, or display wrong colors... * version v0.3.13 2006-05-30 rgareus - proper YV12 and I420 support for XV. - SDL 1.2.9 or 1.1.6 2006-05-24 rgareus - added simple resource config parser. 2006-05-21 rgareus - minor fixes on the build environement for `make dist` (contrib, qt-gui sources, ..) - fixed some typos in yesterdays Makefile.am - never ending overkilling docbook * version v0.3.12 2006-05-20 rgareus - added docbook xslt and doc/Makefile... - work in progres on the manual. - changed Audioframe to videoframe, smpte converstion from floor to rint transport increments in steps of audiobuffer-size so we get proper results as audiobuffer-size != 1920 (48k->PAL) or 1601 (48k->NTSC) 2006-04-28 rgareus - fixed typo: since the 04/23 patches xjadeo was displaying the previous instead of the current frame! 2006-27-09 Luis Garrido - Added OSD font, frame and smpte commands to qjadeo menu. - OSD font is stored as a qjadeo preference. - Some docbook fixing. - Revamped qjadeo layout. 2006-04-23 rgareus - some remote function help typos - parsing videomode integer and text - notify [loop|frame] - more work in progress documentation. * version v0.3.11 2006-04-22 rgareus - added contrib folder - implememted 'list videomodes' - disabled 'get windowpos' - configure.ac: added contrib/cli-remote/Makefile to AC_CONFIG_FILES Note: contrib will not be built as it is not a subdir in Makefile.am - remote command return status now identifies physical units. added doc to the source: remote.c - changed return value of some xapi function. only MINOR numbers have been changed (rv: = MAJOR*100 + MINOR) * xjadeo v0.3.10 2006-04-17 rgareus - amidi seqencer instead of alsa rawmidi - remote cmd midi status fixed. - cmd arg. added "-x list" as alias for "-x -1" 2006-04-16 rgareus - configure.ac: --disable-portmidi -> 'force to' use alsamidi if avaliable - midi.c: added MTC sysex parser for alsamidi. - main.c: xjadeo new command line option -i , --info - xjadeo: fixed -t option. (exit instead of segfault when file not found :) * xjadeo v0.3.9 2006-04-11 rgareus many minor typos and fixes. fixed midi autodetection in configure.ac added alsa midi support as fallback if portmidi is not found * xjadeo v0.3.8 2006-04-11 rgareus * configure.ac: renamed options for consistancy. new defaults: autodetect all feat. only gtk is disabled by default added -DTTFFONTFILE comment. no configure option yet. * xjadeo: - --vo [|]. also swapped --vo option numbering.. for: - fallback video mode auto detection. - implemented rudimentary keyboard event support (for all display modes) - key quits xjadeo (all display modes) - --midifps [MTC|Video|resample] option and 'get/set midisync' remote cmd. - initialize midi just before event loop -> prevent midi buffer overflow - added alsamidi code. (works but not integrated in xjadeo & build system) - xapi 'get/set seekmode': seek to keyframes only. - minor fixes. 2006-04-09 Luis Garrido - configure.ac: fixed Qt autoconf test so Qt4 debug lib is not required. - src/qt-gui/Makefile.am: fixed typo. 2006-04-08 Luis Garrido - Fixed qjadeo makefile so the qt4 compilation keeps a backup of the qt3 version. 2006-04-08 Luis Garrido - Fixed broken autogen.sh (after removal of m4 subdir) - Fixed --disable-qtgui option. 2006-04-08 Luis Garrido - Autotoolification of qjadeo for Qt4. Now qjadeo takes the xjadeo binary from the environment variable XJADEO or from the install path. 2006-04-08 rgareus split xjadeo.c -> main.c remote.c - and loads of extern's :( xjadeo v0.3.7 2006-04-07 rgareus fixed b0rken XV (typo in display.c) added smpte parser and output (via remote and OSD) added MTC-fps to video-fps conversion code. 2006-04-07 rgareus splitted the display.c into sdl, gtk and X11 source files quick fixed configure.ac (qmake on debian) 2006-04-07 rgareus fixed HAVE_GTK and HAVE_SDL #defines in display.c 2006-04-06 Luis Garrido - Autotoolification of qjadeo for Qt3. Info taken from qjackctl and http://www.8ung.at/leising/autoconf/qt_qmake_autoconf_automake2.html 2006-04-06 Luis Garrido - Implementation of the maintainer-clean target. 2006-04-06 Luis Garrido - Reorganization of source tree. 2005-11-07 Luis Garrido - Fixed avseekflags for compatibility with LIBAVFORMAT_BUILD <= 4622. Thanks to Geoff Beasley for his cooperation. 2005-11-03 Luis Garrido - Edited NEWS, xjadeo.1, README 2005-11-03 rgareus - dynamic jack name. allowing multiple instances of xjadeo 2005-10-31 rgareus - added -o --offset time offset. in video-frames 2005-10-30 rgareus - new build environement, that checks dep. libraries. - parse command line options - fixes to work with newer Version of libffmpeg. * xjadeo v0.1.1 2005-02-02 luis * xjadeo v0.1.0 xjadeo-0.8.14/Makefile.am000066400000000000000000000021651461252343600151240ustar00rootroot00000000000000AC_AUX_DIR = m4 AC_MACRO_DIR = m4 SUBDIRS = src @ac_contrib_dir@ man_MANS = doc/xjadeo.1 doc/xjremote.1 EXTRA_DIST= \ xjadeo.lsm.in \ doc/xjadeorc \ doc/Makefile doc/xjadeo.1 doc/xjremote.1 \ \ src/xjadeo/icons/osd_bitmaps.h \ src/xjadeo/icons/brightness.bitmap src/xjadeo/icons/brightness_mask.xbm \ src/xjadeo/icons/contrast.bitmap src/xjadeo/icons/contrast_mask.xbm \ src/xjadeo/icons/gamma.bitmap src/xjadeo/icons/gamma_mask.xbm \ src/xjadeo/icons/hue.bitmap src/xjadeo/icons/hue_mask.xbm \ src/xjadeo/icons/saturation.bitmap src/xjadeo/icons/saturation_mask.xbm \ \ src/xjadeo/icons/xjadeo8.ico src/xjadeo/icons/xjadeo8_ico.h \ src/xjadeo/icons/xjadeoH.ico src/xjadeo/icons/xjadeoH.h \ src/xjadeo/icons/xjadeo8.xpm src/xjadeo/icons/xjadeoH128.png \ src/xjadeo/icons/xjadeo_win.ico \ src/xjadeo/fonts/ArdourMono.ttf \ \ contrib/cli-remote/jadeo.c \ contrib/cli-remote/Makefile.am \ contrib/cli-remote/README \ \ contrib/xjadeo-example.mp4 MAINTAINERCLEANFILES = \ Makefile.in \ aclocal.m4 \ compile \ config.guess \ config.h.in \ config.sub \ configure \ depcomp \ install-sh \ Makefile.in \ missing xjadeo-0.8.14/NEWS000066400000000000000000000106351461252343600135700ustar00rootroot00000000000000------------------------------------------- 20140724 ------------------------------------------- Does anyone still read those NEWs files? For real news check out the ChangeLog and https://github.com/x42/xjadeo/commits/master ------------------------------------------- 20061123 ------------------------------------------- I'm feeling lucky that I've able to spend my sparetime (and some more) on pushing xjadeo in the last two weeks! It's about time to refocus on using xjadeo, but there'll be ongoing low-pri development and support. Luis has put it quite well in saying: Ooooh, how has this baby grown up :_( 8-D check the TODO and doc/ for further information. the docbook is available online at http://xjadeo.sourceforge.net/doc/index.html#news ------------------------------------------- 20061106 ------------------------------------------- xjadeo has been working fine for personal usage over few month now, and though we lack time to clean up xjadeo, it's yet time for another release :) ------------------------------------------- 20060521 ------------------------------------------- xjadeo has been working fine for personal usage over a month now, and though we lack time to clean up xjadeo, it's yet time for another release. ------------------------------------------- 20060422 ------------------------------------------- after 2 months of xjadeo-0.3 rewrite, testing and using we find that the current xjadeo implements all features we expect from a simple video monitor :) New Features: * XV, SDL, gtk display backends. * remote control API allows to interact with a running instance of xjadeo. * (independant) QT Graphical User Interface * MIDI MTC can be used as alternate synchronization source. ------------------------------------------- 20051103 ------------------------------------------- Robin Gareus has jumped aboard and carried xjadeo from a quick hack for my personal usage to the level of a distributable beta package, throwing in some improvements on the way for good measure. Many kudos to him! The main problem people had so far to use xjadeo is to install the right set of libraries to build it. Ffmpeg is especially problematic, since it is under heavy development and is thus very unstable. Using only a minimal part of ffmpeg API, we had to make changes in xjadeo to accomodate three different changes in ffmpeg interface that broke xjadeo. WARNING! WARNING! WARNING! WARNING! WARNING! It is likely that ffmpeg will continue evolving in a non backwards compatible way, so bear in mind that updating ffmpeg may break xjadeo. xjadeo has been tested with the following versions of ffmpeg: - ffmpeg-0.4.9-0.20041110.0.1.rhfc3.ccrma.i386.rpm - ffmpeg-0.4.9-0.20050427.1.1.fc3.rpm It has been tested in debian distros as well. NEW FUNCTIONALITY - Resizing the window will resize the movie as well. (CAVEAT: resizing a video frame to make it fit the window is a cpu expensive operation. If you are not comfortable with the screen size of your movie it is more cpu efficient that you resize the file before loading it in xjadeo, via, e.g., 'mencoder'.) - Pressing Mouse button 1 - will resize the monitor window to the original movie size. - Mouse button 2 and 3 adjust the window to match the movie aspect ratio. - Scroll Wheel (button 4,5) stepwise decreases / increases the window size maintaining the original aspect ratio. Use your Window Manager kill button or CTRL-C to quit xjadeo. NEW OPTIONS xjadeo accepts the following options: -q, --quiet, --silent Inhibit usual output. -v, --verbose Print more information. -k, --keyframes Seek only to keyframes of the video. (improves performance but makes playing jerky or simply static if keyframes are not frequent ). -t, --try-codec Check if the given video file can be played by xjadeo. No window is opened in this mode. The program exits with code 1 if the file format is not supported. -f, --fps How often xjadeo updates the screen. The default is 10 fps (not the video file default)! -h, --help Shows a summary of the options. -V, --version Shows the version of the program. -o --offset Time offset in video-frames. There is a machine-dependent time lag between jack transport and video display. This option allows to compensate for it. NEW PACKAGING OPTIONS Configuration files for building RPM and DEB packages have been added. AUTHORS Luis Garrido , Robin Gareus xjadeo-0.8.14/README000066400000000000000000000023331461252343600137450ustar00rootroot00000000000000xjadeo - jack video monitor =========================== xjadeo is a simple video player that gets sync from jack. Please refer to the documentation in the doc folder for any details, or visit http://xjadeo.sf.net/ Basic build instructions ------------------------ git clone https://github.com/x42/xjadeo.git ./autogen.sh ./configure make sudo make install Build Dependencies ------------------ Development packages for the following software must be available to compile xjadeo: * ffmpeg (from ffmpeg.org at least version 1.0) * jack-audio-connection-kit (jackaudio.org) * libX11 (on Linux Only) * glu (mandatory for OSX and Windows only, but recommended on GNU/Linux) Recommended optional dependencies: * glu (opengl display) * freetype2 (on-screen-display) * asound (ALSA MIDI [MTC] support) * portmidi, porttime (windows/OSX MIDI [MTC] support) * libltc (LTC support) * liblo (OSC remote control support) Options: * libxv (on Linux, X-video acceleration) * imlib2 (Linux RGB display) * SDL (meant for windows only, really - but works on Linux, OSX too) Deprecated: * QT3 or QT4 (for external remote-control GUI) Copyright (C) 2005 - 2014 GPLv2 Luis Garrido Robin Gareus xjadeo-0.8.14/autogen.sh000077500000000000000000000001241461252343600150620ustar00rootroot00000000000000#!/bin/sh aclocal && autoheader && autoconf && automake --gnu --add-missing --copy xjadeo-0.8.14/configure.ac000066400000000000000000000475071461252343600153670ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT(xjadeo.c) AC_CONFIG_SRCDIR(src/xjadeo/xjadeo.c) AC_CANONICAL_HOST AC_CANONICAL_TARGET VERSION_MAJOR=0 VERSION_MINOR=8 VERSION_SUB=14 AM_INIT_AUTOMAKE(xjadeo, [${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_SUB}]) AM_CONFIG_HEADER(config.h) AC_ARG_ENABLE(xv, AC_HELP_STRING([--disable-xv], [Disable Xvideo extension (default:auto)])) AC_ARG_ENABLE(opengl, AC_HELP_STRING([--disable-opengl], [Disable OpenGL display (default:auto)])) AC_ARG_ENABLE(imlib2, AC_HELP_STRING([--disable-imlib2], [Disable use of imlib2 for display (default:auto)])) AC_ARG_ENABLE(sdl, AC_HELP_STRING([--disable-sdl], [Disable use of SDL display (default:auto)])) AC_ARG_ENABLE(ft, AC_HELP_STRING([--disable-ft], [Disable freetype On-Screen.Display support (default:auto)])) AC_ARG_WITH(fontfile, AS_HELP_STRING([--with-fontfile=file.ttf], [specify a path to a truetype font file to be used as default OSD font.]), fontfile="$withval", fontfile="") AC_ARG_ENABLE(jacksession, AC_HELP_STRING([--disable-jacksession], [disable JACK-Session support (default:auto)])) AC_ARG_ENABLE(mq, AC_HELP_STRING([--disable-mq], [disable POSIX message-queue remote control (default:auto)])) AC_ARG_ENABLE(ipc, AC_HELP_STRING([--disable-ipc], [disable IPC message-queue remote control (default:auto)])) AC_ARG_ENABLE(osc, AC_HELP_STRING([--disable-osc], [disable OSC remote control support (default:auto)])) AC_ARG_ENABLE(ltc, AC_HELP_STRING([--disable-ltc], [disable LTC sync support (default:auto)])) AC_ARG_ENABLE(midi, AC_HELP_STRING([--disable-midi], [Do not build any of the MIDI drivers (default:on)])) AC_ARG_ENABLE(portmidi, AC_HELP_STRING([--disable-portmidi], [disable portmidi support (default:auto)])) AC_ARG_ENABLE(alsamidi, AC_HELP_STRING([--disable-alsamidi], [disable alsamidi support (default:auto)])) AC_ARG_ENABLE(embed-font, AC_HELP_STRING([--enable-embed-font], [include OnScreenDisplay font in binary (default: off)])) AC_ARG_ENABLE(qtgui, AC_HELP_STRING([--enable-qtgui],[Build the Qt GUI controller (default:off)])) AC_ARG_WITH(qt4prefix, AS_HELP_STRING([--with-qt4prefix], [prefix for Qt4 installation, e.g. "/usr/lib/qt4"]), qt4prefix="$withval", qt4prefix="") AC_ARG_WITH(qmakeargs, AS_HELP_STRING([--with-qmakeargs], [specify custom qmake arguments]), qmakeargs="$withval", qmakeargs="") AC_ARG_ENABLE(contrib, AC_HELP_STRING([--enable-contrib], [Compile and install code in contrib folder (default:off)])) AC_ARG_ENABLE(timescale, AC_HELP_STRING([--enable-timescale], [enable time-mapping/loop-playback support - experimental - DO NOT USE])) AC_ARG_ENABLE(framecrop, AC_HELP_STRING([--enable-framecrop], [hardcoded frame cropping - experimental - DO NOT USE])) AC_ARG_ENABLE(weakjack, AC_HELP_STRING([--enable-weakjack], [load libjack at runtime (weak linking -- always enabled on OSX and Windows)])) AC_ARG_ENABLE(xinerama, AC_HELP_STRING([--enable-xinerama],[Enable xinerama support.])) LIBPREF=lib LIBSUF=.a case $target_os in *darwin*) AC_MSG_NOTICE([TARGET: OSX]) PM_OS=mac AC_DEFINE([PLATFORM_OSX], [], [Mac OSX version]) PLATFORM_OSX=1 LDFLAGS="$LDFLAGS -lz -lbz2" GL_LIBS="-framework Cocoa -framework OpenGL" AC_DEFINE(HAVE_GL) HAVE_GL=1 AM_CONDITIONAL([TARGET_OSX], true) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], false) if test $(sw_vers -productVersion | cut -d '.' -f 1) -lt 11 -a $(sw_vers -productVersion | cut -d '.' -f 2) -lt 15; then LDFLAGS="$LDFLAGS -framework Carbon -framework Quicktime" fi dnl 2006/11/13 : 32 bit RGBA is known not to work on OSX ffmpeg+imlib2 dnl IMLIB2RGBA ;; *linux*|gnu*|k*bsd*-gnu) AC_DEFINE([PLATFORM_LINUX], [], [GNU/Linux version]) PLATFORM_LINUX=1 AC_MSG_NOTICE([TARGET: LINUX]) PM_OS="linux"; AC_DEFINE([IMLIB2RGBA], [], [use native RGB32 ffmpeg -> imlib.]) AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], true) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], false) LIBS="$LIBS -L/usr/X11R6/lib" ;; *netbsd*) AC_DEFINE([PLATFORM_NETBSD], [], [NetBSD version]) PLATFORM_NETBSD=1 AC_MSG_NOTICE([TARGET: NETBSD]) PM_OS="netbsd"; AC_DEFINE([IMLIB2RGBA], [], [use native RGB32 ffmpeg -> imlib.]) AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], true) AM_CONDITIONAL([TARGET_WIN32], false) ;; *mingw32*|*win*) AC_MSG_NOTICE([TARGET: WINDOWS]) PM_OS=win AC_DEFINE([PLATFORM_WINDOWS], [], [Windows version]) PLATFORM_WINDOWS=1 LIBSUF=.dll EXESUF=.exe GL_LIBS="-lopengl32 -lglu32 -lgdi32" AC_DEFINE(HAVE_GL) HAVE_GL=1 AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], true) AC_CHECK_TOOL(WINDRES, windres, false) if test "$WINDRES" = "false"; then AC_MSG_ERROR([Could not find an implementation of windres in PATH.]) fi ;; *) AC_MSG_WARN([*** unknown target OS ***]) ;; esac if test "x$enable_embed_font" = "xyes"; then AM_CONDITIONAL([EMBED_FONT], true) else AM_CONDITIONAL([EMBED_FONT], false) fi dnl AC_SUBST(DISPLAY_OPENGL) AC_SUBST(VERSION) dnl ISODATE=`date +%Y-%m-%d` dnl AC_SUBST(ISODATE) dnl Checks for compiler(s). AC_PROG_INSTALL AC_PROG_CC AM_PROG_CC_C_O AC_PROG_OBJC AC_C_CONST AC_C_BIGENDIAN dnl Standard Checks AC_HEADER_STDC AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_HEADERS(time.h string.h) dnl Checks for libraries. dnl video output AH_TEMPLATE([HAVE_GL], [Define to enable openGL (linux,netbsd,osx,win)]) AH_TEMPLATE([HAVE_SDL], [Define as 1 if you have the SDL toolkit (linux,netbsd,osx,win)]) AH_TEMPLATE([HAVE_LIBXV], [Video Output: XVideo support (linux,netbsd)]) AH_TEMPLATE([HAVE_IMLIB2], [Video Output: plain old imlib2 (linux,netbsd)]) AH_TEMPLATE([IMLIB2RGBA], [Define for RGBA32 imlib2 (not RGB24)]) AH_TEMPLATE([HAVE_LIBXINERAMA], [Define for Xinerama support]) dnl MTC sync AH_TEMPLATE([HAVE_MIDI], [general MIDI (MTC) support]) AH_TEMPLATE([HAVE_JACKMIDI], [Define as 1 to enable JACK-MIDI]) AH_TEMPLATE([HAVE_PORTMIDI], [Define as 1 to enable the portmidi driver (win,osx)]) AH_TEMPLATE([ALSA_SEQ_MIDI], [Define as 1 to enable ALSA sequencer (linux,netbsd)]) AH_TEMPLATE([ALSA_RAW_MIDI], [Define as 1 to enable ALSA-raw midi (linux,netbsd)]) dnl LTC sync AH_TEMPLATE([HAVE_LTC], [Define as 1 if you have libltc - http://github.com/x42/libltc ]) dnl jack options AH_TEMPLATE([JACK_SESSION], [add JACK Session support]) AH_TEMPLATE([HAVE_JACK_VIDEO], [experimental code to use jack_transport fps, jack-svn >= r591]) AH_TEMPLATE([NEW_JACK_LATENCY_API], [use JACKs new latency API (ltc)]) dnl remote control AH_TEMPLATE([HAVE_MQ], [Define as 1 if you have POSIX message queues (libc, librt)]) AH_TEMPLATE([HAVE_IPCMSG], [Define as 1 if you have IPC message queues (system-V)]) AH_TEMPLATE([HAVE_LIBLO], [Define as 1 if you have the loblo OSC library]) AH_TEMPLATE([TTFFONTFILE], [absolute path to truetype default OSD font file]) dnl misc AH_TEMPLATE([CFG_WARN_ONLY], [errors in the resource config file only result in a warning message instead of forcing xjadeo to exit.]) AH_TEMPLATE([DND], [enable xjadeo x11/glx drag and drop]) AH_TEMPLATE([XDLG], [enable xjadeo x11/glx context menu]) AH_TEMPLATE([XFIB], [enable xjadeo x11 file browser]) AH_TEMPLATE([COLOREQ], [enable XV and imlib2 color equalizer]) AH_TEMPLATE([TIMEMAP], [enable dynamic time scaling]) AH_TEMPLATE([CROPIMG], [enable frame cropping]) AH_TEMPLATE([DRAW_CROSS], [paint a X on screen when unable to decode or display a frame.]) AH_TEMPLATE([WINMENU], [enable xjadeo windows context-menu]) dnl fixed configuration AC_DEFINE(CFG_WARN_ONLY) AC_DEFINE(DND) AC_DEFINE(WINMENU) AC_DEFINE(XDLG) AC_DEFINE(XFIB) AC_DEFINE(DRAW_CROSS) AC_DEFINE(COLOREQ) if test "x$enable_timescale" != "xyes"; then AC_DEFINE(TIMEMAP) fi if test "x$enable_framecrop" = "xyes"; then AC_DEFINE(CROPIMG) fi AC_HEADER_MAJOR AC_FUNC_ALLOCA AC_STRUCT_TM dnl --------------------------------------------------------------------------- dnl JACK first. PKG_CHECK_MODULES(JACK, jack, , AC_MSG_ERROR([Could not fine JACK audio development kit - jackaudio.org.])) AC_SUBST(JACK_CFLAGS) AC_SUBST(JACK_LIBS) if test "x$enable_jacksession" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" AC_CHECK_HEADERS([jack/session.h], AC_DEFINE(JACK_SESSION) JACK_SESSION=1) CPPFLAGS="$tmp_CPPFLAGS" fi tmp_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $JACK_LDFLAGS" AC_CHECK_LIB(jack, jack_port_get_latency_range, [AC_DEFINE(NEW_JACK_LATENCY_API) NEW_JACK_LATENCY_API=1]) LDFLAGS="$tmp_LDFLAGS" dnl --------------------------------------------------------------------------- dnl Check for ffmpeg: avformat/avcodec PKG_CHECK_MODULES(FFMPEG, libavformat libavcodec libavutil libswscale, , AC_MSG_ERROR([ Could not find ffmpeg. Please set PKG_CONFIG_PATH to where FFMPEG installed its pkg files. If you have the choice prefer ffmpeg.org over libav.org. Both are supported but xjadeo is developed and tested with the former. ])) AC_SUBST(FFMPEG_CFLAGS) AC_SUBST(FFMPEG_LIBS) dnl --------------------------------------------------------------------------- dnl remote control.. MQ_LIBS="" if test "x$enable_mq" != "xno"; then AC_CHECK_LIB(rt, mq_open, [AC_DEFINE(HAVE_MQ) MQ_LIBS="-lrt" HAVE_MQ=1]) fi AC_SUBST(MQ_LIBS) AC_DEFINE(MQLEN, 512, [ max length of a remote control line. ]) dnl prefer POSIX RT mqueue over IPC.. if test "x$enable_ipc" != "xno"; then if test -z "$HAVE_MQ"; then AC_CHECK_HEADERS([sys/ipc.h sys/msg.h] , AC_DEFINE(HAVE_IPCMSG) HAVE_IPCMSG=1 ) fi fi AS_IF([test "x$enable_osc" != "xno"], [ PKG_CHECK_MODULES(LIBLO, liblo, [AC_DEFINE(HAVE_LIBLO) HAVE_LIBLO=1], [NOFAIL=0]) ]) AC_SUBST(LIBLO_CFLAGS) AC_SUBST(LIBLO_LIBS) dnl --------------------------------------------------------------------------- dnl Display related AS_IF([test -z "$PLATFORM_OSX$PLATFORM_WINDOWS"], [ AC_CHECK_HEADERS([X11/Xlib.h], , AC_MSG_ERROR([X11 is mandatory on this platform - install libx11/xcb development package.])) AC_CHECK_LIB([X11], [XOpenDisplay], [XV_LIBS="-lXext"], AC_MSG_ERROR([X11 is mandatory on this platform - install libx11/xcb development package.])) PKG_CHECK_MODULES(XPM, xpm, , AC_MSG_ERROR([Xpm support is mandatory on this platform - install libxpm development package.])) ]) if test "x$enable_xinerama" = "xyes" ; then PKG_CHECK_MODULES(DPY_XINERAMA, xinerama, [AC_DEFINE(HAVE_LIBXINERAMA) XV_LIBS="$XV_LIBS -lXinerama" HAVE_LIBXINERAMA=1 ], []) fi if test "x$enable_xv" != "xno"; then AC_CHECK_LIB(Xv, XvQueryAdaptors, [AC_DEFINE(HAVE_LIBXV) XV_LIBS="$XV_LIBS -lXv" HAVE_LIBXV=1 ], [], $X_LIBS) fi AC_SUBST(XV_LIBS) AC_SUBST(XV_CFLAGS) AS_IF([test "x$enable_sdl" != "xno"], [ PKG_CHECK_MODULES(SDL, sdl, [AC_DEFINE(HAVE_SDL) HAVE_SDL=1], [NOFAIL=0]) ]) AC_SUBST(SDL_LIBS) AC_SUBST(SDL_CFLAGS) AS_IF([test "x$enable_opengl" != "xno" -a -z "$PLATFORM_WINDOWS$PLATFORM_OSX"], [ PKG_CHECK_MODULES(GL, glu gl, [AC_DEFINE(HAVE_GL) HAVE_GL=1], [NOFAIL=0]) ]) AC_SUBST(GL_LIBS) AC_SUBST(GL_CFLAGS) AS_IF([test "x${enable_imlib2}" != "xno"], [ PKG_CHECK_MODULES(IMLIB2, imlib2 >= 1.3.0, [AC_DEFINE(HAVE_IMLIB2) HAVE_IMLIB2=1], [NOFAIL=0]) ]) AC_SUBST(IMLIB2_CFLAGS) AC_SUBST(IMLIB2_LIBS) dnl --------------------------------------------------------------------------- dnl midi lib detection if test "x$enable_midi" != "xno"; then MIDI_CFLAGS="" MIDI_CFLAGS="" if test "x$enable_portmidi" != "xno"; then AC_CHECK_HEADERS(portmidi.h porttime.h , [FOUND_H_PORTMIDI=yes]) AC_CHECK_LIB([portmidi], [Pm_CountDevices], [FOUND_L_PORTMIDI=yes]) fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then MIDI_LIBS="-lportmidi" dnl TODO check if porttime is needed for threading if test "$PM_OS" != "mac"; then MIDI_LIBS="${MIDI_LIBS} -lporttime" fi fi if test "x$JACKMIDI" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" AC_CHECK_HEADERS(jack/midiport.h, [FOUND_H_JACKMIDI=yes]) CPPFLAGS=$tmp_CPPFLAGS fi if test "x$enable_alsamidi" != "xno"; then AC_CHECK_HEADERS(alsa/asoundlib.h, [FOUND_H_ALSAMIDI=yes]) AC_CHECK_HEADERS(pthread.h, [FOUND_H_PTHREAD=yes]) AC_CHECK_LIB([asound], [snd_rawmidi_open], [FOUND_L_ALSAMIDI=yes]) fi if test "x$FOUND_H_ALSAMIDI$FOUND_L_ALSAMIDI$FOUND_H_PTHREAD" = "xyesyesyes"; then AC_DEFINE(ALSA_SEQ_MIDI) AC_DEFINE(ALSA_RAW_MIDI) AC_DEFINE(HAVE_MIDI) HAVE_MIDI=1 ALSA_SEQ_MIDI=1 ALSA_RAW_MIDI=1 MIDI_LIBS="$MIDI_LIBS -lasound" fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then AC_DEFINE(HAVE_MIDI) AC_DEFINE(HAVE_PORTMIDI) HAVE_MIDI=1 HAVE_PORTMIDI=1 dnl LIBS have been set above fi if test "x$FOUND_H_JACKMIDI" = "xyes"; then AC_DEFINE(HAVE_MIDI) AC_DEFINE(HAVE_JACKMIDI) HAVE_MIDI=1 HAVE_JACKMIDI=1 dnl no extra libs are needed (jack is already required) fi fi AC_SUBST(MIDI_LIBS) AC_SUBST(MIDI_CFLAGS) dnl --------------------------------------------------------------------------- dnl weak-jack if test "x$enable_weakjack" = "xyes"; then JACK_CFLAGS+=" -DUSE_WEAK_JACK" JACK_LIBS=-ldl AC_SUBST(JACK_CFLAGS) AC_SUBST(JACK_LIBS) fi dnl --------------------------------------------------------------------------- dnl Check for freetype (On Screen Display) FREETYPE_LIBS= FREETYPE_CFLAGS= PKG_CHECK_MODULES(FREETYPE, freetype2, [freetype_pkgconfig=yes], [freetype_pkgconfig=no]) if test "x$freetype_pkgconfig" = "xyes"; then if test ! "x$enable_ft" = "xno"; then AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) AC_DEFINE(HAVE_FT, 1, [Use freetype for OSD]) HAVE_FT=1 else FREETYPE_LIBS= FREETYPE_CFLAGS= fi else AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no) if test "x$FREETYPE_CONFIG" != "xno" -a ! "x$enable_ft" = "xno"; then FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) AC_DEFINE(HAVE_FT, 1, [Use freetype for OSD]) HAVE_FT=1 fi fi AC_SUBST(FREETYPE_CFLAGS) AC_SUBST(FREETYPE_LIBS) if test -n "$fontfile" ; then # I'm not sure if this is the proper way to escape a #define string. # AC_DEFINE(TTFFONTFILE, "\"$fontfile\"") - no # FREETYPE_CFLAGS="$FREETYPE_CFLAGS -DTTFFONTFILE=\\\"$fontfile\\\"" - maybe dnl hack alert - we 'should' use our own .h file for this dnl this might not work with some autoconf's echo "#define TTFFONTFILE \"$fontfile\"" >> confdefs.h fi dnl --------------------------------------------------------------------------- dnl https://github.com/x42/libltc AS_IF([ test "x$enable_ltc" != "xno"], [ PKG_CHECK_MODULES(LTC, ltc, [AC_DEFINE(HAVE_LTC) HAVE_LTC=1], [NOFAIL=0] ) ]) AC_SUBST(LTC_CFLAGS) AC_SUBST(LTC_LIBS) dnl --------------------------------------------------------------------------- dnl Qt GUI stuff (unmaintained) if test "$enable_qtgui" = "yes"; then if test "x$qt4prefix" = "x"; then qt4prefix=$($PKG_CONFIG --variable=prefix QtGui) fi # Check for Qt qmake utility. AC_PATH_PROG(ac_qmake, qmake, [no], $qt4prefix/bin) AC_PATH_PROG(ac_lrelease, lrelease, [no], $qt4prefix/bin) if test "x$ac_qmake" = "xno" -o "x$ac_lrelease" = "xno" ; then AC_MSG_ERROR([qmake not found: please install the Qt4 development package of your distribution. Try setting --with-qt4prefix=QTROOT or use --disable-qtgui to compile xjadeo.]) fi HAVE_QT4=1 if test "x$qmakeargs" = "x"; then if test -n "$PLATFORM_WINDOWS"; then ac_qmake_args="-spec win32-x-g++ -config release" else ac_qmake_args="-config release" fi else ac_qmake_args="$qmakeargs" fi AC_SUBST(ac_qmake) AC_SUBST(ac_qmake_args) AC_SUBST(ac_lrelease) ac_qtgui_dir="qt-gui" AC_CONFIG_FILES(src/qt-gui/Makefile src/qt-gui/qjadeo.pro) else ac_qtgui_dir="" fi AC_SUBST(ac_qtgui_dir) dnl ---------- End of Qt GUI stuff --------------- ac_contrib_dir="" if test "x$enable_contrib" = "xyes"; then ac_contrib_dir="contrib/cli-remote/" fi AC_SUBST(ac_contrib_dir) if test "x$enable_contrib" = "xyes"; then AC_CONFIG_FILES([contrib/cli-remote/Makefile]) fi dnl --------------------------------------------------------------------------- dnl We're done! AC_CONFIG_FILES([Makefile src/Makefile src/xjadeo/Makefile xjadeo.lsm]) dnl write a niiiice report AC_OUTPUT MIDIREPORT="" if test -n "$HAVE_PORTMIDI"; then MIDIREPORT="${MIDIREPORT}portmidi "; fi if test -n "$HAVE_JACKMIDI"; then MIDIREPORT="${MIDIREPORT}jack-midi "; fi if test -n "$ALSA_SEQ_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-seq "; fi if test -n "$ALSA_RAW_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-RAW "; fi if test -z "$HAVE_MIDI"; then MIDIREPORT="${MIDIREPORT}disabled."; fi if test -n "$HAVE_MQ"; then RCTLREPORT="POSIX-MQ"; elif test -n "$HAVE_IPCMSG"; then RCTLREPORT="IPC-MSG"; else RCTLREPORT="N/A (stdio only)"; fi if test -z "$HAVE_FT"; then OSDREPORT="disabled" else OSDREPORT=" - freetype: yes - custom font: " if test -n "$fontfile" ; then OSDREPORT="${OSDREPORT}$fontfile"; else OSDREPORT="${OSDREPORT}-" fi if test "x$enable_embed_font" = "xyes"; then OSDREPORT="${OSDREPORT} - embed font: yes" else OSDREPORT="${OSDREPORT} - embed font: no" fi fi CONTREPORT="no" if test "x$enable_contrib" = "xyes"; then CONTREPORT="yes" fi if test -n "$HAVE_GL"; then RPT_OPENGL="yes"; else RPT_OPENGL="not avail."; fi if test -n "$HAVE_LIBXV"; then RPT_LIBXV="yes"; else RPT_LIBXV="not avail."; fi if test -n "$HAVE_LIBXINERAMA"; then RPT_LIBXINERAMA="yes"; else RPT_LIBXINERAMA="no."; fi if test -n "$HAVE_IMLIB2"; then RPT_IMLIB2="yes"; else RPT_IMLIB2="not avail."; fi if test -n "$PLATFORM_OSX"; then RPT_MACOSX="yes"; else RPT_MACOSX="not avail."; fi if test -n "$HAVE_SDL"; then RPT_SDL="yes"; else RPT_SDL="not avail."; fi if test -n "$HAVE_LIBLO"; then RPT_LIBLO="yes"; else RPT_LIBLO="not avail."; fi if test -n "$HAVE_QT4"; then RPT_QT4="yes"; else RPT_QT4="no"; fi if test -n "$PLATFORM_OSX"; then RPT_QT4="${RPT_QT4} (OSX-built-in)"; fi if test -n "$JACK_SESSION"; then RPT_JACKSESSION="yes"; else RPT_JACKSESSION="not avail."; fi if test -n "$NEW_JACK_LATENCY_API"; then RPT_JACK_LATENCY="yes"; else RPT_JACK_LATENCY="not avail."; fi if test -n "$HAVE_LTC"; then RPT_LTC="yes"; else RPT_LTC="not avail."; fi AC_MSG_NOTICE([ ------------------------------------------------------------------------ $PACKAGE $VERSION - Configuration Report ------------------------------------------------------------------------ prefix: $prefix exec-prefix: $exec_prefix install path: $bindir System wide config: $sysconfdir/xjadeorc Video Displays - openGL: $RPT_OPENGL - libxinerama: $RPT_LIBXINERAMA - libxv: $RPT_LIBXV - libx11/imlib2: $RPT_IMLIB2 - mac/quartz: $RPT_MACOSX - SDL: $RPT_SDL Sync: - JACK-transport: yes - LTC: $RPT_LTC - MIDI: $MIDIREPORT JACK-session: $RPT_JACKSESSION JACK-latency-api: $RPT_JACK_LATENCY remote control: $RCTLREPORT OSC remote control: $RPT_LIBLO On-screen-display: $OSDREPORT GUI (qjadeo): $RPT_QT4 build contrib/*: $CONTREPORT ]) if test "x$enable_contrib" = "xyes"; then AC_MSG_NOTICE([ Note for Packagers: --enable-contrib does not make a difference when packaging. All programs in contrib/ are noinst targets. They are intended for advanced users, developers and testing only. ]) fi if test -n "$PLATFORM_LINUX$PLATFORM_NETBSD" -a -n "$HAVE_PORTMIDI"; then AC_MSG_NOTICE([ PortMidi is intended for non Un*x Platforms only. On Linux, please use JACK, ALSA-seq or ALSA-raw. ]) fi if test -n "$PLATFORM_LINUX$PLATFORM_OSX$PLATFORM_NETBSD" -a -n "$HAVE_QT4"; then AC_MSG_WARN([ qjadeo is deprecated an not intended to be used. It will be removed in future releases. Xjadeo now features a complete built-in user interface. Do not use --enable-qtgui unless you really know what you are doing. ]) fi AC_MSG_NOTICE([ type "make" followed my "make install" as root. ]) xjadeo-0.8.14/contrib/000077500000000000000000000000001461252343600145245ustar00rootroot00000000000000xjadeo-0.8.14/contrib/cli-remote/000077500000000000000000000000001461252343600165645ustar00rootroot00000000000000xjadeo-0.8.14/contrib/cli-remote/Makefile.am000066400000000000000000000012501461252343600206160ustar00rootroot00000000000000noinst_PROGRAMS=jadeo-rcli jadeo_rcli_SOURCES = jadeo.c ../../aclocal.m4 ../../config.h \ ../../src/xjadeo/jack.c ../../src/xjadeo/midi.c \ ../../src/xjadeo/smpte.c ../../src/xjadeo/common_jack.c \ ../../src/xjadeo/weak_libjack.c jadeo_rcli_CFLAGS = -Wall -g -O3 -pthread -I../../src/xjadeo/ @MIDI_CFLAGS@ @JACK_CFLAGS@ jadeo_rcli_LDADD = @MIDI_LIBS@ -lm if TARGET_LINUX jadeo_rcli_LDADD+=@JACK_LIBS@ endif if TARGET_WIN32 jadeo_rcli_CFLAGS+=-DUSE_WEAK_JACK jadeo_rcli_LDADD+=-lws2_32 -lwinmm endif if TARGET_OSX jadeo_rcli_CFLAGS+=-DUSE_WEAK_JACK jadeo_rcli_LDADD+=-ldl endif MAINTAINERCLEANFILES = Makefile.in xjadeo-0.8.14/contrib/cli-remote/README000066400000000000000000000036511461252343600174510ustar00rootroot00000000000000---- DEPRECATED SOFTWARE ---- xjadeo can be remote-controlled by OSC or MQ; remote-synchronization is also possible using netjack. using xjadeo-rcli is highly discouraged. ---- DEPRECATED SOFTWARE ---- this is a quick hack to experiment with xjadeo remote control. jadeo-rcli is a Command Line Client xjadeo, that generates remote commands to be piped into a 'xjadeo -R' instance. eg. ./xjadeo-rcli | ../../src/xjadeo/xjadeo -R xjadeo-rcli connects to a local time source (jack or MIDI) and generates 'seek ' messages to stdout. It is a crude way to forward sync information from one host to another. I've been using a small script 'rjadeo.sh' to start a xjadeo on a local display of the remote-host: rjadeo.sh: (on remote host) --------8<------- #!/bin/sh export DISPLAY=:0 exec ~/xjadeo $@ &>/dev/null -------->8------- ./xjadeo-rcli | ssh ~/bin/rjadeo.sh -R This does not require the remote hosts to run a jackd, but gets you a monitor screen in sync with your local jack transport or MTC. With TCP or even SSL overhead, the latency is unpredictable, but even on a cheap system acceptable: playing at 25 fps, I got less than one video frame skew when transmitting to 2 remote hosts simulaneously on a local 11Mbit/s wireless! However if you want to have an accurate synchronization use netjack.sf.net to sync transport of the jackd's via UDP. ### jadeo.c: this is a proof of concept code. much of the code is hardcoded. edit jadeo.c for your needs.. * it outputs some hardcoded remote-commands to initialize the xjadeo * connect to local jackd or MIDI TC source. and generate 'seek ' messages if the frame changes. * read from and echo lines to . allows to insert custom remote commands. ### using the 'seek' remote command to play a movie is not an intended feature of xjadeo! Neither is the concept of passing sync info like this. However it may come in handy.. xjadeo-0.8.14/contrib/cli-remote/jadeo.c000066400000000000000000000074011461252343600200140ustar00rootroot00000000000000/* * xjadeo windowless remote-master * * 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, 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. * * (C) 2006 Robin Gareus * * This is a quick hack to generate xjadeo remote commands * to stdout. this version also reads from stdin and echos * commands to stdout. * * the default "remote command header" is hardcoded. * * * examples: * ./xjadeo-rcli | xjadeo -R &>/dev/null * ./xjadeo-rcli | rsh xjadeo -R * ./xjadeo-rcli | ssh <[user@]host> rjadeo.sh -R * */ #include #include #include #include #include double framerate; // = frames / duration; char *program_name; long frames = 25; double duration =1; int jack_autostart = 1; /* hardcoded settings */ int want_quiet = 1; int want_verbose = 0; int want_debug = 0; #ifdef HAVE_MIDI int midi_clkconvert = 0; int midi_clkadj = 0; char *midiid = NULL; #endif int want_autodrop =1; /* --nodropframes -n (hidden option) */ int want_dropframes =0; /* --dropframes -N BEWARE! */ int have_dropframes =0; double delay = 0.04; // HERE: for MTC timeout only #ifdef JACK_SESSION // XXX jadeo does not actually support JACK-SESSION // but it uses xjadeo's jack.c char *jack_uuid = NULL; int loop_flag = 1; int interaction_override =0; #endif /* mode of operation */ int jack = 1; int readfromstdin = 1; // set to 0 or 1! void usage(int status) { printf("usage %s [fps-num:=25] [fps-den:=1]\n",program_name); exit(status); } int main (int argc, char **argv) { int run; char *filename = NULL; long frame, pframe; program_name = argv[0]; if (argc>3) usage(1); if (argc==3) { filename=argv[2]; frames=atol(argv[1]); } else if (argc>1) filename=argv[1]; if (frames < 1 || duration < 1) usage(1); if (!filename) usage(1); framerate = (double) frames / (double) duration; struct timeval tv; fd_set set; //TODO: trap some signals.. -> run=0; if (jack) { open_jack(); run= jack_connected(); } else{ #ifdef HAVE_MIDI midi_open(midiid); #endif run= midi_connected(); } printf ("jack disconnect\n"); printf ("load %s\n",filename); printf ("window mouse off\n"); printf ("window letterbox on\n"); printf ("window fullscreen on\n"); // printf ("window resize 880x545\n"); printf ("osd font /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf\n"); printf ("osd off\n"); printf ("osd smpte 100\n"); printf ("set fps %.0f\n",framerate); pframe=-1; while (run) { tv.tv_sec = 0; tv.tv_usec = 1000000/framerate; FD_ZERO(&set); if (readfromstdin) FD_SET(0, &set); if (select(0+readfromstdin, &set, NULL, NULL, &tv) ) if (readfromstdin) { size_t rv; char buf[BUFSIZ]; if ((rv=read(0,buf,BUFSIZ)) > 0) { if (!strncmp(buf,"exit",3)) { printf ("quit\n"); run=0; }else write(1,buf,rv); } } if (jack) frame= jack_poll_frame(NULL); #ifdef HAVE_MIDI else frame= midi_poll_frame(); #else else exit (1); #endif if (pframe!=frame) printf ("seek %li\n",frame); pframe=frame; fflush(stdout); } if (jack) close_jack(); #ifdef HAVE_MIDI else midi_close(); #endif return (0); } int saveconfig (const char *filename) { return 0; } /* vim:set ts=8 sts=8 sw=8: */ xjadeo-0.8.14/contrib/pkg-osx/000077500000000000000000000000001461252343600161145ustar00rootroot00000000000000xjadeo-0.8.14/contrib/pkg-osx/Info.plist000077500000000000000000000010531461252343600200660ustar00rootroot00000000000000 CFBundleExecutable Jadeo CFBundleName Jadeo CFBundlePackageType APPL CFBundleSignature ~~~~ CFBundleVersion 1.0 CFBundleIconFile Jadeo CSResourcesFileMapped xjadeo-0.8.14/contrib/pkg-osx/Jadeo.icns000066400000000000000000001146741461252343600200310ustar00rootroot00000000000000icnsTOC 8is32(s8mkil32l8mkit32Lt8mk@is32(s8mkil32 պϾ ʽӺ +U@NR'UŔʺ-Õy]ǢaځroLY\Xс຺7З L",+)'&%#"! -+)#  -+*)'&#!  .,+)($#  .,+*'$#"  .-,*&%$#!  /-,*(&$!' /.-+*(&$#!   'g;Rp ? Π` ĺU@ߺUŔ!ʺA-ҺǢaځ#05##sv&##L3##,8##p(H##'>#05##sv! L38 $*@LPUSPLSiifrӬiȀہȀŁS [S[ )-*(())(*.5318JS\iv_Ѐz;>zbƌ>zbƈ "#Z$'\0#,c##r2#(SjL##JW(##BF(##Fa%##FW$#WB#8p#/v*#(zo'#Lo#Fa%##FW$#WB#8p+vzo  # 8PHFBH[_iWSXmO01[/,Jz*;(oF*1jo1,H0W_5%iv|z(F+#8U0'#'OU1*0b_5%iv|z(F*8U) OU/H\_\b_abr|zvmmpشЀހЀހ  #^%(*@;>\PЂ/,[1P|8B|,/FoذO[0[Ђ3\OiJ|HXoذO[0[Ђ3\OiJ|H!#%#$#$$#%#$#$%#%#%#%%#$$#%#$# $%##!"#" "#"  #   #  !#!!#!"#" "#%%$#"  "#%*+%#$&&$#"  "#(+$#%+'###"  #(?&#%-(###   #%3-$#$*1&###    #(B'#'<*###    #$/-$#'1-%##0f#$zH#$bY#HF#    # &F*(10%##,|###x#   # $+<7&##1O##HCAԀ#I9CL##GY1n0#  "# $/}v)$##]$#%##=##7#&##*##K#|#"  "#'€*$##2s######$#-#"  "#&=1%#ȟ##+ǀ##ҁ####Ӂ#%Ǎ#" "#$0oi.$#΀## t,#####ۄ/##$#-#"!#$)46)#&#%###&##;##3#'##$kpV##K##!!# %)23'#Á#R7##UB@Ӏ#j<8n##TY1r.#!  # '->*30&#2=#(#$#$%#d#   #$(2'$&-$#28#(?##'a#%ya$#U9#  "#%,B($#$+I(#" "#'($#$-1'#"!#'08'$#%1+#!  #$'++&#'0*#%de%#   "#$#&**&#&ƃ&#" !# }><}#! # ,##,#  "#$x#0)###7##=#,##d(##d##)# )##)#" !##Q#i#)VZ#)i#&xp)##Sjp###%Ȃ# R**\#! #A#/#8#8>#Q#%8#%*#p###0#_h#  "#:+##go#gch#w##gh#b##M###[]#t#"  ##5x_##D$##81#t##8#0##M#*&1# mBBD#  "#2&####с##-@#&##mv#Ho7$# 3##3#"  # d##$X6#$*#~$#(Ӏ#4#y?f# &##&ĉ#  "#:##0#0=#sy0#/##'$#(s# 1##2#"  #Հ#Zx#$#Zwk#(#A[y#)$#~n###Cn# 1-#ACb#  !#v#x\#Rc#x$S##靄%#*#+E#S#*ڃ$#! "#*#)#:,#3#;##b,##[##/# *##(n$#" !#!  "#" "#"*ـӀ΀ˀȀŁ***؀րӀˁȀŀ€***񼲮ۀց΁ˀŁ**ȼ ـրӀ΀ˁŀ€**µ ـրӀр΀ˁ‚®***ֿ ۀـӁр΁ȀŁ€**** ۀفӀр΀ˀȀŀ€**** ݁فӀр΀ˁȁ****݁ـրӀр˂Ȁŀƒ ***;݀ـրс΀ˀȂŀ8**;ۀـրӀр˂ȀŁ‚8**;ۀـӁр΁ˀȀŁ‚8* **¹ہրӀс΀˂ł** **ѿ݀ـցс΁ˁȁŀƒ Ѯ** **ȼ݀ـւӀр΂ˀȀł‚** 8֥فրӂ΃ˁń€ ƫ6 *݁ـրӁт΀ˀȂł ***/݁ـւӀс΀˂Ȃŀ /***݁قӂр΂ˁ*ہفӁс΃ˁ ށ܀؁ـւӁ΀҈q ׁ؁Ձӂ΀ qځ؁ӂх*րՃрȈ* *Ҍ ш**΋ºy*****303*******303****ۋy* *ڇ ш**ց؂ցȈ*ـځ؁ւх؁Ձӂс q ߀ۀفւ҈q݀ۀقӁт΀ˁ *݀ۀـւӀс΀ˁȀ ***/فցӁр΁ˀȁ/***݁ۀفրӀр΀˂ȃ*8֥݀ہفցр΁ˁȁŅ ƫ6 **ȼہـրӁс΀˂Ȁłƒ ½ɼ****ѿۂրӁсˀȃł‚Ѯ****¹݀ۀفӁр΁ˀȁŀ„***;݁ۀـրӀр΁ˀȀł 8**; ݀ـցтˁȁŁ‚8**; ݀ـրр΂ˁȀŁ€8*** ݀ہրӀр΁ȁŁ€****߀݀ۀـӁр΀ˀȁ ****݀ۀـӁ΁ˀȁ****ֿ ہրр΀ˀȀŁ€***µ ۀրӀрˁȀŀ€®**ȼ ۀցӀ΀ˁȀŀ**񼲮ہցр΀ˁ***؀րӀрˀȁ***ـրӀˀȁŀ€*"#" "#"  !#! "#ԇ#ȇ####"* !##҇#΀ȇ####! ** ###͇#΀ȇ#### * "#"  #  "#"  #  "#X+m##_##L##ܬ,#[H##S#(H##'>#05##sv&##L3##,8##p(H##'>#05##sv! L38 $*@LPUSPLSiifrӬiȀہȀŁS [S[ )-*(())(*.5318JS\iv_Ѐz;>zbƌ>zbƈ "#Z$'\0#,c##r2#(SjL##JW(##BF(##Fa%##FW$#WB#8p#/v*#(zo'#Lo#Fa%##FW$#WB#8p+vzo  # 8PHFBH[_iWSXmO01[/,Jz*;(oF*1jo1,H0W_5%iv|z(F+#8U0'#'OU1*0b_5%iv|z(F*8U) OU/H\_\b_abr|zvmmpشЀހЀހ  #^%(*@;>\PЂ/,[1P|8B|,/FoذO[0[Ђ3\OiJ|HXoذO[0[Ђ3\OiJ|H!#%#$#$$#%#$#$%#%#%#%%#$$#%#$# $%##!"#" "#"  #   #  !#!!#!"#" "#%%$#"  "#%*+%#$&&$#"  "#(+$#%+'###"  #(?&#%-(###   #%3-$#$*1&###    #(B'#'<*###    #$/-$#'1-%##0f#$zH#$bY#HF#    # &F*(10%##,|###x#   # $+<7&##1O##HCAԀ#I9CL##GY1n0#  "# $/}v)$##]$#%##=##7#&##*##K#|#"  "#'€*$##2s######$#-#"  "#&=1%#ȟ##+ǀ##ҁ####Ӂ#%Ǎ#" "#$0oi.$#΀## t,#####ۄ/##$#-#"!#$)46)#&#%###&##;##3#'##$kpV##K##!!# %)23'#Á#R7##UB@Ӏ#j<8n##TY1r.#!  # '->*30&#2=#(#$#$%#d#   #$(2'$&-$#28#(?##'a#%ya$#U9#  "#%,B($#$+I(#" "#'($#$-1'#"!#'08'$#%1+#!  #$'++&#'0*#%de%#   "#$#&**&#&ƃ&#" !# }><}#! # ,##,#  "#$x#0)###7##=#,##d(##d##)# )##)#" !##Q#i#)VZ#)i#&xp)##Sjp###%Ȃ# R**\#! #A#/#8#8>#Q#%8#%*#p###0#_h#  "#:+##go#gch#w##gh#b##M###[]#t#"  ##5x_##D$##81#t##8#0##M#*&1# mBBD#  "#2&####с##-@#&##mv#Ho7$# 3##3#"  # d##$X6#$*#~$#(Ӏ#4#y?f# &##&ĉ#  "#:##0#0=#sy0#/##'$#(s# 1##2#"  #Հ#Zx#$#Zwk#(#A[y#)$#~n###Cn# 1-#ACb#  !#v#x\#Rc#x$S##靄%#*#+E#S#*ڃ$#! "#*#)#:,#3#;##b,##[##/# *##(n$#" !#!  "#" "#"*ـӀ΀ˀȀŁ***؀րӀˁȀŀ€***񼲮ۀց΁ˀŁ**ȼ ـրӀ΀ˁŀ€**µ ـրӀр΀ˁ‚®***ֿ ۀـӁр΁ȀŁ€**** ۀفӀр΀ˀȀŀ€**** ݁فӀр΀ˁȁ****݁ـրӀр˂Ȁŀƒ ***;݀ـրс΀ˀȂŀ8**;ۀـրӀр˂ȀŁ‚8**;ۀـӁр΁ˀȀŁ‚8* **¹ہրӀс΀˂ł** **ѿ݀ـցс΁ˁȁŀƒ Ѯ** **ȼ݀ـւӀр΂ˀȀł‚** 8֥فրӂ΃ˁń€ ƫ6 *݁ـրӁт΀ˀȂł ***/݁ـւӀс΀˂Ȃŀ /***݁قӂр΂ˁ*ہفӁс΃ˁ ށ܀؁ـւӁ΀҈q ׁ؁Ձӂ΀ qځ؁ӂх*րՃрȈ* *Ҍ ш**΋ºy*****303*******303****ۋy* *ڇ ш**ց؂ցȈ*ـځ؁ւх؁Ձӂс q ߀ۀفւ҈q݀ۀقӁт΀ˁ *݀ۀـւӀс΀ˁȀ ***/فցӁр΁ˀȁ/***݁ۀفրӀр΀˂ȃ*8֥݀ہفցр΁ˁȁŅ ƫ6 **ȼہـրӁс΀˂Ȁłƒ ½ɼ****ѿۂրӁсˀȃł‚Ѯ****¹݀ۀفӁр΁ˀȁŀ„***;݁ۀـրӀр΁ˀȀł 8**; ݀ـցтˁȁŁ‚8**; ݀ـրр΂ˁȀŁ€8*** ݀ہրӀр΁ȁŁ€****߀݀ۀـӁр΀ˀȁ ****݀ۀـӁ΁ˀȁ****ֿ ہրр΀ˀȀŁ€***µ ۀրӀрˁȀŀ€®**ȼ ۀցӀ΀ˁȀŀ**񼲮ہցр΀ˁ***؀րӀрˀȁ***ـրӀˀȁŀ€*"#" "#"  !#! "#ԇ#ȇ####"* !##҇#΀ȇ####! ** ###͇#΀ȇ#### * "#"  #  "#"  #  "#X+m##_##L##ܬ,#[H##S#(H##'>#05##sv&##L3##,8##p(H##'>#05##sv! L38 $*@LPUSPLSiifrӬiȀہȀŁS [S[ )-*(())(*.5318JS\iv_Ѐz;>zbƌ>zbƈ "#Z$'\0#,c##r2#(SjL##JW(##BF(##Fa%##FW$#WB#8p#/v*#(zo'#Lo#Fa%##FW$#WB#8p+vzo  # 8PHFBH[_iWSXmO01[/,Jz*;(oF*1jo1,H0W_5%iv|z(F+#8U0'#'OU1*0b_5%iv|z(F*8U) OU/H\_\b_abr|zvmmpشЀހЀހ  #^%(*@;>\PЂ/,[1P|8B|,/FoذO[0[Ђ3\OiJ|HXoذO[0[Ђ3\OiJ|H!#%#$#$$#%#$#$%#%#%#%%#$$#%#$# $%##!"#" "#"  #   #  !#!!#!"#" "#%%$#"  "#%*+%#$&&$#"  "#(+$#%+'###"  #(?&#%-(###   #%3-$#$*1&###    #(B'#'<*###    #$/-$#'1-%##0f#$zH#$bY#HF#    # &F*(10%##,|###x#   # $+<7&##1O##HCAԀ#I9CL##GY1n0#  "# $/}v)$##]$#%##=##7#&##*##K#|#"  "#'€*$##2s######$#-#"  "#&=1%#ȟ##+ǀ##ҁ####Ӂ#%Ǎ#" "#$0oi.$#΀## t,#####ۄ/##$#-#"!#$)46)#&#%###&##;##3#'##$kpV##K##!!# %)23'#Á#R7##UB@Ӏ#j<8n##TY1r.#!  # '->*30&#2=#(#$#$%#d#   #$(2'$&-$#28#(?##'a#%ya$#U9#  "#%,B($#$+I(#" "#'($#$-1'#"!#'08'$#%1+#!  #$'++&#'0*#%de%#   "#$#&**&#&ƃ&#" !# }><}#! # ,##,#  "#$x#0)###7##=#,##d(##d##)# )##)#" !##Q#i#)VZ#)i#&xp)##Sjp###%Ȃ# R**\#! #A#/#8#8>#Q#%8#%*#p###0#_h#  "#:+##go#gch#w##gh#b##M###[]#t#"  ##5x_##D$##81#t##8#0##M#*&1# mBBD#  "#2&####с##-@#&##mv#Ho7$# 3##3#"  # d##$X6#$*#~$#(Ӏ#4#y?f# &##&ĉ#  "#:##0#0=#sy0#/##'$#(s# 1##2#"  #Հ#Zx#$#Zwk#(#A[y#)$#~n###Cn# 1-#ACb#  !#v#x\#Rc#x$S##靄%#*#+E#S#*ڃ$#! "#*#)#:,#3#;##b,##[##/# *##(n$#" !#!  "#" "#"*ـӀ΀ˀȀŁ***؀րӀˁȀŀ€***񼲮ۀց΁ˀŁ**ȼ ـրӀ΀ˁŀ€**µ ـրӀр΀ˁ‚®***ֿ ۀـӁр΁ȀŁ€**** ۀفӀр΀ˀȀŀ€**** ݁فӀр΀ˁȁ****݁ـրӀр˂Ȁŀƒ ***;݀ـրс΀ˀȂŀ8**;ۀـրӀр˂ȀŁ‚8**;ۀـӁр΁ˀȀŁ‚8* **¹ہրӀс΀˂ł** **ѿ݀ـցс΁ˁȁŀƒ Ѯ** **ȼ݀ـւӀр΂ˀȀł‚** 8֥فրӂ΃ˁń€ ƫ6 *݁ـրӁт΀ˀȂł ***/݁ـւӀс΀˂Ȃŀ /***݁قӂр΂ˁ*ہفӁс΃ˁ ށ܀؁ـւӁ΀҈q ׁ؁Ձӂ΀ qځ؁ӂх*րՃрȈ* *Ҍ ш**΋ºy*****303****t8mk@ %(**************(%  $*3Ibu}}ubI3*$  +@Zq~̺~qZ@+ -Db}Ȳ}bD- %@^}Ϲ}^@%  (FlεlF(  (GoڿoG( &GooG& @kl@  !LۻP%  #KʔZ,'K{̚b4  4SzСoE% "CgִY- #HsǙ`/ #Ivϝa/ #IvОa/ #IvОa/ #IvОa/ #IvОa/ #IvОa/ "HvН`-CsϙY% 4gljE &So3 Gxנ_)   Gxנ_)  &So34gljECsϙY%  "HvН`- #IvОa/ #IvОa/ #IvОa/ #IvОa/ #IvОa/ #Ivϝa/ #HsǙ`/ "CgִY- 4SzСoE%'K{̚b4  #KʔZ, !LۻP%  @kl@ &GooG& (GoڿoG(  (FlεlF(  %@^}Ϲ}^@% -Db}Ȳ}bD- +@Zq~̺~qZ@+  $*3Ibu}}ubI3*$  %(**************(% icnV Bxjadeo-0.8.14/contrib/pkg-osx/dmgbg.png000066400000000000000000000051431461252343600177050ustar00rootroot00000000000000PNG  IHDRsRGBbKGDC pHYs  tIME%i2+/ IDATxMh\{fB ՘XDj!]ԍimF.JFčŝкъT -h{֏֒%}0gI.(I3}&+JIgy&A@GgͩS5CE\N^?/`ވJos -;m;gxs=~80|.o׳T*^{?_ Oa̩S244ӌ SX zT*4 err2<30YyVP&&&ra14q֭[ K3U^h4R.Sߟ'Of֭,UXD/{w%tZxm0ω'?gKH;֏;6n>N+YTRղaÆ>}:<z{/)|Vc ~ifP>쳌@<ĉs9+Af{]R?mua`(5q+bϞ=O |>|83pn[/裏w^ƪet"ak<>@@?70J‚U4iǡC/w:t(/A@楗^20z*P7@y f @|M@@T$kVh9r` @dzcǎ[` :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    cYp,*=({hŗP/Fɨ6 pp$;!SѲ;SAx;~FuI‹C3d晡-ץ9J'Nm6֋M~:(zo*iA e^"Y  ui<v*wh2r+:frM*܊ԟ^ԴjbY=Ңݷr2Oh a /r2=x(6 ϣ5qekhFt)9,񡋞&?M)Ԩ; 29fB-5fBRmƸ+Q-gab^Tl2=YONf:*~K|½oJ1X H"J]b9w{J@ZŮEQyڱ0&!qC^yo U)!tlB8Ԉ$n>RێVM3dM5M(:c:׵BEbLAjme0?;e)Z^rY2W'G}>գ*%iKo0` '~:;[?bȌbI~EO703_|cٮ47">wMsU¼i)bQ3`|ʛvkBni%F=u ͙͜wQ>2q(mbqu?DAFU#ZR,Z_D.b5ò`-$&J̅:(yLjz1χԷSh߼7rB`#K@3RTfye0;y'TZ~K횕t{&sg4{[A<Xj,/?ʚ#a1aa3BR "vTJ-ҟG ܃ c̆)iyCjhq˨'Vw[E(*!:T4x&fJ̈́}ݤ]+^-40sj ^yA,F *^ˁ<:0-e]Sn>)|k%51Ya[RJ깗չRG0*Dz! #.@ti7 GMݣf.3_;ъ~o-s{QBvd6x)Oz.);Ϙ kU23"N+/o|g#N˵zﲤ(EyW ("P|&4cOFE*];lrLLzჩ=nh>0Vs(K's;n}Fh3X<,GYtpD7<,7| O.Bn&eRqq_Gc1RS\J3xM^&D潑U:Q(hGS1*n:|8 j:7#,΄H(*nܓeDH#kͨ,+dF~;6łYkGS0x<o2Fqj~4F׆G4ܷDo 鶸@O^~z#y<׆GCވD[t_j(5:Pm~4F;T5 aꎧ)@"i>lme4Le7M' me4N__oDo"7YM#DLZQkTxR⛄&kC 9>&mIx]chL\|MyBA_8S)VwS5zqs^t NZ9C:<Va.S4Ӿ}]oI_ L^B@2oΞrC#)2S@`UkWi9dCIx-@"n"MVbWQ栜E`:˥*܌=^h> SIjL+t GH?jH.RniA U!7`S"&иUӶקq /.rlƦ5v$e3~QAiJ -3{A-ګ|VS3<'BjivO 0.4?p*zj (0Q㸰+n%.V ֽF뒰\X$[-Pl9{-+` 1ݯAG}f}Eq!E,1L:!tδJ .#)#Gk^Z[]J$;F^L,CָWR@i7#-zȉA<:TJC zIdRJz<;}en1C#9cwx3% }3y*`v8;FnʆYo-i [ _n+7՚uO ~m ܔ"C>g҅{jCLY0vutT!P_cS6ߔ+YEht;0|*Ժ$Ѵk_Y8UGLөϻ@,V7}C(`翂V%,`X2Bhn AFMU^缣 +#/Em ̌'z69S(nAoX2(Q2SVܶu?1_QJ]]O1ۄdՁ6bѺYΧF9J^=@Zɽ~"Ql7,`X2rN~߾}~߾}j߾}~߾}~_}~߾}~??(;ezG&<} fsep)>5Z + ՗نK>`@jt GөډFlP>>͞VD3{]IunCZ7f*s2;m-}~[Wț8jxO7 FxGF">.XQ<:~Fn H@lR. #>O 4৒T=Q[1| ƷA&gDS2QT_͆AYUrzT$[Kpuqnm+D= 0k94['?}q>"?}`X2 e,`X2 e0>`X2 e,`X2 e1 ^??Q߾}~߾}`Po˞+l?7xcnZfZwclm$xԿLw{ P!|gV`;!Q~wKYd݈}l< -@ xn=fX8*7?I{GjN=Xqvݽ'FZ_q0A .QfI Ω{0n[Hf7!:J~Ie+O>P?VMvBPb=ҁni5J|Ŷ&!J NnL+ дulUD6+Kѻ~oTp&W^InrIQ+ֶؒң̀55m]Z*nc,q^ @Rhg9ͱll6??df"L=utK7JLToBҊ23z9~tl.EŚhì(< iQ_nGh`6`=%Β+b>v;mHSz= [E"gӨV{ajAe_BmU~GOh pOέ~0)3'LaTvao>'֭ 0܇CnWvn5D'*X;+>M %weRPvC~ZlqJp}V1Jc1<6xy˿k%Zd"cޅCDa)Fc#y d]w0X4=RbfH%sMHd݁/;zӤHy==2+@~|ĜJx;3F-6h.@(xVV 1X#.r=)c~B*mGrc,vƊ4w̙2Q \]!N Vݒ趝onj?B]ڮ+trfApVPۉȐziVV7i'{D807U\.Ճ*jIRץmJu b}[F5԰"&@}`ٝx]vc?pBƜ <1,wbmj)t_9`O7W4z+b츂b$yz|֨h"ч +9S晤"P>a4XKO}$tEG|/%5"皢]UPvCЬ+'#(Y14տA.TȫҺ7}nbəJg5T!; A62UJF#Vn8|klbo(vAZ/ zݘ%h1}HQLN2o J/M{VZzVjD*_jjk `CނYin~2]G(5FlU}':!u=?csW9tDxFR$I(UxKB~i&6ۙ (8m{K @[?ζ(&OL3kK^ط2üi4@|<Ʀ_7Hv?׀ncϵ6>6h6Յ*;FQYLgC9}5,Aw׮ߍfjљ e$e/4qc"xc$MP-L}TFd>B<_V;ԩ~꨿hA-ц=q脇 LPeRD W>oS3Y_> 냎 P%;U6ȶQ-_"(woҔj>  RG91N g 'hufY (HuajfUjt:8J}0<^ď 4/>q@~s5ME|y5L32jQ|5Oe(9DC0AW3T.{(ȼj?ʲz&l:y| DUZ#UY:u¤E1ѱEu:zW몷գ"?TӢ&LFrdL㚧eː ;k70o)L!O&守02<_ < *;K +[~>@NSM嫃/%>/`RoUQ鬳R^p1?BO }k1[?1PF0Ht& 'J:!=ObCEGOqmH0f~*yvlϟ7`mHLi#V+9cH~&d.) iTJ'uu (,"^a{{d1Oז'9ru;d?UN^e 6re)jH0`.1qb-ÂQ'Gʈ0n ژY([;gYP6/+,wNI* ʯ(P7@4's@‘&ౢ_k_=\"Cee"MDE8X5u% ~h<h~|7hg;旅m0aI$,җ82 B~`d{0B[fspBnoEm<L1{CIcm^ո!f߆~ x~jk&V3&J.9rsf74]()aI0|ՠx9osIհԃGb6ON$-afu`1 mđ,`3JzXiv-f?^u4=t>Gg=|Po9XLe`h`-;,#q:'_0.~I{¿vRĄB6ʥ}H1f[wv/oS /y6Bq2cjr!&z9;&F;pSJRQ+~8P% 9 {NP(?))^^(7{U7HZ#J7nX> gGdJg0nRޛO`!@h)'xmZ0K>CVϑɣ :3 )z*ţ@`jgbH-= ؎ڟ>^c~-|}EeO|i*hrb5 Y#~H?ʿiHsÓ)r= 'Bݫb Px#t,LZ$e_HwemH !Eδ+=+SOܸґ:7@g.G`` CY ^0DٞSIŖk]EeCNaD -E07SI_J=}7cS@,_A'd+P&M4)=aç\'z;h]*)tLC%yѶ2X _1xR<2E=a._7/ŔM"wjR[#dtEQ$mа%1x/6(8d+ F)& ]җsH:HzyL$-,KT;]iVD$Jϙey,ѡ@jOLbTq de?=*i31ݍ5[S,$ռ zHXE-01QtO+;Bzkf68OI:STKPp 6g -6+ ͞V]Q%O?nɅVu7kT\-@}}NU 7̨,EH裠^o׫6Ձ-b,[mK_!̊ ݄D) vSY^[ǩOC~)Fd3,MŸ^\Ubk(G-@Q7:<f`q!v#K^lىL}̘>j7kk\ka1隔kIK]Ȭ=[Q½uVCndt[ݸBƒ 8Jm/ps)ɰ)dfѪ7ȀYPZ7_DjZ-iZppb Jғ4G"eMdT}WψAG hUǣԗK* K+Gk׿Pr*Er;cY+%x%>dZPھ:('RL[^kBi+$g/-'@55.E}*}Bq-p|= @\H{n(`%ZJpAq] 'koyG(e5Ti7mֱ``aW6/PuA+y[7y]/r~mO_83!ثbF0 -ߛT+GBl?LGh@&F=Pk;4UovO2մ)선+б\sA;<ſ;<^Id75>dͱϱi;D2'86Mw-ڪ*ۅVFS$q]\|,%!/~[,=tO@R;T/T JHoY Z%w's;MR} %o.|TB!l=#z=tę6 x>|f  oYtK˲T;蠈Q[u&ݐsVP{wΪG=_xήU5yuyƭ0fMK3d͹ҺaNȪb/n !hF!3o%ILa,1|wi=ɳ- ض]\SXf5+:JރbcX+o .DYLYךtY؄d; Цұupە\Q",+[yc)VG9=yMԛ^sQ԰p) & Ki%6ډrl^^͟z,^愊W|:"FJiQ :?i2|hQEd9qKB~Yn$ޤLVWjAUi݉9z ?y{/$Cd23e84mhnY:yy-$S Ρ.PMl?54MĵsĎ9UVASnHbGN=[c8Uo[6!h !.(]t *.=Yq*U7sufuwpN1vN +%Fe]A96R.nmh| %G65jZm`kT4FtCe=I5g30pecG>؛~:# PSצ7w|@wwW55MgZ㝐(Z!䘫i1sent\[H{"vwE5JkMQT];υJ2Kb7bAϤs)CvF_z(_J+^?`eONӭ XG+P (s㳵4qn61҆;iR֘KچEt.&l!*m_jcs'D;Hg^(C$l~KGeyieֽ`7ڋAȐ@{^h ?%6 {~Y4Z~AMTO2onXȳ\xJW3dSӘ<(z!MXD58X.:ĞAkasmw- 2~CTfX*f:.C2ڰ(709]kJ53 z- wĎ zVUַ;i?ImynQ XOR iP>AHP0[KS2,&c r>Y1%Tr{@iqlR؁$3ђe 1~]!8pooRwۍl E6hW @ kYGU6Z)i,y:KT`FH?7|mjrF;0L)dHJQ,| yzF#|,|e&+뭶,o}rZyWWvH 6 oӉnd*s>:OVj\:eޭ]ɵ ˈXEr=n[/ <#"xl8Z-T[HQY. Nfwգ; %FOծ#ټ2\SǮXۊe$AٹPqNeR;[%&8>B<17C`@D>3\ I3sƇe~TL ʭvů)y1 \1-R!p poc/ɺ |L7cg9hF4! DMd((Բgd3"s18^)eCSʣz9Qt(KWzkDB3걕 ~ЌۅVKy-F4Hl5Ěn?&p#k"-& br NѧJ؁0IތXu\| nɳcܜ2A0aO£{תv +A6ݻsf义jٯi 5SnB wAx1kd/ ZrƎK`Okq46J_)o vG6>,Sd-O$X]dBz!6C/KCφlѨF\US[q v/*M VI+u¸+ # TZC2  FAQS+mkCL`^1zύg灛;A͊ Fjch}#`/ݿe$ө0@0P-aDW`xHKmw26ܘsR΁TARV -RM@ߨݑ/r wyDDrY}E9; Ew@!%(Uo2+:o=2z=s}D:HcO<%@hzVɏu^ā8Kt%\h`[EJCR/(`_jooBv!'`=1#DW`xHKmw2w+kYgpo6Xà ͬCȿΟrt!\x|m6e`ף(>}, 끋NHLUDbX*M"Z v]= I'اYrT<|->SAб{)E'*sYȌ8yz@ 7I)br̺[j٤Sy%0LIֹe ^<!g ؜YZCå \>P K8R/Y@ws 7Y<5՘N5cfӛ*\f*g-7"NlVT^3ǎMTF!/7hKOvsWx?7DWfJ irMXSI`^o6^WTY< ME`WJi^2`+([9#u(,3TI [iԄfĿ]Ja(:oA,`s7NbK\P%&,;c2'h[y +>]0Qͩщ 1$Ce(vS }l n8">KI̟]wG)פlmϸ(!qvE0E0ۧ[R;2^"U]2'j|J<݌–[<U$-8/>GDWDӀo`M5<"r_32Dݢ Ӱ}t12z/:WQ㹉>Kr iR_Q)XOO q qr;w$RʁO?'H- >!O4;C+&V6q7GBf}鬒-+F'ߣž̾vE~뤌!|k9%8;{Ԫu&9ӥ0q*=2ԣfzc>Q+c mՇ+S(x "d?7bla2 n "s#@ S7_\/zK_ Fw~vWQ$3zD# <8ܛ]?T;_i[BVaG.I1I;;Rn $>^wH)J6]ϯ\o~!{1~^piɧ/% 8R2;~vqS|О)[n Mz{ Wafj"@i..AYxj'6(oݣ biӾ2zCSΧY7zo{#vSvC.ui,<[R4OQ8=~ㆽkzM֮NƂt: F&w0v}RWzգۺF$#) 0-*-XW62Och:} ҫB]V@n46Xuū2at#|L ]#ZNl0G2@nMԑ1n6AA5_akPʴBlwƨ%bp ~Ua ݊kʱ(+4Dn'M#Â|"ܒuٯT=&ݑfC Oq}G6>o ^TzTіdN [+S?VU#C75HkEXQ)Նb Ce|jzInWȾMxy-oP2: Q$p mY`ux7au"Ŵv{ j~~=CNӬatnobRl$6cR%$P| ESrE<'Y|_uHl$BC3hl(<$s c'"ח2$t OiukozzQׅޥᇫ$b!O#o牙gmOŨf_Ci`*>Ld}C艎~?׆+ADhLY;ہ]{&zV$>4`)2|OMgpV31ը OeG?@vCuw@}덷 zGZ_i\\'DL)iU6]m1 ]YZ|6p\#[re_Nd(B PaC9dЄszDlE Z7{ jO$LљufT?- LcL~UEG&%YxuyM 7t_(Hꕌ2YhLgmg $ƀs"FzAhVd .2 W]?h &w"[ßW3~/}:"k%.׆^]qШMR7Hy.+"ߤ P40D& =C&=tg˴8 w5 ?5of n)¥ؖkSs@ `6 znGr}R1|+tAP|HD"-Q7>f9*$~:D dL`߃,E(O=fѴaBc0ɻN[HaT/9CD hkHx.2H| kW5?I?t&`G; [3コX4lGpt Qcy{I]~m|Tp8(qtuD%c 3NcX@Sc o^tfxw'evnqЁ.2o{InC6?IsIFexgt{#; b>]Hnj@Wn &>^sswu} .;ݔty:H6' X@`̰!N+bʻ8ZA|kJW p5\ɉX>!S Md26Ge jo#d[ݭ['״9 s5e+avHmVs3~^ܱX\p9&N;B*> '*i߄;9R 濧"ڸ{QWϘ/ݑ]ې>7Iίf0Vw_PleJMp kNT<2J@ OU@|&=a^ݣTs IϹr|[H,϶`oU^sꖂʑe3Ҷ}H`wH48,aOe / >S^M윅PXiyoyl4_meg -۰X' vs~ ")A +hCZc%i?IQbZkrCo}vUn<'5i8oǒtjzCLm xkoT5vCDB%~Ab$XEW/G;x4jYL;ʼQUwXMLEb?@+^: &.]cި3:Yb T|T>u,Y/KQ[侾g}a?AMb:Q؋ɱtf,F;:=[UXU9Ԡٵ>Պnm(HJ24μ Q[ݵȥw[:Dhߎ ˁV 7dLYjΣw.$x$M!oY2#ڶ㊆U?{mP{(Aʲex(Z4; )˩:}!|A>/K~¶/K*&/[t=bZּW)咨3Χ체򌤍6З<|u"/ |_,([+OG6T1 Y6R*p07T|QsUcyKz!0T.pFVЉFUB7̛+70*;P-Jya>`5kLd1X~:6.0(p\D :Ho(5kⱮ\cDHNԨd-/45Y}g}"**(,OOhQo >+[93_7Ձ*O?N'*C:^㫅Xڟ~x-hZ#bLnu5-Sg$j]zz[?9F-(S>̨< j_*dԷO>q#_y%Yk}r0m\bT+ܿlc3 *~5_uG2w_$Uqs  r $cy'BN'ۤо)x nv sd*oc#&,<͖:-VAff G ^^Rkm\a,ƫv+(J(0J]kVwm*$HTJr؇|Rax*J?uG8 *݀Dѱؤ&LW,; .@4s0);#%2Mn7=߽ e >Jęf[汻߹~G1* dEHc7 + 7ve'4hg2 3GШ:<7i53(J(ZaL㑘nNa ̞Ibwd( P`@49wuEz.pcY"xe0%#7Z$D'$d",8+k9qhʂ0-;eodNL/AXw|ϗMHOwm'ksm9>"Y.0\t-X2gOIfB[$%Ǜua= 7]a"ЗwW!9\,\L`.*Bѻ'/͗k/N?: hQqB)&IOͤEb+c b<7:Y>wZ ke*0':5T|d%[]:c3F sJ7Žx.W^̙9 S0oT?F+UKcٌ35V|wqЇMQ"S. ')}A@ueO;.J 0UU[~-MM2[N+!0ԫe-)&-(lЍ2"Vc"AL d, ^ 1$~ oJuے`Xl%^xY>KK+u'(Bf8/ )6IOͨ2L: z#LO ϙwPpqu*lr2?-7H[^ %rU n_fHJ=[m3yXXSB|zR%him6irð9I@ Yuu_] p&<0~ |$X|LL&4㮼/i_&8G'^LԽSBb ywfFӼzXF QcwNYe0A)ځmhL6gUlqǫPrτ ^֦E7 i)meBztsknGrph*JvSIs,_zXM 0_%% \tJ;, bk$A!U|M&NM8Il|tw2Yu6#,vK:xcTU]J:@R!+P9vTErZ5 i*ϒuKsxM2LH1`;BW">z7 fwK΅]u E RgN['ZQLݒ܈w|$TK_?)C&j DԀ4^AU'Sk0TX'ȝt!~dM Pz.iN9TEgPt^aY"OqԳY޻xA/4nCoچ<;9c Lةn1{_86͗Wp-q"3UQhKڱk"^C _,c 72T_KX/4ב:ҽa#v_,-"B,kgV>tD.$ j:tC׶Hlރ*"@_.,(+>OuX`H 9iߔ9pH%Ɛ \>EKnV2'jbMoBϡ!aTNPd й`Q֥xnv{ɻ wnVAheha'u/spʌ(ibsX˥Wo*YOc]cMJ@kӔ۔ިS/뫃\8!va>TcrZU-e2j-*Y[!bd(\9i/PiyP[^FװaJW^)a<˨NjzW_O%0Ƅ~NHQdh|7zC 7cloٰj;*~9HWH̩;~R< ώiY9ha eAMC={uHɴ_VΒBW -`︔+:W8MXGhYt&@NDgxThԎBoI6Yud@M/;)eR+{T}€A:F@[[Z&S+MUZpCg7"* Ճ&uf ~LGF0B>DcZF6~8t6r@s=M_Ű)W1F,B%@ `_+BڟY>mz ;I~ 4gR8RVP-LnD*-{Co  Sfr/!Vb4>J^J4=ϓFvȻt4e3QU=;E.hx(^=|O>jKN2!^cguY9A? }o8 JQ,-B ;5*U[Sa5UD"n]rHVM!AB6xrh=eJ0>f 8r̮YۿoPp=":7L"HVƋ@n_OzT''&fͱ/AbݫPg{-VZ ]\?7!ۢsM}Gp7eY/$" pC̟rHY M\: qں&g)ȹItE۵]q8HG/@jLa]$z[ϧdgRz99~Rue0o\d %ެ|0  ,KO4vPI,=ߘZohxsӂd.X3&5^Pa&o_ XJtE!u AF3&@Yւy [_^y<(ft#sBi*Jx)S[Fj-1 ^Z!!pa.) 6"4*éGIu=k'̊Ɲr-V~]?3v1kEmv'DCլTC&<[{J)VkWԦmJtE!980&P Ku,N;Ä+W&1FfKV~mP x3GD|aBJ ?˰Mk:@#^UZ !grc)/sk9x}WstR5a i㯼/u03,ՉȢG3;2HV* џ xib8?KQz`?kyJ&tE!981|A>wsOY>B}/lmwvƞI%?Q7`{G%$M#o-aVJBΕCRXZ3[09C;nM} jNB3oNxAt|F_ե$"*U 5 C1aCJF"E*ٍ)UBw)Qy>aL xN #?Sz1z,h_.'+Ɂ K-I-3 +nV^tN=C8Fp Z>TٔIh!ִ)#`s:i'FC @)[``D"%"WUz¶YgunpV}vq3JV"E*ٍ*X~{~ m/QJ%br8;@; ViF1+#@]DR3 `}L?}=:v\-eDZIp݀ʷt19HPQ%Q^Y޸BzOa~㾆6r6'$L|k /OdT 2at ['}j{ 3'-N^Œ.K'2 /wjz KXۯ+f' ҄Dq%ԹgJf"E!ȢH9fG:bu !A6?Jܜ)}!;)ŚEU_dvRܸh!@(Y /ۨUW'jbA D,4AD.gu%sWu6C[9S5\2ƏTPhq;a&FkB΃_$WJS?dA y&!ucbdԅnd8wkUϝu(W6^&<6OnJI"$ZSq<^Hsbd!4T&(/ɠqڏx覡(3Ca$V#ث,'v'(Co(KyYhk{!Ĉ4)f{WQj AK$V@[[[Z&S"X3{Gkגpx^碕NTx+!lzE`c-?~H;r)QM[ EəVG*"xY\+2 P>+=@ l_㍜P4o3"@s^lu\sY=aɵ[B`t¥-ζL~i[*E[ y!E>r$Mx4 ivS 2q4Mao dSO *6 ^PLEvIKx4yV'o٪Glat W.fKFі` *\Sncj&oLq@_*<.N~ډ?Y[Ƶ{t<~]^~YE^z#kF-_4MG!:J(Iz^qs DVҢO9Ky ˵rSgq;{;[^b LPr &-F"k{̩wʣM5ZGBDxOb7fOd:\:=TRp{HUԤko[:1U`ouόVƤX (xkV-_;Z3RSK #ZZ}UVTSU;`ʕ֗6Ʃ >uPE)Դos'&=?m &BB05ضRG)muEY {%9q喍#3Kf(TL䐴r %UJZƷ6Jakf-_ 9=9 e V(Q-rg.Eo;a0D%YHVy]aVy'SYox=-G|?mЈgQ1Vf@v,v#[=ZvJaM!)d6@|qґdav@~$mV^%@1k2Ebɺ?enY1PE4u"}:acHbykJWV iRJxF RsacP$0@ʖJ\χ_ǣ괬;(?Ԁ%y`R6Pe4߂()k2EҵpZ+N FܽP~V]c_T=&T(oPlt%vO+#(M`C^x+cI#ӑLy[cj]l#+5= EsqjXKtfXd 7; <Zލsh.P>E3䢓}4Y N3HX2LEWĽɡϠ#SNjɯs+(vUBrRalD95k n Q4r0qk2E%Mv|Ǧ95$7GYi^ME2e&엧D!T̗M mG5lBW@vo9E0)i4" aBSIK1F2~{N3Wu6C[9S5\2Əy!]4l%o!q?r]x\f-*9ˤ0m \hD02fPoуG-[5g`lr嶗RdܞTRIo 8k2E%Mv|Ǧ3?i:F+˸jFK_sOPӾ?Nʆ?B[e$M#o-aNw*|k5h4ˠ l@y̜SIjSD{>8dXهN$+./<$xȵ]wsw_JѴUmpN4nI Ü5uj_p[Z;%EC+٫@IEh>Aldv@[[[[[Z&S" 813t M)I^>I<M..vBڼ>@ TvQx_sh3{òJzCcX0ś'=}S^RE%}OMɣF @v\wQ/L`lc .VZlx*KAWHkfmzY)$;uZqʄ5>%ijY4Bl:3˹-ee.[|E?Oh#%R䁔̚8[ȧNnĦP?[% vrAt6" \zRǞ`>3RBJRYAI=)1Y,;lOy}e yK%DQXP>iVb6r'!ë3+Wn/Z~h; e=_X+k;f#&bk\e?r馡 9>XnLY1^= Ȼ횳!{5_'=WAQK o40m2,@/&B |v䙏 HD%iasTLje.’x## c*x y0`zƝPoҨ%)}G4g!?+sϬA8i_P7_>9`THuQHB{(M R.|5_!E_,Z`fmѲ4XhAsd5ǧ獍#wZ?3¦/amndyKIB;YrdHRCyOPu9(A&4I fU P/nfr EIr_P˅,P5]A[,cD'qZ#iMH;oj I /=8n/KV|&:E!h\7?UГTo5Z$@3r0_Qt8TD3_}2H:dFhtA4'j:-< ٨J)x80ePqȚ'g̎ ~p,{LCVIN͚~ ɕtLөE;|6:E!hm UF.K弓08&|ж8xQ 00d!W㏴Kޤ'yehEkX)v@;( :x[>. ܮhV~ 6zӲwBߪoKzm#pL [|Yh%T zIŗ .+UA擊 : g驀VA(v $-tsO/`Ffb/$|F:E%1AH+} ^7^%^0FnⷭUY=  51=](㠓GCS_*3Hc]L]QfKY/]Xbjo.2vK[71+D:Yve??>ӛgxUPy& z6vJZFޞalcv ³Zrs+=ĻRi=fg) ?uiZ|kA1ٸust3,IA}P -) :zFάٔ?ǕCl8NbP\Pw)s+c'gzLeR/LgR1yPAKRatc WS=hMdڌTOB3ӮA})6g! kUtB1h/R$┋g7NM\O`諴0;n%BGIf WÚqv5_nY ua< Tm`,m!Jإ U.]_"KVtzjI\Tql_G%~xA#ZHv,ŭ,AH,~Nr|+f$ʒ)N^7\_s8+fg@5_gD:/V0'Y+8\TdY~W'/0gie-k,)y劮1:6쫬9 1 o0M5WH>;:EAsvl1 c-+k= 1?$}&Q \oKxƭlhj?}EH%|CmE ]:7&Y`x)YӣˣB8PsfGxA.k}@FP:Eh~kݝiX7MbkоFX3£Q6NV-1畣ϺpR'iYS~I1&*rl$`03PTWZ373apt$t5p:Eߔ9"F%1$D7O_ w<;bnE|1aܭI#"RLCOzPG7m_ͲX>d> q\oϚ$ņ*:E/PiKYnZۿ6B{YZ,t݌ڮ!BpW".-L\7KC,=`xBjJcMzbu|g /@ɏiE^ 'z>Yv80ijВb<.x}/;씚vvE*k#-.r֟Fk}9S#*SP}͠+80; 0?$NWz܀ AP -) sc rBd\Ou@7 ~)'YQl*qh 6*k͞Y y  DI8:\ О iC}sU˳O7,LLp/Rۥ`ZA~@(ݗ4VxkFVmiloI3\J_Ryc`<5oWXnSAp㛹;ZjTZ~AV>PEx蔍T'\lKQz7=;̥Zgk)= V@Xg4>yb)4@\ !)DeJ x?w5_ܜxZBbqT89ot?c^m 0E1bkd%5t0uXHXbڑ67mp^ C$mD'ijrqQ+`ZdsP'JqlZa!/ea^$G'5 E ^6諂(ZfozWH֞L&5_>Cgs,֌OIA\z1UOFe,g]N +N, Q-ޛʛͮ82v}$9⼿S=`iGNe*]N*2Y/t; ZLp;0mbxI7Qܷ$zk:D؀@ꅕx೏U/Җa, gP`Ĉ>xq;BYʛ`lip^׀I0+onr[sUٳ;ЁF5_!6nԈׁQCp&pb>vT5/{x2葉$m-Cy?'\ArpԼBM ʮ=TH}[g ¢i˃r˦$nݱۮ]KvxNS/h}|xWԌigpn#:jZwv9rW/QRc7Ω@=d:"޺9Ouv:E"!3Y6DafG̶5T5#GAPYL ֈ5K؈P穚8OS>֖34"IjBZ<4%}8tܫE_5cLH<ߩ7=-CK@A)!]x˓*h\ :E"!`t%YA:_C[an%W85;ulKEM#\䥰?CfQge ]7 F^#PEYHHIbe{eY+#΂(hH́"sė\=-0AVOIk R:E"!`t%BV;*̚ef AT?"Nfqa}Cͮ^Or[;bTAk8G)"7B WHX.[I&K1Sth![I0ږJ(YP`EZp\qT#A`Lܛ!&XvDp=qy.}xִKnF4hƈԟH]Xhڔ:'0/ $-옽kE]̊O)o?UodP 3,d ޏêQV_oʶB6̈&9a,Yp#n)N3\ȡ?8Lڜ7$μA7 ب@Aig/Tb{wD};㳪0S[ky^Ks/s^E@(8-=4P bQP]bYPEޖ5fqK&#%` 5ELŐu5(M@9QɍS!Er,Z XA ?ֽyIT0Uq ƙmVp Sɛ97Hfޫ4@?TC@/v*&';)58UٝVIuagEkGn'>Eς"oTmwTLBQ }qj(a Z^@9)b^FFKm0 ;JA񷤷&Ui@ђ3tc<5q|_C`Y$۪!SmhK)#.aliPNA!6uurA5_d#"tw./T5 ,nipR#][մa RTk dQa}˿Db&VҤ2Y5nHg"B Rm Q ǚ??<gx Cr\l=(d"wCy&wKL'Qϊ|X$UbFL-@+{7djp fl ,Blr|g/S3m]$mځS5_dTQL6jFAX: 2QC'Hʳ%NW_!TV+xc1~&6/ng8W-jH`2ͭKerEPͱw@j%OSz~?gt(.CEy5*}bjsA\CĮ?yQʢ<6^|j qp*Bk Lw&9_`4>n@,'>Bq34'FQi`]H@gA`1a ^pU^azIQG`|_ZD*5_d!q6RaxNDD45]4!+%7 TV:fg.ei^Q^Ùglvj`2}"不M4(W /lAd3K|XhG:إ:(8ݭh6 .Ğ5e`?ݝ=<|>M@#o |RtwoJ)ԮyhdPK2?\rism8)!Q=omBEs!'7 H5_d!qHP嚯fϼGF')ԣ,ɟd|%TFUBbKh9ŹQj#e#OAA$ˊUR` 4'a)$V[ iׇ?_0&7<"Ĕ$dypZ6 4Vo`;Gfc`Z籿'5xPÜaX;7M;%mF|䴣}o5_ԪգAΎ6+kR!}jYRWLZuw8o#Lk=k£ ul ~Ww^VP."B;OGB%ܯ &5_GȪs8wUFSwm3avIIQX_غM-܃C_-Cdр]x sNzLJX+_i!:c3tvm%m*#=Y4*L\N -#RrA&:EnXь$Cҏ`mҿIe[: H`#9(BM8_ $dnM-mV #_B9N,KN_uˑگӤ<޳>PR%?lQ)9 @ʈVxI$RsgI8WV P_~6:Eޖ5mML xG=a4!kIWe!HR):f:EԖi[7~PBuۨR#.G^x [>RGYvLJ1uŨFfN\+@i~1͡! צˋXs5cyQNdJY_ё]Tk-M(fw :BBW*V64=)ؤ o3DDq̱OWz^I8{ S%| ΝR"@Ykӊ.; 56 sv:E0 4pZẜ'cs#fU^n9 ȮFî)[30:{)faf,Q޾Ѵ8' <\a6]5戗(!e=iW"(UCu&F90m]AE0y [M}p!,3fM7I߁94W28<i A#P -) s"lK&;bnUPqVI (bm\B&!=@,wdl>DSlRUgco!9#s܉ xZ(.DΆWl[К)9wݠxnl3W|qSJHe6DT>Tb&)P=C\ F^Au+ӷב\ì¼H3EF:Otv"EfH7rkYU2(C5-[m㸒 ٬U^cyV-0kU)aT .XG E1U`oPE%9쀤mtPp{>*R;ʁOR{a5+B('%a ];Omٳb!Vɣ\(C|ܰF2"T'#]Am؜{N |HS?eGI?@O|u~=LCd5?95W:9@^GkqpKπV\^όβ 7̢e -ÚKp|eLv¦C$MSǹsǼJ: >X=DXqھ. .23, Dn9pHpB PR.|7JRVUUZ!مlx'.GR$ʴ^K&ZbxN95_nX)9=[0쑭`0g͘]@9tWF}vzk!H N:{X\[5sZ;ASc.ZP nn%_bIT}@V 5_̖C'K3B5="^>ꃰsfґZnoDSYU:;l k]㤮o268K7* r;#fB̃ɶJ<I"T ~p@w)orlGɞ~j1 'h/9~Q#![kRہrh7튯5_"!vlŢG?}j% \ G↹އGd1?n+28Ư :(umԫ43P<>jfL^5 ?fM~=~:+B>Ղ.X7+мB5mT P!<8q]NP#guj#YkFC:EnXÇ5ԺkHeqV0ɖy ܟ]R^mA߄uh8ɑebȿ rާ*WzS0>ے#x3XMbi.P!C+G<8:Er2UU M[ +Ex$",7? @ckɴ} FUґ߳V!W;S&gRT{+dŌ%F$ `$:azlnF,R<ݚ1#)@/r"!7&jt<*t?#f(7{QO:E",K&*(35</cWKE5mY&WRf7vvyWzO)dz}]Ӹ <}w7~4˥{I8 >4CH/:U;x J\Cqŕ:9QN C=#C/BN#;A vr1;Xח1NuY#ipِgE9>!H z՞ڪw(Z^`Y!\^›C'$u<mLXyTL*Q)]G0-?Y5AP -) tzε"upE+@h,i8Mi%"60d'nx~?+rouW-P`pZ ʤRpClwtKSQBᖽ/X9븾+V&ND%M`ξ'(IYSRlI%2{nX* `b]<g8Ue7ښc.Aop+0sӚʩGdM>D 9P Qؚ3@nz:vB Av>PEBDSnR/ \{o8eڿXn(5-K i({TnUًޑdmD:79n~0BC`S69%&4{B+7ЈNaxO<; q&Gջr 4 ۜuMiB L:;RltJ5v͖<3OFhj؎QF7ac&tYXˤK(id$d?싦w^͛\kzq?|@65_\%ntQ4omhBmPU]:ϭfɄ$>/|@3\fG[n~)Qo&.3Aᰠfv0;&7 A*`1,(KF5_!6US =G-;'qy2%NE) A3s; {Dvb 'PewgvRi=ȗBeV(ݼ4i;yy{UkΡ>}>?ܱT9fvJG>͗wWb~9m4J-A'V5_!ݛj04k#&&[ K=W{!کc읈+BC~JytW{Z&MTᩋ?txU\ioc a>S+god^$'^IoJJ (U cN*\8?q?qk4cоLB鷈 eI R<0?˸ef5_eͳ}jհT^A#FEvdĶ wEr{=_I<`FNM7”)=mIm!s9J^A4*ų^A  Jitn禗&$oo2 UKŒ'& F|>؋-/<\60!Jc BwଣOy;D(6i}mEz mJ%9F;9?u0er 9φ:Eols#@~`od/76pp ^6  LfԾiHwڬ.(!7b6E|W|iTR(QtÆ6`$5]k?vϖ:E-PXeQćMA>'u`E,T˒DpH&80Q'ۜ`<`W*庉O]jMtɗg2xCPMYLjN[c-0!ٵ$cfN>s 뿷;|E%9Ϧ:E-PXeQOlyf2ft'}x0\_lSSyOr'p &;MWs-wh2q&5ty(>@fG+;%NNa<5}.68{ t3+hE ϶:E-PMugGǥ[Tc,!C)\..Yg } i-xQ aǘxr4;Zap=@Oph7W;ow=֣$\7rWVc7RԻqYrE~?l'k5l<\/col>/\/>/g' > pages/xjadeo.html groff -m man -T xhtml -P -l xjremote.1 | sed 's/cellspacing="0" cellpadding="0"//g' > pages/xjremote.html `which echo` -e "/\n1,.d\n/\n.d\n/\n.d\n/<\\/body>\n.,\$$d\nw\nq" | ed -s pages/xjadeo.html `which echo` -e "/\n1,.d\n/\n.d\n/\n.d\n/<\\/body>\n.,\$$d\nw\nq" | ed -s pages/xjremote.html for file in pages/*; do echo $$file; cat tpl/head tpl/page $$file tpl/epage tpl/foot > html/`basename $$file`; done cat tpl/head tpl/front tpl/foot > html/index.html sed -i 's/@VERSION@/$(VERSION)/g;s/@WINVERSION@/$(WINVERS)/g;s/@DATE@/$(RELDATE)/g' html/download.html rm -f pages/xjadeo.html pages/xjremote.html clean: -rm -fr xjadeo.1 xjremote.1 html/ ../src/xjadeo/xjremote: $(MAKE) -C ../src/xjadeo/ ../src/xjadeo/xjadeo: $(MAKE) -C ../src/xjadeo/ xjadeo.1: ../src/xjadeo/xjadeo help2man -N -n 'X Jack Video Monitor' -o xjadeo.1 ../src/xjadeo/xjadeo sed -i 's/^\.SS "/.SH "/;s/^Video Codecs and Formats:/.SH "Video Codecs and Formats:"/;s/^Configuration Files:/.SH "Configuration Files:"/;s/^User Interaction:/.SH "User Interaction:"/' xjadeo.1 xjremote.1: ../src/xjadeo/xjremote help2man -N -n 'X Jack Video Monitor Remote Control' -o xjremote.1 ../src/xjadeo/xjremote man: xjadeo.1 xjremote.1 .PHONY: man all dist-clean html xjadeo-0.8.14/doc/README_DOC000066400000000000000000000017661461252343600152100ustar00rootroot00000000000000A large part of the website / documentation is auto-generated. This document gives quick overview, for details check out the Makefile. Man Pages --------- * Are generated using `help2man` * actual text is from `usage()` and `printversion()` in ../src/xjadeo/main.c and ../src/xjadeo/xjremote.c * generated man pages should be commited to git with every release-tag (see also release.sh) Website ------- * Is assembled by simple templates * man-pages are converted to html using `groff(1)` * 'raw' html page bodies are in ./pages/ -> *edit & commit these at will* * fixed page header/footer is in ./tpl (no need to touch) * static content (images, stylesheets,..) is in ./static/ (the static folder is copied as-is) * run `make` (needs man-pages, `cat`, `sed`, `ed`, `bash`) * some pages are semi-autogenerated: - remote-control doc `pages/remote` -> see `./remotedoc.sh` - OSC doc -> see 'sed' line in src/xjadeo/xjosc.c NB. `awk`, `grep` and `date` are needed to extract the version. xjadeo-0.8.14/doc/favicon.ico000066400000000000000000000004761461252343600157610ustar00rootroot00000000000000(( 31DD"!31DD"!31DD"!31DD"!31DD"!31DD"!31DD"!1xjadeo-0.8.14/doc/pages/000077500000000000000000000000001461252343600147305ustar00rootroot00000000000000xjadeo-0.8.14/doc/pages/addons.html000066400000000000000000000061011461252343600170640ustar00rootroot00000000000000

Advanced Features - Artistic Add-ons

Xjadeo's core functionality - to display a given video frame at a certain point in time - is not only useful for post-production but has applications in media-art installations.

There are two major features which are not enabled by default:

time-scale
operations to modify the time-code: multiply (slow-down/speed-up), offset and wrap-around/loop.
Panorama/frame-cropping
allows to display a sub-section of the image.

Time-scaling

Time-scaling adds three additional parameters to modify the displayed frame. They are applied in the following order:

  1. scale - multiply frame-number (default: 1.0)
  2. offset - add integer to frame-number (default: 0)
  3. wraparound - add/subtract (multiples) of movie-length if the current time-stamp is less/above the movie-duration (default: off)

These parameters can be set via the remote-control described in the section «Remote Control Interface» or by as OSC documented in «Open Sound Control Interface».

Cave/Panorama mode

The Panorama mode needs be enabled at compile-time using ./configure --enable-framecrop. When enabled Xjadeo will crop the image width to 50%. The x-offset can be modified with the keyboard, remote control or OSC commands - see the section called «Open Sound Control Interface» and «User Interaction» in the manual.

It is intended to be used with two neighboring movies stitched together:

  A B C D
AB BC CD DA

To pan across boundaries, the files have to be re-loaded (using OSC or remote-control).

Action Override

Using the set override remote-control command, it is possible to disable certain key-bindings or window-events and limit user interaction with the monitor window. The value is a bitwise combination of flags:

BitValueDescription
11ignore 'Esc' keypress / quit
22ignore "window closed by WM" / quit
34(osx only) menu-exit / quit
48deprecated - unused (was: button 1 / resize)
516disable A/V offset control
632don't use jack-session
764disable jack transport control
8128disallow sync source change
9256disallow file open
Table 4. Interaction Override
xjadeo-0.8.14/doc/pages/building.html000066400000000000000000000043571461252343600174240ustar00rootroot00000000000000

Building XJadeo from source

Here be dragons.

Basic building

The usual autotools spell applies:

./configure
make
sudo make install

However xjadeo requires quite a few build dependencies:

Development packages for the following software must be available to compile xjadeo:

  • ffmpeg (various libraries from ffmpeg.org, at least version 1.0)
  • jack-audio-connection-kit (jackaudio.org)
  • libX11 (on Linux only, X.org)
  • glu (mandatory on OSX and Windows only, highly recommended on GNU/Linux, opengl.org)

Recommended optional dependencies:

Options: (fall-back and legacy video outputs)

  • libXv (on Linux, X11-video acceleration, X.org)
  • imlib2 (Linux RGB display, enlightenment.org)
  • SDL-1.2 (meant for windows only, really - but works on Linux, OSX too, libsdl.org)

Deprecated:

  • QT3 or QT4 (for external remote-control GUI)

Cross compilation, static binaries and bundles

Please see the variety of x-*.sh scripts in the source's root folder in the git repository.

xjadeo-0.8.14/doc/pages/download.html000066400000000000000000000055341461252343600174340ustar00rootroot00000000000000

Download

Ready To Run - Binary Releases

Latest Release: version @VERSION@ from @DATE@: What's new?

You must have the JACK Audio Connection Kit installed to properly use xjadeo.

For all releases please visit https://sf.net/projects/xjadeo/files/xjadeo/.

Compatibility

macOS/OSX

There are two variants: A dedicated version of Xjadeo for Apple silicon (arm64) which runs on macOS BigSur (11.0) or later, and an Xjadeo Intel version that runs on MacOS/OSX ≥ 10.6.0 64-bit Intel (x86_64) and 32-bit Intel (i386). (the last OSX 10.5, PPC compatible version was 0.8.8)

Win

Since version 0.8.9 both 32bit (x86) and 64bit (x86_64) Intel binary builds are available. The 32bit xjadeo should run on all versions of Microsoft Windows, starting with Windows XP. The 64bit binary was should be compatible with Window 7 and later.

GNU/Linux

Xjadeo is a statically linked binary compatible with all versions of GNU/Linux on the Intel/AMD architecture that have a X-windows system and libc ≥ 2.16 (pretty much all systems since 2008). However it requires libjack (either jack1, or jack2) to be present.

Source Code

xjadeo-0.8.14/doc/pages/main.html000066400000000000000000000255221461252343600165500ustar00rootroot00000000000000

XJADEO - The X Jack Video Monitor

Xjadeo is a software video player that displays a video-clip in sync with an external time source (MTC, LTC, JACK-transport). Xjadeo is useful in soundtrack composition, video monitoring or any task that requires to synchronizing movie frames with external events.

About

Xjadeo is the de-facto standard for video-monitoring with the Ardour Digital Audio Workstation and used by a variety of projects, predominantly on the GNU/Linux platform.

Xjadeo supports all standard A/V synchronization methods that are feasible to implement in software without dedicated hardware support.

It features frame-accurate seeking for a large variety of video formats and codecs, only limited by CPU and graphics hardware. For professional use, xjadeo honors presentation timecode stamps (PTS) and offsets.

Since monitoring a video is usually an indirect non-interactive task, xjadeo is designed for with remote-control in mind. An Audio Workstation can launch and control the video-monitor. A standalone appliance, for example a projector, can hide xjadeo under the hood, exposing only relevant controls to the user. Nonetheless, direct user-interaction is quite elaborate, but can be disabled or overridden dynamically by a controlling application.

Getting XJadeo

To acquire xjadeo, please go over to the Download Section.

Screenshots

Not much to see, really. Xjadeo is at its best when you don't see it! A full-screen display of your movie, or a window with nothing but the asset that you're working with.

Features

  • Full-screen or windowed video-display:

    The default on all platforms is openGL hardware-accelerated display which is screen vertical refresh synchronous. Various fall-back video drivers exist: Xvideo/X11, imlib2/X11, SDL, carbon/quartz.

  • Video decoding via FFMPEG:

    Thanks to ffmpeg, xjadeo supports a multitude of file-formats, video codecs and protocols. It is possible to directly read remote files (e.g. via http or rtmp) and supported formats include avi, mpeg, mpegts, mov, mp4, ogg, webm (and at least 200 more). Among the 300+ supported codecs there are mjpeg, mpeg2, mpeg4, h264, vpx8 and theora.

  • Sync sources:

  • Frame accuracy:

    Tested with 23.976, 24, 24.976, 25, 29.97df, 30, 59.94 and 60 fps video-files, xjadeo provides for frame accurate playback and random access seeking. Xjadeo also features optional timecode conversion and offset calculation mechanisms.

  • Remote-control interface:

    This allows for seamless integration into larger projects and custom artistic use-cases. It is possible to query and modify all settings and parameters of a running instance and override user-interaction.

Xjadeo does not play any audio, nor display more than one file at a given time.

Using XJadeo

Just launch xjadeo the same way as any other application on your system (double-click or choose from 'applications' menu).

By default it comes up without a video-file and only connects to jack (sync-source) if jackd is already running. To interact with xjadeo, right-click on the window (Windows, Linux) or use the system-wide menu-bar (OSX). For details see section «User Interaction» in the manual.

From the commandline you can simply launch xjadeo, optionally specify a video-file as argument. The complete set of options is documented on the man page.

Made With XJadeo (and Ardour)

  • «Marzipan» was the first project ever realized using xjadeo. The movie won a special jury award at the Venice Film Festival in 2006 and the 1st price at the NOFF 2007, in Utrecht, Netherlands.
  • «Cronopios and Famas» by Juan Pablo Bouza is the first full feature movie that we know about which used and credited xjadeo.
  • Harrison used xjadeo as part of a large-format audio/video playback system for trade show setup.
  • Xjadeo played an essential role in the making of Sugartown and Henry John and the Little Bug. Both movies won awards at the HollyShorts festival, Sugartown for Best Music and Sound for Ian Young.
  • xjadeo was used for a 8 screen cave performance/installation at the Fondazione Cosso by Autistici.org.
  • Kris Limbach from E-19 Studios uses xjadeo exclusively for Postproduction. The portfolio includes a wide variety of exhibitions, movies and commercials.
  • xjadeo is the engine behind the Frontera Project.
  • ...

Various Post-Prod Houses and Studio use xjadeo as part of their workflow, mainly via integration in the Ardour Video Timeline.

Community

Xjadeo is under the umbrella of the linux audio consortium. The easiest way to get in touch with fellow users is the LAU (Linux Audio Users) email list. A lot of people with experience including developers are also online on the #ardour and #jack IRC live chat on freenode.org.

You can email the developers personally, but note that the chances of getting a reply quickly is greater if you ask the community at large.

Feature request and bug reports belong on the Issue Tracker which is hosted on github.

Troubleshoot & Support

In case Xjadeo does not work out of the box..

  • Try to play the video-file with another video-player. Check if you can seek that file
  • run xjadeo -v filename - look for warning and error messages, verify that the detected duration and offset (override with -I is correct. In verbose-more (-v) xjadeo also prints information about the displayed frame and the timecode-source which might provide a clue to what is going on.
  • Try the example video from source-code/contrib/xjadeo-example.avi or validate time-accuracy using time-stamped test videos:
  • Ask for help and share your experience: report the issue that you are having. Please don't hesitate and don't be shy! We do require your feedback to improve xjadeo. Please include the output of xjadeo --version. You can find the issue-tracker at https://github.com/x42/xjadeo/issues.

Some video codecs are known not to work properly on some systems. This is mostly due to different ffmpeg versions, available codecs, etc usually caused by 3rd party builds that have not been rigorously tested. There is little we can do about it. You might be able to work around by transcoding the video into a different format/codec (avi/mjpeg is a good candidate).

To mitigate this issue we provide binary versions with a good, known to work, version of ffmpeg.org. Prefer one of these to distribution provided packages where we can take no responsibility for. (In case you are worried about running untrusted binaries: the source-code includes the complete built-chain to create those binaries in a clean-room (pbuilder) environment from scratch.)

Developer Information

License

Xjadeo is licensed in terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

© 2006−2014 Robin Gareus <robin@gareus.org>
© 2006−2011 Luis Garrido <luisgarrido@users.sourceforge.net>

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.

The Windows, Apple and Linux names and logos visible on this site are trademarks or registered trademarks in the USA and other countries, respectively of Microsoft, Inc., Apple, Inc., and Linus Torvalds.

xjadeo-0.8.14/doc/pages/osc.html000066400000000000000000000150561461252343600164110ustar00rootroot00000000000000

XJADEO - Open Sound Control Interface

Open Sound Control Interface

An alternative to the remote-control described in the section «Remote Control Interface» is to use Open-sound-control. The drawback with OSC however is that there is no feedback. It is a one-way method of communication. Furthermore OSC usually has more latency compared to POSIX real-time messages, although it is quite possible to play a video sending 'seek' commands. On the upside OSC offers a control interface that works via Network. It is easy to use and ubiquitous. There is support to transmit OSC messages for nearly every programming language and even some hardware controllers - be it arduino, iPhone or mixing-desks.

To enable xjadeo's OSC interface it needs to be started with the -O port option where port is the UDP port number xjadeo listens on for messages. e.g.

xjadeo -O 7890

A simple example to control xjadeo using oscsend from liblo-tools looks like this:

oscsend localhost 7890 /jadeo/load s '/tmp/test.avi'
oscsend localhost 7890 /jadeo/quit

OSC commands

Address PatternType TagsDescription - notes in brackes are corresponding remote-ctl commands or commandline-options
/jadeo/quitTerminate xjadeo.
/jadeo/loadsLoad a video file, replacing any previous one (load filename)
/jadeo/seekiSeek to given frame-number (seek ) - xjadeo needs to be disconnected from a sync-source
/jadeo/cmdsCall a remote control command
/jadeo/fpsfSet the screen update frequency (-f, set fps)
/jadeo/offsetiSet time-offset as frame-number (-o, set offset)
/jadeo/offsetsSet time-offset as timecode (-o, set offset)
/jadeo/osd/fontsSpecify a TrueType Font file to be used for rendering On-Screen-Display text (osd font)
/jadeo/osd/timecodeiIf set to 1: render timecode on screen; set to 0 to disable (-i, osd smpte)
/jadeo/osd/framenumberiIf set to 1: render frame-number on screen, set to 0 to disable (-i, osd frame)
/jadeo/osd/boxiIf set to 1: draw a black backround around OSD elements, set to 0 to disable (osd box, osd nobox)
Table 1. OSC Commands
Address PatternType TagsDescription - notes in brackes are corresponding remote-ctl commands or commandline-options
/jadeo/jack/connectConnect to JACK and sync to JACK-transport (jack connect)
/jadeo/jack/disconnectStop synchronization with JACK-transport (jack disconnect)
The following commands are only available if MIDI is supported.
/jadeo/midi/connectsGet sync from MTC (MIDI Time Code). The parameter specifies the midi-port to connect to. (-m, -d, midi connect)
/jadeo/midi/disconnectClose the MIDI device (midi disconnect)
The following commands are only available if LTC is supported.
/jadeo/ltc/connectSynchronize to LTC from jack-audio port (ltc connect)
/jadeo/ltc/disconnectClose LTC/JACK client (ltc disconnect)
Table 2. OSC Commands to configure synchronization
Address PatternType TagsDescription - notes in brackes are corresponding remote-ctl commands or commandline-options
The following command is only available if "panorama mode" is enabled.
/jadeo/art/paniSet the x-offset to the value given in pixels. 0 ≤ val ≤ movie-width
The following commands are only available if "timescale mode" is enabled.
/jadeo/art/timescalefSet time-multiplier; default value: 1.0
/jadeo/art/timescalefiSet both time-multiplier and offset. default: 1.0, 0
/jadeo/art/loopiEnable wrap-around/loop video. If set to 1, multiples of the movie-length are added/subtracted if the current time-stamp is outside the file duration.
/jadeo/art/reverseTrigger reverse. This action multiplies the current time-scale with -1.0 and sets a time-offset so that the currently displayed frame is retained.
Table 3. non-standard OSC Commands
xjadeo-0.8.14/doc/pages/remote.html000066400000000000000000000233441461252343600171170ustar00rootroot00000000000000

XJADEO - Remote Control Interface

Xjadeo features a remote control mode that allows you to modify all settings of a running Xjadeo instance. When started in remote mode (using the -R or --remote option) xjadeo will interactively accept commands and issue responses through the standard input/output mechanism.

Remote Control Variants

Since version 0.3.20 Xjadeo implements POSIX message queues (option -Q) as an alternative to the standard-I/O remote control and since 0.4.11 also System-V IPC (option -W. These allow one to disconnect from and re-connect to an existing xjadeo session. For more information about message queues see the xjremote(1) manual page.

Xjadeo's remote control interpreter is self documenting, use the help command to query the available command set.

Response Format

Each remote command is acknowledged with a response. It is intended to be both human readable and machine parse-able. The response is a single line terminated with the newline character '\n' formatted as:

@<status-integer> <text>

Every line start with a literal '@' followed by an integer which indicates if the command succeeded and specifies the format of the trailing text that is separated by a single whitespace from the number.

The status integer is a 3 digit decimal number in [100..999]:

1xx:
OK. The command succeeded returning a small text info message.
2xx:
The command succeeded and the return text is in format key=value. The range [200-299] further defines the type of the value as follows:
201:
integer
202:
double
210:
Two dimensional vector intxint
220:
Text string
228:
Tiemcode in format HH:MM:SS:FF
3xx:
These are messages that are generated asynchronously by xjadeo (not in response to a command) after subscribing to notifications. The format and type declaration is identical to 2xx messages. Currently the only 3xx message is @301 position=integer.
4xx:
Error message.
8xx:
Info or help message. These messages are meant to be ignored by automatic parsers and are for user information or displaying comments only.

Supported Commands

The following list was auto-generated from the help command:

seek  int 
seek to this frame - if jack and midi are offline
load  filename 
replace current video file
unload
close video file
window close
close window
window open
open window
window mode  int 
change video mode and open window
window resize  int | int x int 
resize window (percent of movie or absolute size)
window size  int | int x int 
alias for resize
window position  int x int 
move window to given position (top-left coordinates)
window pos  int x int 
alias for 'window position'
window xy  int x int 
alias for 'window position'
window fullscreen  [on|off|toggle] 
en/disable full screen
window zoom  [on|off|toggle] 
alias for 'window full screen'
window letterbox  [on|off|toggle] 
don't break aspect ratio
window mouse  [on|off|toggle] 
en/disable mouse cursor display
window ontop  [on|off|toggle] 
en/disable 'on top'
window fixaspect
scale window to match aspect ration
osd frame  ypos 
render current frame number. y=0..100 (negative integer: disable)
osd smpte  ypos 
render sync timecode. y=0..100 (negative integer: disable)
osd text  text 
render  text  on screen
osd text
display prev. OSD text
osd notext
clear text OSD
osd off
same as 'osd notext'
osd on
same as 'osd text'
osd pos  xalign   ypos 
xalign=0..2 (L,C,R) ypos=0..100
osd available
return 100 if freetype OSD is available
osd font  filename 
use this TTF font file
osd box
forces a black box around the OSD
osd nobox
transparent OSD background
osd mode int 
restore OSD as returned by 'get osdcfg'
jack connect
connect and sync to jack server
jack disconnect
disconnect from jack server
jack status
get status of jack connection
midi connect  port 
connect to midi time source (-1: discover)
midi disconnect
close midi device
midi reconnect
connect to last specified midi port
midi status
display status of midi connection
midi driver  name 
select midi driver
midi driver
display the used midi driver
midi library
alias for 'midi driver' (deprecated)
midi sync  int 
set MTC smpte conversion. 0:MTC 2:Video 3:resample
midi clk  [1|0] 
use MTC quarter frames
ltc connect
connect and sync to LTC server
ltc disconnect
disconnect from LTC
ltc status
get status of jack connection
notify disable
disable async messages
notify off
alias for 'disable'
notify frame
subscribe to async frame-update messages
notify keyboard
subscribe to async key-press notifications
notify loop
enable continuous frame position messages
notify settings
receive a dump of current settings when xjadeo shuts down
notify noframe
stop frame-update message subscription
notify noloop
disable continuous frame position messages
notify nokeyboard
disable async key-press notification messages
notify nosettings
disable async settings dump on shutdown
get position
return current frame position
get smpte
return current frame position
get fps
display current update frequency
get offset
show current frame offset
get timescale
show scale/offset
get loop
show loop/wrap-around setting
get file
print filename of current video buffer
get duration
query length of video buffer in seconds
get frames
show length of video buffer in frames
get framerate
show frame rate of video file
get width
query width of video source buffer
get height
query width of video source buffer
get seekmode
deprecated - no return value
get windowsize
show current window size
get windowpos
show current window position
get videomode
display current video mode
get midisync
display midi SMPTE conversion mode
get midiclk
MTC quarter frame precision
get osdcfg
display status on screen display
get syncsource
display currently used sync source
get letterbox
query video scaling mode
get fullscreen
is xjadeo displayed on full screen
get ontop
query window on top mode
get override
query disabled window events
get version
query xjadeo version
set offset  int 
set timecode offset in frames
set fps  float 
set screen update frequency
set framerate
deprecated - no operation
set override  int 
disable user-interaction (bitmask)
set seekmode
deprecated - no operation
set timescale  float   int 
set timescale and offset (*)
set loop  int 
0: normal, 1:wrap around (*)
reverse
set timescale to reverse playback (*)
list videomodes
displays a list of available video modes
ping
claim a pong
help
generate this remote-control API documentation
exit
close remote-session (keep xjadeo running, with MQ and IPC)
quit
terminate xjadeo
xjadeo-0.8.14/doc/pages/whatsnew.html000066400000000000000000000115261461252343600174630ustar00rootroot00000000000000

News

Version 0.8.14

Fix JACK Transport control when using pipewire

Version 0.8.13

Fix portmidi support for Apple Silicon macOS. Custom Linux builds can now support Xinerama (thanks to Ion Reguera) and proper loop/time-mapping (thanks to trinitou).

Version 0.8.12

Fix Retina/UI scaling when building on macOS 10.15 (and later). This fixes display on Apple Silicon macbook systems. xjadeo 0.8.12 can now also be built with ffmpe v5.1.

Version 0.8.11

Build system and binary dependency update only. xjadeo binaries now feature ffmpeg v5.0

Version 0.8.10

Xjadeo version 0.8.10 offers support for macOS BigSur and Apple M1 ARM. A new keyboard shorcut was added to offset the video in increments of ± 1 sec.

Version 0.8.9

Build system and binary dependency update only. xjadeo binaries now feature ffmpeg v3.4.5 (latest v3 stable). This also marks the start of 64bit windows versions, while OSX/PPC support was dropped.

Version 0.8.8

Use PortMidi default device. This allows to configure the MTC MIDI port with pmdefaults (walkthrough example). Allow to setting a custom OSD font on windows using a file-path with Umlauts.

Version 0.8.6, 0.8.7

Xjadeo now explicitly request single-screen fullscreen on OSX. Linux binaries no longer require JACK to be installed. (there was no 0.8.6 release)

Version 0.8.5

Update video-decoder library: Add support for upcoming ffmpeg-2.9, use ffmpeg-2.8.2 for binaries.

Version 0.8.3, 0.8.4

Xjadeo version 0.8.3 includes updates for OS X 10.11 (El Capitan), and a tweak for to allow loading huge files (> 4GB). Since version 0.8.4, JACK is also no longer required to launch Jadeo.app on OSX.

Version 0.8.2

Xjadeo version 0.8.2 fixes an issue with high CPU usage when seeking after the end of a video. Correct some typographic errr... :)

Version 0.8.1

Xjadeo version 0.8.1 is mainly a hotfix release addressing remote control issues with Mac/OSX 10.10. It also adds a simple file-open dialog for the GNU/Linux X11 platform.

Apart from that, there are a few cosmetic changes and typographic updates to the application as well as the documentation. A complete list of changes is available as Git Commit Log.

Version 0.8.0

Xjadeo version 0.8.0 brings a lot of significant changes. Most notably:

  • openGL display
  • video-frame indexing
  • built-in UI / context menu

With openGL, video-scaling is now performed in hardware and playback synchronized to the screen's vertical refresh (if the hardware permits that; most graphics cards do). This is the new default display and supersedes prior platform-specific video outputs (XVideo, X11/imlib2, SDL, quartz, which are still available via the --vo option and also used a fallback).

Video files are now scanned and indexed on load which provides for reliable seeking to video frames for a wide variety of codecs where frame-accurate seeking was not possible with earlier versions of xjadeo. This also acts as a guard to detect and refuse broken video files early on.

User interaction has been overhauled, most notably by adding a menu that facilitates discovering key-bindings. This deprecates the external control application qjadeo which previously came with xjadeo.

There have been over 200 changes since the last release. For a detailed list see the ChangeLog.

Other highlights include:

  • separate On-Screen-Display for Sync-Source and Video Timecode
  • self-documenting OSC API
  • disable screensaver
  • 64 bit timeline
  • new website

Note that various command line options have changed. The seek-related -K, -k parameters are no longer needed due to the change to indexing. Letterbox is enabled by default, and it is now also possible to start xjadeo without an initial file. In short, a lot of defaults have been updated to make xjadeo more topical (despite that fact the menu for the X11 variant is plain old toolkit-less Xlib :)

xjadeo is developed and has been tested for accuracy with ffmpeg-2.2.5 it may or may not work properly with different versions, but compiles with any version of ffmpeg ≥ 1.0 to date.

Many thanks to Chris Goddard who provided valuable feedback and spent several weeks on quality assurance and polishing user interaction. We're far from done on the quest to 1.0, yet 0.8.0 marks a major milestone in the life of xjadeo.

xjadeo-0.8.14/doc/remotedoc.sh000077500000000000000000000004371461252343600161550ustar00rootroot00000000000000#!/bin/sh echo -e "help\nquit" \ | xjadeo -R \ | grep "@800 + " \ | sed 's%>%~!~%g' \ | sed 's%<%\ \;%g;s%~!~%\ \;%g' \ | sed 's%\[%\ \;[%g;s%\]%]\ \;%g' \ | sed 's%:%
%;s%$%
%;s%^@800 + %
%' \ > /tmp/xjrem.html xjadeo-0.8.14/doc/static/000077500000000000000000000000001461252343600151205ustar00rootroot00000000000000xjadeo-0.8.14/doc/static/bug.gif000066400000000000000000000151241461252343600163670ustar00rootroot00000000000000GIF89aH  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~! NETSCAPE2.0! , H*<`Å}{Dg^6߽% 2.P[ϙGp'p^7r ά&CF`%;gy4I' ;TBH2;xPq ;5DPޕa֨qRG̟&n8ŕ~N#1])G 5dhY&3` d& 0S*d 0[P6g!PH#(ANڠ.M D 2P@‚J@2;tlB )VaBA!Fp L`NU|0}((t@80p:L`^`@#|514N`pȰ l9\\4%!CgI3RDK=xFE 2D!ʹJ!^B )HcO\1E=UO<! , H!\pÇr&P!Dv#_}j2,X)Y6K9G;~ _,"Td7{Q̷Q8l fΞA7PrP &\bō#K|J8 )p#G aSUl:]ycŋ"0DࠣбS] '".V\ ,9dZx:s %,(tpbBuX)Π>C r7-P1A,(xR̓I@ .d@? aCA 4`P6P04 +q_ 0!8~dOACWJ:I0XD "a'6VPi8FMΧ/$q;ʒ.^|BnIr#F`YT%.v稸 DE,0Ɛ <`!mv4/&(p BA`0A 0  &Rlq'<005k2I@0* QC(tV> v#P>!A*4GHR,Mɓ -Z1D:@'AP@! , H*_Â[(&AF ( 5pRw>SUH K.]cI$d@s/|(듄O(0uH1Mf;:LbDyǎ6q`ukԬb0N%s 66NIB'$:@A" 0[tH%.j<B 7JPd )_8KhuRfo gbTǍIVg!SO!†04AfV찡0HkxĆ 00/C $0d1G8bP>p<H0$B (@ =.*0\b Nw>t!Q!l6>#6|@`Q>IA4P@! , H*_ -ypmq8~ 7oFh86&#'{0tRBOv0:% $7hIG b 1Cf< o^> F/hi"3x 2f0p)b # N٢EJ*\q3+)YT2/^m.]lp ER jh8B*(0I`# D '~wu 4XA - A ]`  G c9@4@@`=TI P6%7 2<<  |XG8L'8#P>qAv!OCs=#PCP@! , H*` .'R,2VvLÚ@y$Uf 3Vñ@H`HuSPf;B8Qf5;y(%[Eh4 ]z :F0~!E :BcFJ#:@/^ 3X2Wl" :xq`u8I2 "xG+~XD )Y neĈUNЈb  Lpeh`3D <BPfD D\ D@A 0 -H@-@6H>m4\c$6qP&@`^#pN>H#]SH4@ n?s4بc Cs<DL8}8 WcFI ! , H*TO`C#űO 2{P|$qA^r[zDXQ!2|ә:9"H dh̒`!#&4hA ; zJ Dp?@I  }Pq"hUP:RP-<(D!%(@h ?H$%P;XR9?CI$>&33)13ehAI@ܢW! , H*Dϟ>HiKL å`.xv 0PP6>`* CPN9nWrɫ7 MIUEƎ'ֆA.a;h !TXȐjܿ{ ig 9X$Xas{T~v根M t`AgٰÈREL*4Lࢂm֡ *%::Xx&(@Dl/F <DPCAܼО8 aDB @SePA4TwȢKB(>R )h4]X@C~> ?R 7c4 >! , H*DM ͝P}GГ8LA @[w@ACi8ވبUJdz`'b0u YI\G_lEKTc!PR QI)uG 6S<Q# *YP6~p숹bL ~!(/lMǥ-aQIŬ?5t :Dx/TLN #\hࠁZ`ToMB H`b9Q$* Lx!B4BӇQ)o8D 3\}D@ gprQ;D b$(8AQ( jc3S?I"x"7EA<?_03-yC3#I5PACܴCp! , H*4۽*DFbAuIB\>~[NG@y+eձ l)Q ܯ3I[ohԀG < `>'dN!T^0q" 7E 0iܸ!ň*HtD.*TS/r^d FhAaS up .8R(\ G+Y`q 3\ "~e@B '08Ì^ _-aD$ X# ! D0@4@`X/0OB@@AzABR N0@uB]xAđ@@H 3 |f>…SI J!@t1B7tGl |D 8OgcI;xjadeo-0.8.14/doc/static/bug.png000066400000000000000000000006541461252343600164100ustar00rootroot00000000000000PNG  IHDRcsRGBfIDATH핿O@?=AXńtPpsaj' w/n&,4؈ mwn~ޏ}}?A9oqxV]7E?Ζ0.c#k`Z\ƽ:*"Г6 ,-e]'Mz<8fBx۠aj0h-뺮=iChd<"ڊW<W&TAE\v]{:1!ah|.]P(dͷZx^?:Nm(F#3Kl88eY7JRGnB.>W^/BF9?ϡZDV+gf(g^c* 9y<jB\.]%^KDsf=ft [n)IENDB`xjadeo-0.8.14/doc/static/firstchoice.jpg000066400000000000000000000525141461252343600201330ustar00rootroot00000000000000JFIFHHC  !"$"$C^n" PNNNNNNtB A E(ӁӁ+(.QՎJYrI-D>,yoO^AtoR7guPfw8x#NON<w΀ ѫy|=Ix'+< 'r5WkWC Z7ǺyOhuRvΪ=Fn'8BM?/:f4Dx#fr7x y:GbLagg]bhB<ӳ yA IuY8@5=xǪP}v4VxdĨz\5g{{X2:} *%G_'@= [j#fMg0qNcZwwXA8Z@soѵIa#fej?9} H:<̖Czz3:} JG:Ugωb[]#2#1?i12gzjS͌s|vz_ƢzXR y_!lC= pPڅ8 Ju.v2搕)[:ϤI7Sx>6{_A|oVyIuR!U%6 NSN0+84Z1'e\8Ӊ=UN׃="LJz6kef{R uGXvˬ\ 8OqAL|Y&b$ 'O@SӧV5\"sY51=El䔪 D%{|<հe;b%}:1!\2@[|~H$qptc2 n=>4=f!M>mA3e"$gI[[qNLr;Y-yүO}ր{Czpy % =:(ℎtgI]njI !}c6 TzLLg駖m O&HexF<*eGhr2FsPEszGg:NMj{:4䵑$# e\7c bFMeVyG<~,o!FYg97lo;+,mbAgIi^ES=Q6N$Y8o p΀(Jj+dAx<a@!IZzMuN,Htb]`EMh[acge%(*!$"R!s`Uz՘K(V Wr퓆j.pi4FfPE,"O~lb}, p&R[@6u* HUM {i$a?0~ZydbNzcm\vm0!Һ{F2zWD+M]k lFtcE<`0,ǯa=&؎LLV':̱LRJ^8R˳AW_b|uGДʌk}E%pLYQ\A,edoKWJK*Mn =rS Bס Kzw+;lj[`#gd]A  x9oK|\M!-tpm^¯l%/-eP^lJPq Jyf0ÊZqj˞S'B%rIgT8G,@RJh&ؐנJX 'Jpٽ!_̊&y\8ߠyfUk#t)'LbPvIF'nsͧ 3m(umpR#MK-Ȝ+v (7](QZO2mL%/q`XUeӹJIX}%Ku=;΀qbZbLeM ~K9ΠRxn gv . e TR_8һ;Ы6jELeU>kh؜VJ3Eu~rAlX(o$mb [R8зP*5űLֲ 4[_YY3Y3Y3yY3Y3Y3UVn&=6U#O4B|NYmkZ.A+|'U>6jY0j #jy8}3FI~Eh4WV R n|T!{7;&)-PʵSJ#j%B|f{ȪUC x. v*^6̜b. -?fyo9yf/{4{cPj=!:"t{ IO L1H7Vj?6fEo|SӮgZa3s9ʽ,?Mwqlu0c(:B !%B! ond>7umZ+WrIl4mo&['X!i{^~/^]#^W}ˎA(Ny/n'%uR UKC _}$}_zY%ImVV|wȳE<,SW3ЈLH^+֯[Xˏdu>icj3G/|6% 1}Qč]ջSnk"Z-E1_Ay9S%ol+vT<$:rou|#]?of'4/}IVyTOL~@CKWg fK:Oײg3@`NGr?~'C }q_ }r?y6q+KBXm#M?JiϺ‘ͦ~Nrc몑E/_>qS˲Z|']cq9?_]{8ͼPuIլCH?Fq6#"?&Gluʴ"cLc7yr%iZlU&6Ta(S<@#ASZ1C@#Lv7[Y1lQÙq" 94,fy&7f)c %"Y;L):s:SqF[v8Ŕ#w6y:m71o1tI3Jܫ^Hyot>[S/PngywyH#(go-y>3 *0I\(4LaKXT, MYSZ9MLV2։ݒՑ tN9ҝ)DNq7]q33c3htI]`Ƭ *̅2;@}VS&"iB$679r3s;͌RcXbbiwveh-tѓӪ*ZGǶlyUo3#7 -:|>\'\|5p9ӂm6i)rMS\f0brUIk= 1xݧCKkڱƜ[/i*No,,}(ͯ G^]o9NSc6N3`Iӝ9ӂ0‡ON8]θpӽ5D+~+q5c*ǨFJV1F!ȗ[Kma^k }$åa@ [nZ9?ks;6g p Hΐ@GmΕKz>UvaN=W1"㨋]bxnvm+#ƭѝ%VbV'=M7v̫I79]kxojە? HND>Iw qa9NSs=S*hlSK.d\G01C@5=?B B,6,wݺc:{‚fo]ghvpˠ}fXΛAI3:Kk'QgZu6 %;LV/Nuk`'P1TFml t1԰q_Yo,狼B#ދ-E|Pðҵ>U}'>U@:5Ӫas9l`Sft%ycYUa!MbJLzc ób#;ِѭb*bc-? rt Li;Qa"kK:ညfw0+h?Yxpϑڒ;+C!g qe'(VwX$Nj&۞uÐ>)@L~Af+_|s`LooY{WSJ eb aR6'eqbĉuaQxH\eJsE[;̌J@3/ʋ gr3VI]7]mͤ] V}57.=[w'PgDN5Y6 nĢƖX*ai<>s1fb7رeM*N5VVWz&nN56>yRIX˼KTҊQU7˼"99,l&!?R{Skq̭4Ƨʱ ocNQ6>Z v:yYf06FpʜJzvepQ^@W;Micdi(K3R* #$3N6V-¢|Ab1 ib`4"gʣ9ʹW0O]k'SiiМ+5k: rvu`bB2UŅQ[wW;B@x fMW#Ra25 d PͰ}L%d+rphX+AhږAqd"ܲW!ez@ڮϙ#{,h=ً6۰uh+itB*XuGh:84`=N i~YRpUil7[MɈT+:v10­Ub9dU_\1Y&*RZSlze&0K"ۼ͡VtJ `p="M΋f 4WVO%/, }:F-b_ljSx 82  mMg+겫nAV^G#:=b+9J0Nx +qv6ȡf&n-d4g9᭵k;B rQn2>}N9"ՍhhmʠwZ|;^1 j x+l\[\|׳"`V3O/.Ӭ@Y6eh [pofC0-B>ˏ髍RQݭ"P("mh3m,WZ``GJǢ'#f'"ظ)I|eRj[5as7?Fyб:k oӟn'i]ácT9 &fP"BZf2𚓧Fqc֖62Jj*n )wqmE=5ǩswB}@H 'r n|Kx)cjYf6Zɱi2y( {lihL8& ?NYhժb 4G7_ӕ8:-ʭmOƪ28wlM ڼ{y׽yN5ԋh^;N*Ő#)]l hÌ{eڍ /K{=KN(($Հ&",u *~~ӌ8CËi:b:ڝJX l˙MU8J਋V:uܙ,Am30qJqMϸ;^N+Yc6Pl>(B ap/jY~cK2rm=;.<N tR=j"dWԌ959q IMÃ-C`tu UhGtq XUvrlzgH-J5"c2q ʞX  %eVb꣨tb*n}%meҭggK"ȸ1īO-)@WqQ okoS5IPTlS|BنܨӁZk 6o| WQf`z zAnZ5l߫ksZj5\91," `]j!Q)6tsj!Y%7TVNSɲ~^!2zbd+ KJ<|C],齁1,cUbͦF S ~Ȕ^ps;rR8,N"X˻+F%"_;XjXs 7q/燎[՗e?R 1y[1$Ǧ-<:MPZAk#I%bm[b/$)hKI $f01 i joI[BL;]"}MMMqŤͰB~6vQr [ƱG[5̷a;)$N3^8 E#p:uLM? b%N~*lA`$LB"RPeLPv0c: YrFO2a!PŞ.I ɓ>N2BvC2T*; ֔:J䂡5VfS#璏wKHוC%-ȴE:u$tj·W{5GQU,u66:IU%mIfҩtS otH$ES.HsO,AM:RUm&=T2<̣Tjy A؂P,[["T5+gl߄[ȑ5!F;*`B^QxL|;(0FRPtH~ƨw-ZsJmb1f8Y;)A'QS䇅GCY#)j2d2e$Fݯ9; >E{d'q̓DI'_ψlޯjL>,wM9~ӽc"@X>(KOt=_տ{ &_؀r,%$.|}t"/Xlr; q|8oWx"FH&HowH^x ?Nu@+f71^> Xܒ(EJIޗ:쿚On6o~%xQAv&MF|0WGʑ>լ/A!,Պ_o#zϥF_yf-n$X|g<HoL{W^-)(ce 0~?EI',6EmqgϿ%͌+P%z v0r_ -nP0pnzYoꊕyq&E69+iG8cfw}xZ?SykkvD+i]k dy8Z/unh#lz!]8mY57>.vw}SͨvZ`%ka7DS\圠 Kۀmvo t~Dg?2 x8W`&` c { }-ns鲀xf| Ρ_31.F-gOoxx3{ O;02ct,lerFc(AJ ~|;.Arn<{B}j;%g|a:[9G>}ݭ%H1<| OὝ Lg#s9g>5"BEG |{#-!}M"8=xݔ{oڟ7g6bG3{xyϠ!GiB"ܮ#+m[,J L&c,3VmYl" f++Ftm3 H>Fb ffowhΗķ"yd{Ypmd𕴻ccr6dnl T;k `|[ym{9n(lVB( [vs&.ˋp4tpcG l řC|,P^f`v /Ew>7-܉Y܋ 9-v7kėmZo2|:8SڥZmnBXa0Hn+ X\ cn\^tN-C6[qہ W.~UCh|~j8TXimE͢'O6GXRp 81Ph˓Hpd& 6HNeex7Vfc/gR]Naηƞ_iAQG[QջGk?n4\g=N)"b``y%)>qˤfAs nHÇ$m4,%{MApеL`ygr;K^ipg DŽQ 8@2%W mY{ZݭpOǡqt+.[N78r-e;Zcځ8{O!vD%q%fm`e U-?E3r e(O{%ج:p#(6-L{^,hF&l<VaFmVLeR/ tbq8%Lu<"\ u@ܩ8ѳ'xftJu6vqd2q0a66#e5mbvOZ6M,ٝz#A~ݮ#ጇ:t8BN βAǜɰrs-Z` ea 6(@ĵsq"c fwE r9.+dI瘜w>ݴ ׶u_cY$BA=)n:sd[@.%{u*iar3p˱i&G;}eMtQYX'{o1ȃ;D/)>qzVL(&{ N+]QhR|,!g[}agDBaUKSDpf=L[/u6!pF9l_>%#$dYu{v/xurVӤq bc#gg8mNE훥|W.{Rn02c-s^.-u#KTs{I:4F8cΰ#p4\I$u.c3[uBw2JrŁC['>I$lZgvv L;C8~?z^f5YKVW]?}M`qcH{0' օ%GY:b^[<-G6}㈳v!l bzs{^b#!^C̟ܜ#B4pcbo3eՈ%=8X1ͨ ?9Ɇe<>g!vKmV0nB`D?@.Ǚ.Q ?Z>t?jI?'\9;qg9nħ{?) 5|'䖆>{-p^p -M.Ҁ dq#eNL:z{6#%NnFm{t/?lex,C>9>E̼`H>$@[\`r=xr0%6;&buW={}9~Tu (˾ EF2gU\-Ce8ȉpÛGn$: _^fM?R$cQ޴S!8 "HpeCc+5.b܉L+ԆcA:D`2z줈%a\7ŗNjDޅi˿^xݙN ,= Ut@qOB ޴ ^yF]c`'X8\vȚL#& OQHݧw3x{I[>+~oWV_QџwgA|K!;C50΄g]LTΕ,@$b(aاMqf^ Z I;&b0wg`Yyb@> &agf0zNxSf~<[y9{F\ݬoNp=6].$,{X[=Kma{0vg]HD<`9@ 1lݠ6;Wi!P Noxw#u#g՜=#I8óby1 ۇ) t"=\ Ro"1c̅UN!.Ә߶|I ~ Rss..*);3%<\e ̛ < DzLMZi8cl\$ "eZGwkn_@޶b_: Tٜa#"|ʹ J,CY+Ca~.MeGKKn64p=na `p]d+2Bq,t]2v0Cxt?b}Lt1H6d8`57~.P~/ [ u|Y ɷ0Iak`JzɄ䰟%Kg8WvY']2Gqg߻6YpC0g~C.$- ꇩz dKY f=$!ވ1Q<=%L˯W6araS@9ر2dHTMnT=-8~S GMRK:+ pX5`jgbqNnH@D'6 "-7vTɣ.K%.x +!a_>L/ aH9 }FZW Oh7PT<c>p`n6 /NEhǡyZ;Lc:rpvdBhlb!X!'T\.}[z6R?zg6Y U  |O9QXX ,#[HzðSi{\dc\Eܺ. ggX`$!aOE^ IK)L%Omr]e=yRC#"1] sDIT>『F&76|{ 'A@M@R]>n0|?dn7, =\P-prk#&P2E:X>a=h."w,ԅF0nDOQ?SF@"lg$i xܮT9҄O6WxYn,7^\{=c#YbC$SK2:{'SbG*V)lF+.|(#F/qg;vD5z8u,@VtE {;R ԛЍH(#״qAh*ΰ"Ը͆}[(1 J~m?dЗ= ɱ<Φ m-&-fDFCQC[ prGV\a)r$E m"vb爨`xx_PǦ|(}XH{3`3 r#P#(ɱ4%7j=Zlvb3퇝qϸEg1k6\}aq2yb\x$菤c'pyb&3G,gǭt.3\\03bX`ܖ@$D2=7+a/%E5ͥSfC/Q>$ lP fWI6yevvjFf&$ϫ9Ē<\doK6 *g,. $Q >%u=_Žg,w,߁- Wsp=$.~z5ˤ͇ fI x`>m WoSU&[WݡLF-";hCG@&2FO/SHIջ1v hAE+7 Għ8{pdYBn|F^gQP n2aW0Zz ƅie9҄`Ef+l8Y'caSG{M w*loX[4^d C{Br;.g.uHU;HagI}ZҠ>,R"'d;l gzdga7cOA?IxHD)Jr^}2`|Y oh}\:]،#rmѹ`OYB^2Pwny#|{NŌǴ wdQؤ+7V$O 86 CHv}$?;F,Rv5ͣH .H9 ٔfHCyXCJZIh.z:oR<5%<{4!>fni?e>FN-Pݝ<2tr4 y`waf2 őF HWyYd"jn@pgx|%@d<<ƏsWzlHP 1B{2f0$xD<jatı7Waд3b|+c=۾:9g|pˎr*:#=F$l؅u<'01Et?:~' 1’?XmĔTE>Xn$5E;'` k#HD ,v hnCTGV=QPq܃dStmo]l|F/:KC]`fN8r R6yh}ܽ:d9w' Lo`$z@i3`3f/r5caQ? JJK؃"śg::sQõʧP9T#CP'6eB1 \>e9fSa&^,@_##:e"VXŚ aZ2sȝ.a9L8~.2o{0#W u'Etn8cJ~p,&KHIzWuæk$Cby%F=2W}ېoxTd#1=Blsy _TQa&xGP~S~le.G(lqѐsΡZ~Lf=IK.ag-ϸǂ_?5Q+a"Cs%tOwq!AapوYͦHE6+pm{rV}"yrQ:po9$vɴnY7 F$D?Dz!? `G=^ { )a0[$*K"L-ъ*=>liAdmaJ>da>5_ `8g> `x>߀t<+TּGEM$II.A2|#dtm{e0 ggVCXa"<pTyIx8C tP:t.fi p{9|ui6K"2BxSZc"2+"IFzfXa/Bt1^7IENDB`xjadeo-0.8.14/doc/static/index.html000066400000000000000000000000001461252343600171030ustar00rootroot00000000000000xjadeo-0.8.14/doc/static/js/000077500000000000000000000000001461252343600155345ustar00rootroot00000000000000xjadeo-0.8.14/doc/static/js/hover.js000066400000000000000000000011301461252343600172100ustar00rootroot00000000000000(function() { var $ = jQuery; $('a.hover').find('img').each(function() { var $img = $( this ); $img.attr('data-orig', $img.attr('src')); var preloader = new Image(); preloader.src = $img.attr('data-hover'); }); $('body').on('mouseover', 'img[data-hover]', function(event) { var $img = $(event.currentTarget); $img.attr('src', $img.attr('data-hover')); return false; }); $('body').on('mouseout', 'img[data-hover]', function(event) { var $img = $(event.currentTarget); $img.attr('src', $img.attr('data-orig')); return false; }); }).call(this); xjadeo-0.8.14/doc/static/js/jquery-1.11.0.min.js000066400000000000000000002741741461252343600207260ustar00rootroot00000000000000/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f }}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("