MediaConch/0000755000000000000000000000000013216667113011554 5ustar rootrootMediaConch/debian/0000755000000000000000000000000013216666135013001 5ustar rootrootMediaConch/debian/mediaconch-server.install0000644000000000000000000000002413216666133017761 0ustar rootrootusr/bin/mediaconchd MediaConch/debian/changelog0000644000000000000000000000025413216666135014654 0ustar rootrootmediaconch (17.12-1) unstable; urgency=low * See History.txt for more info and real dates -- MediaArea.net SARL Sat, 01 Jan 2011 15:05:00 +0000 MediaConch/debian/mediaconch-gui.install0000644000000000000000000000036613216666133017250 0ustar rootrootusr/bin/mediaconch-gui usr/share/appdata/* usr/share/applications/* usr/share/apps/konqueror/servicemenus/* usr/share/kde4/services/ServiceMenus/* usr/share/pixmaps/* usr/share/icons/hicolor/256x256/apps/* usr/share/icons/hicolor/scalable/apps/* MediaConch/debian/mediaconch.manpages0000644000000000000000000000002413216666133016602 0ustar rootrootdebian/mediaconch.1 MediaConch/debian/source/0000755000000000000000000000000013216666133014277 5ustar rootrootMediaConch/debian/source/lintian-overrides0000644000000000000000000000027513216666133017664 0ustar rootrootsource: source-is-missing Source/Resource/html/js/jstreegrid.js source: source-is-missing Source/Resource/html/js/checker.js source: source-is-missing Source/Resource/html/js/datatables.js MediaConch/debian/source/format0000755000000000000000000000001413216666133015510 0ustar rootroot3.0 (quilt) MediaConch/debian/copyright0000644000000000000000000000065113216666133014734 0ustar rootrootThis package was debianized by MediaArea.net SARL on Wed, 26 Nov 2008 20:19:43 +0100. It was downloaded from Author: MediaArea.net SARL Copyright: License: MPL-2.0 The Debian packaging is Copyright (c) MediaArea.net SARL and is licensed under the MPL-2.0, see `/usr/share/common-licenses/MPL'. MediaConch/debian/watch0000644000000000000000000000014213216666133014025 0ustar rootrootversion=3 https://mediaarea.net/download/source/mediaconch/([0-9.]+)/mediaconch_([0-9.]+).tar.gz MediaConch/debian/autoreconf0000644000000000000000000000004313216666133015064 0ustar rootrootProject/GNU/CLI Project/GNU/Server MediaConch/debian/control0000644000000000000000000001347713216666133014416 0ustar rootrootSource: mediaconch Priority: optional Section: utils Maintainer: MediaArea.net SARL Build-Depends: debhelper (>= 9), dh-autoreconf, libmediainfo-dev (>= 0.7.99), libzen-dev (>= 0.4.37), qt5-qmake, qtbase5-dev, libqt5webkit5-dev, libxml2-dev, libxslt-dev, libsqlite3-dev, libjansson-dev, zlib1g-dev, pkg-config, libcurl4-gnutls-dev, libevent-dev Standards-Version: 3.9.6 Homepage: http://MediaArea.net/MediaConch Vcs-Svn: https://github.com/MediaArea/MediaConch_SourceCode.git Vcs-Browser: https://github.com/MediaArea/MediaConch_SourceCode Package: mediaconch Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libmediainfo0 (>= 0.7.99), libzen0 (>= 0.4.37) Description: implementation and policy checker, reporter and fixer for media files (command-line utility) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the command-line utility. . This project is maintained by MediaArea and funded by PREFORMA. Package: mediaconch-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libmediainfo0 (>= 0.7.99), libzen0 (>= 0.4.37) Description: implementation and policy checker, reporter and fixer for media files (server daemon) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the server daemon. . This project is maintained by MediaArea and funded by PREFORMA. Package: mediaconch-gui Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libmediainfo0 (>= 0.7.99), libzen0 (>= 0.4.37) Description: implementation and policy checker, reporter and fixer for media files (GUI application) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the GUI application. . This project is maintained by MediaArea and funded by PREFORMA. Package: mediaconch-dbg Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: implementation and policy checker, reporter and fixer for media files (debug info of the command-line utility) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the debugging symbols of the command-line utility. . This project is maintained by MediaArea and funded by PREFORMA. Package: mediaconch-server-dbg Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: implementation and policy checker, reporter and fixer for media files (debug info of the server daemon) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the debugging symbols of the server daemon. . This project is maintained by MediaArea and funded by PREFORMA. Package: mediaconch-gui-dbg Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: implementation and policy checker, reporter and fixer for media files (debug info of the GUI application) MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. . This package contains the debugging symbols of the GUI application. . This project is maintained by MediaArea and funded by PREFORMA. MediaConch/debian/mediaconch.install0000644000000000000000000000002313216666133016454 0ustar rootrootusr/bin/mediaconch MediaConch/debian/compat0000644000000000000000000000000213216666133014175 0ustar rootroot9 MediaConch/debian/mediaconch.pod0000644000000000000000000000477213216666133015607 0ustar rootroot=pod =head1 NAME MediaConch - implementation and policy checker, reporter and fixer for media files MediaInfo-Gui - implementation and policy checker, reporter and fixer for media files (graphical utility) =head1 SYNOPSIS =over =item mediaconch [F<-Options>...] F [F...] =item mediaconch-gui [F<-Options>...] F [F...] =back =head1 DESCRIPTION MediaConch is an extensible, open source software project consisting of an implementation checker, policy checker, reporter, and fixer that targets preservation-level audiovisual files (specifically Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1)) for use in memory institutions, providing detailed and batch-level conformance checking via an adaptable and flexible application program interface accessible by the command line, a graphical user interface, or a web-based shell. =head1 OPTIONS MediaInfo supports the following case-insensitive options: =over =item B<--Help>, B<-h> Display help and exit =item B<--Help=Advanced>, B<-ha> Display the advanced help and exit =back =head2 Reporting Elements =over =item B<--Mediaconch>, B<-mc> Output MediaConch report (default) (MediaConch contains default verbosity of implementationChecks plus any provided policy checks.) =item B<--Mediainfo>, B<-mi> Output MediaInfo report =item B<--Mediatrace>, B<-mt> Output a trace of the file =back =head2 Policy Checker =over =item B<--Policy=PolicyFileName>, B<-p PolicyFileName> Apply the policy (XSL or Schematron) =back =head2 Output Formats =over =item B<--Format=text>, B<-ft> Output in Text format (default) =item B<--Format=xml>, B<-fx> Output in MediaInfo/MediaConch/MediaTrace XML format (changed to -fa if there are more than 1 tool or more than 1 file) =item B<--Format=maxml>, B<-fa> Output in MediaArea XML format =item B<--Format=html>, B<-fh> Output MediaConch report in HTML format =item B<--Display=DisplayFileName>, B<-d DisplayFileName> Apply the display transformation (XSL) =back =head1 AUTHOR This manual page was written by Chow Loong Jin for the Debian system (but may be used by others). Permissions is granted to copy, distribute, and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation, or the Mozilla Public License 2.0. On Debian systems, the full text of the GNU General Public License, Version 3 can be found in /usr/share/common-licenses/GPL-3. =cut MediaConch/debian/rules0000644000000000000000000000552713216666133014065 0ustar rootroot#!/usr/bin/make -f # -*- makefile -*- export DH_VERBOSE=1 export DEB_LDFLAGS_MAINT_APPEND = -Wl,-z,defs -Wl,--as-needed export QT_SELECT = qt5 paths = \ Project/GNU/CLI/ \ Project/GNU/Server/ \ Project/Qt/ auto_build_cmd = \ for path in $(paths); do \ $(1) -D"$$path"; \ done %: dh $@ --with=autoreconf override_dh_auto_configure: dh_auto_configure -DProject/GNU/CLI dh_auto_configure -DProject/GNU/Server dh_auto_configure -DProject/Qt -- USE_WEBKIT=1 override_dh_auto_build: $(call auto_build_cmd,dh_auto_build) override_dh_auto_install: $(call auto_build_cmd,dh_auto_install) install -dm 755 $(CURDIR)/debian/tmp/usr/bin install -m 755 Project/Qt/mediaconch-gui $(CURDIR)/debian/tmp/usr/bin install -dm 755 $(CURDIR)/debian/tmp/usr/share/pixmaps install -m 644 Source/Resource/Image/MediaConch.xpm $(CURDIR)/debian/tmp/usr/share/pixmaps/mediaconch.xpm install -dm 755 $(CURDIR)/debian/tmp/usr/share/icons/hicolor install -m 644 Source/Resource/Image/MediaConchBig.png $(CURDIR)/debian/tmp/usr/share/icons/hicolor/mediaconch.png install -dm 755 $(CURDIR)/debian/tmp/usr/share/icons/hicolor/256x256/apps install -m 644 Source/Resource/Image/MediaConch.png $(CURDIR)/debian/tmp/usr/share/icons/hicolor/256x256/apps/mediaconch.png install -dm 755 $(CURDIR)/debian/tmp/usr/share/icons/hicolor/scalable/apps install -m 644 Source/Resource/Image/MediaConch.svg $(CURDIR)/debian/tmp/usr/share/icons/hicolor/scalable/apps/mediaconch.svg install -dm 755 $(CURDIR)/debian/tmp/usr/share/applications install -m 644 Project/GNU/GUI/mediaconch-gui.desktop $(CURDIR)/debian/tmp/usr/share/applications install -dm 755 $(CURDIR)/debian/tmp/usr/share/apps/konqueror/servicemenus/ install -m 644 Project/GNU/GUI/mediaconch-gui.kde3.desktop $(CURDIR)/debian/tmp/usr/share/apps/konqueror/servicemenus/mediaconch-gui.desktop install -dm 755 $(CURDIR)/debian/tmp/usr/share/kde4/services/ServiceMenus/ install -m 644 Project/GNU/GUI/mediaconch-gui.kde4.desktop $(CURDIR)/debian/tmp/usr/share/kde4/services/ServiceMenus/mediaconch-gui.desktop install -dm 755 $(CURDIR)/debian/tmp/usr/share/appdata install -m 644 Project/GNU/GUI/mediaconch-gui.metainfo.xml $(CURDIR)/debian/tmp/usr/share/appdata/mediaconch-gui.appdata.xml override_dh_auto_clean: $(call auto_build_cmd,dh_auto_clean) override_dh_installman: debian/mediaconch.1 dh_installman override_dh_installchangelogs: fromdos *.txt chmod 644 *.txt dh_installchangelogs -p mediaconch History_CLI.txt dh_installchangelogs -p mediaconch-gui History_GUI.txt override_dh_strip: dh_strip -p mediaconch --dbg-package=mediaconch-dbg dh_strip -p mediaconch-server --dbg-package=mediaconch-server-dbg dh_strip -p mediaconch-gui --dbg-package=mediaconch-gui-dbg clean: rm -f debian/*.1 dh clean --with=autoreconf %.1: %.pod pod2man --center "User Commands" --release=MediaConch\ $(DEB_VERSION_UPSTREAM) $< > $@ MediaConch/README.md0000644000000000000000000002734013216666133013042 0ustar rootroot# MediaConch_SourceCode README MediaConch is an open source software project consisting of a toolset that aims to further develop the standardization and validation of preservation-level audiovisual files used within various memory institutions and communities. The software consists of an implementation checker, policy checker, reporter and fixer that will work together to offer its users an advanced level of ability to validate, assess and find solutions to repair the digital files within their collections. Accessible via either the command line, a graphical user interface (GUI), or web-based shell, the MediaConch project will serve to provide detailed individual and batch-level conformance checking analysis using its adaptable, flexible and interoperable software application interface. With a project focus dedicated to furthering the longevity of Matroska, Linear Pulse Code Modulation (LPCM) and FF Video Codec 1 (FFV1) as recommended digital preservation audiovisual formats, MediaConch will anticipate and contribute to the further development of the standardization of these formats. The MediaConch open source project was created and is currently under development by MediaArea, notable for the creation of MediaInfo, an open source media checker software application. Website: :shell: MediaConch project. # Table of Repositories #### [MediaConch](https://github.com/MediaArea/MediaConch) The original repository for the MediaConch project, this repository holds all public documentation related to Phase I of the project (the design phase) and some metadata-related work. #### [MediaConch_SourceCode](https://github.com/MediaArea/MediaConch_SourceCode) This repository hosts the source code for MediaConch, the GUI. #### [MediaConchOnline](https://github.com/MediaArea/MediaConchOnline) This is the source code for MediaConchOnline, the online version of the MediaConch shell. #### [MediaConch-Website](https://github.com/MediaArea/MediaConch-Website) This is the repository for content hosted on [https://mediaarea.net/MediaConch/](https://mediaarea.net/MediaConch/). #### [MediaAreaXml](https://github.com/MediaArea/MediaAreaXml) This repository holds XSD (XML Schema Definitions) for MediaConch, MediaInfo, and MediaTrace. #### [MediaConch_SampleFiles](https://github.com/MediaArea/MediaConch_SampleFiles) This repository contains sample files used to test MediaConch. #### [MediaConch_MKVSurvey](https://github.com/MediaArea/MediaConch_MKVSurvey) This repository holds a research corpus used in the development of the MediaConch. # Funding and Licensing This project has received funding from PREFORMA, co-funded by the European Commission under its FP7-ICT Programme. All software and source code developed by MediaArea during the PREFORMA project will be provided under the following two open source licenses: GNU General Public License 3.0 (GPLv3 or later), Mozilla Public License (MPLv2 or later). All open source digital assets for the software developed by MediaArea during the PREFORMA project will be made available under the open access license: Creative Commons license attribution – Sharealike 4.0 International (CC BY-SA v4.0). All assets will exist in open file formats within an open platform (an open standard as defined in the European Interoperability Framework for Pan-European eGovernment Service (version 1.0 2004)). # How to build MediaConch [![Build Status](https://travis-ci.org/MediaArea/MediaConch_SourceCode.svg?branch=master)](https://travis-ci.org/MediaArea/MediaConch_SourceCode) [![Build status](https://ci.appveyor.com/api/projects/status/xnoysoqp5i0075fk/branch/master?svg=true)](https://ci.appveyor.com/project/MediaArea/mediaconch-sourcecode/branch/master) ## Build under Unix (Mac and Linux) First, you must create a directory which will receive the MediaConch directory, and some of its dependencies depending on your configuration: ZenLib and MediaInfoLib if you decide to compile them yourself, and under Mac libxml2 and libxslt. In this document, this directory will be referred as $BUILD_DIR. ### Dependancies under Mac #### macport Some dependencies are available with macport. To install macport: https://guide.macports.org/#installing ```sh port install autoconf automake libtool pkgconfig zlib ``` #### libxml2 libxml2 and libxslt must be manually compiled. Download ftp://xmlsoft.org/libxml2/libxml2-2.9.2.tar.gz, and then: ```sh mv libxml2-2.9.2 $BUILD_DIR/libxml2 cd $BUILD_DIR/libxml2 ./configure --disable-shared --enable-static --disable-ipv6 --without-ftp --without-http --without-c14n --without-catalog --with-xpath --without-xptr --without-xinclude --without-iconv --without-icu --without-iso8859x --without-zlib --without-lzma --without-mem_debug --without-run_debug --without-regexps --without-modules --with-tree --without-writer --with-pattern --with-push --without-valid --with-sax1 --without-legacy --with-output --without-schemas --with-schematron --without-python make ``` #### libxslt Download ftp://xmlsoft.org/libxml2/libxslt-1.1.28.tar.gz, and then: ```sh mv libxslt-1.1.28 $BUILD_DIR/libxslt cd $BUILD_DIR/libxslt touch libtoolT ./configure --with-libxml-src=$BUILD_DIR/libxml2 --without-crypto make ``` #### Qt To install Qt, download and execute: http://download.qt.io/archive/qt/5.3/5.3.2/qt-opensource-mac-x64-clang-5.3.2.dmg.mirrorlist ### Dependancies under Linux #### Listing *Build tools* * git * automake * autoconf * libtool * pkgconfig * make * g++ *MediaArea tools* * libzen0 * libmediainfo0 *CLI and GUI dependencies* * zlib * libxml2 * libxslt *GUI only dependencies* * qt4 * qtwebkit *Optional dependency (for online checker)* * libcurl #### Ubuntu *Build tools and CLI/GUI dependencies* ```sh apt-get install git automake autoconf libtool pkg-config make g++ zlib1g-dev libxml2-dev libxslt1-dev liblzma-dev libgcrypt20-dev libsqlite3-dev libevent-dev libjansson-dev ``` Or (less advisable) install the packages contained in buildenv09.zip with ```sh dpkg -i * ``` *MediaArea tools* Go to https://mediaarea.net/MediaConch/downloads/ubuntu.html and download the libmediainfo0, libmediainfo-dev, libzen0 and libzen-dev packages corresponding to your Ubuntu version. Then install them with : ```sh dpkg -i libmediainfo* libzen* ``` *GUI only dependencies* ```sh apt-get install libqt4-dev libqtwebkit-dev ``` *Optional dependency (for online checker)* ```sh apt-get install libcurl4-gnutls-dev ``` #### Fedora *Build tools and CLI/GUI dependencies* ```sh sudo yum install git automake autoconf libtool pkgconfig make gcc-c++ zlib-devel libxml2-devel libxslt-devel sqlite-devel libevent-devel jansson-devel ``` Or (less advisable) install the packages contained in buildenv13.zip with ```sh dnf --allowerasing install * ``` *MediaArea tools* Go to https://mediaarea.net/MediaConch/downloads/fedora.html and download the libmediainfo0, libmediainfo-devel, libzen0 and libzen-devel packages corresponding to your Fedora version and CPU architecture. Then install them with : ```sh sudo yum install libmediainfo*.rpm libzen*.rpm ``` *GUI only dependencies* ```sh sudo yum install qt-devel qtwebkit-devel desktop-file-utils ``` *Optional dependency (for online checker)* ```sh sudo yum install libcurl-devel ``` #### Debian *Build tools and CLI/GUI dependencies* ```sh apt-get install git automake autoconf libtool pkg-config make g++ zlib1g-dev libxml2-dev libxslt1-dev liblzma-dev libgcrypt20-dev libsqlite3-dev libevent-dev libjansson-dev ``` Or (less advisable) install the packages contained in buildenv17.zip with ```sh dpkg -i * ``` *MediaArea tools* Go to https://mediaarea.net/MediaConch/downloads/debian.html and download the libmediainfo0, libmediainfo-dev, libzen0 and libzen-dev packages corresponding to your Debian version. Then install them with : ```sh dpkg -i libmediainfo* libzen* ``` *GUI only dependencies* ```sh apt-get install libqt4-dev libqtwebkit-dev ``` *Optional dependency (for online checker)* ```sh apt-get install libcurl4-gnutls-dev ``` #### OpenSUSE *Build tools and CLI/GUI dependencies* ```sh zypper install git automake autoconf libtool pkgconfig make gcc-c++ zlib-devel libxml2-devel libxslt-devel sqlite3-devel libevent-devel libjansson-devel ``` Or (less advisable) install the packages contained in buildenv21.zip with ```sh zypper install * ``` *MediaArea tools* Go to https://mediaarea.net/MediaConch/downloads/opensuse.html and download the libmediainfo0, libmediainfo-devel, libzen0 and libzen-devel packages corresponding to your OpenSuse version. Then install them with : ```sh rpm -i libmediainfo* libzen* ``` *GUI only dependencies* ```sh zypper install libqt4-devel libQtWebKit-devel update-desktop-files ``` *Optional dependency (for online checker)* ```sh zypper install libcurl-devel ``` ### Build MediaConch CLI #### Use the srcXX.zip and their compile.sh scripts Unzip the corresponding srcXX.zip, and then launch ```sh ./CLI_compile.sh ./Server_compile.sh ./GUI_compile.sh ``` in order to compile, respectively, the CLI, the server and the GUI. #### Build manually from GitHub When you have done all the prerequisite for you configuration, you can build MediaConch. We start with the CLI. ```sh cd $BUILD_DIR git clone https://github.com/MediaArea/MediaConch_SourceCode.git cd MediaConch_SourceCode/Project/GNU/CLI ./autogen.sh ``` ##### Then, under Mac: ```sh ./configure --enable-staticlibs make ``` ##### Under Linux: ```sh ./configure make ``` If you also build ZenLib and MediaInfoLib: ```sh ./configure --enable-staticlibs make ``` Or, with shared ZenLib and MediaInfoLib: ```sh ./configure make export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_DIR/ZenLib/Project/GNU/Library/.libs:$BUILD_DIR/MediaInfoLib/Project/GNU/Library/.libs ``` #### Launch the CLI ```sh ./mediaconch ``` ### Build MediaConch GUI If you have already build the CLI, no need to run git twice. In fact, if you re-run git with an existing MediaConch_SourceCode directory, git will complain and exit. To compile MediaConch GUI under Mac and Linux: ```sh cd $BUILD_DIR git clone https://github.com/MediaArea/MediaConch_SourceCode.git cd MediaConch_SourceCode/Project/Qt ``` ##### Without online checker Run: ```sh ./prepare make ``` Under Mac, or if you also build ZenLib and MediaInfoLib, run: ```sh ./prepare STATIC_LIBS=1 make ``` With shared ZenLib and MediaInfoLib: ```sh ./prepare make export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_DIR/ZenLib/Project/GNU/Library/.libs:$BUILD_DIR/MediaInfoLib/Project/GNU/Library/.libs ``` ##### With online checker You must install the online checker dependencies. Then run: ```sh ./prepare make ``` Under Mac, or if you also build ZenLib and MediaInfoLib, run: ```sh ./prepare STATIC_LIBS=1 make ``` With shared ZenLib and MediaInfoLib: ```sh ./prepare make export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_DIR/ZenLib/Project/GNU/Library/.libs:$BUILD_DIR/MediaInfoLib/Project/GNU/Library/.libs ``` #### Launch the GUI Under Mac: ```sh ./MediaConch.app/Contents/MacOS/MediaConch ``` Under Linux: ```sh ./mediaconch-gui ``` ### Optional : build ZenLib and MediaInfoLib #### ZenLib To compile ZenLib under Mac and Linux: ```sh cd $BUILD_DIR git clone https://github.com/MediaArea/ZenLib.git cd ZenLib/Project/GNU/Library ./autogen.sh ./configure --enable-static make ``` #### MediaInfoLib To compile MediaInfoLib under Mac and Linux: ```sh cd $BUILD_DIR git clone https://github.com/MediaArea/MediaInfoLib.git cd MediaInfoLib/Project/GNU/Library ./autogen.sh ``` ##### Without online checker Run: ```sh ./configure --enable-static make ``` ##### With online checker Under Mac: ```sh ./configure --enable-static --with-libcurl=runtime make ``` Under Linux: You must install the online checker dependencies. Then run: ```sh ./configure --enable-static --with-libcurl make ``` ## Build under Windows You need to install Microsoft Visual Studio 2013. MediaConch/Documentation/0000755000000000000000000000000013216666133014366 5ustar rootrootMediaConch/Documentation/Daemon.md0000644000000000000000000000342013216666133016112 0ustar rootroot## Daemon ### Usage MediaConch uses the non-daemon mode by default. In your configuration, if you set Use_Daemon to true, it will try to connect using it. By default, it will try to bind on "0.0.0.0", port 80. You can change the address using the Daemon\_Address value and the port to bind using Daemon\_Port value. Refer to Config.md for more explanation about the configuration. When the daemon has been started, it will run jobs asynchronously in the background. ### GUI and CLI You will have to configure the CLI or GUI to use the Daemon and specify which Daemon address/port to use. If the CLI/GUI is using the same as the daemon, there's nothing more to do. ### Parameters * -h or --help: Show the help * -v or --version: Show the Daemon version * -c File or --configuration=File: Use the configuration file given by File * --fork=yes: Default. Fork the process and run in background * --fork=no: Do not fork the process and run in forground * -n: Shortcut alias for --fork=no * --compression=[None/ZLib]: Default is ZLib. Use the algorithm or library given to compress (None means no compression) * -cz: Shortcut alias for --compression=ZLib ## API ### Communication The MediaConch daemon uses the protocol HTTP to communicate with the other clients. It uses the REST API to pass the command. See REST.md for more information about the API. ### New clients If you have another need than the one provided by the CLI or GUI, feel free to implement a new one using this API. If you do so, please, send us an email to let us know (https://mediaarea.net/MediaConch/contact.html). ### Restart The daemon is sending the HTTP Header X-App-MediaConch-Instance-ID with its PID. If the daemon is retarted, the client (Web/CLI/GUI/...) has to check if this value has change to restore the PIDMediaConch/Documentation/Config.md0000644000000000000000000000334413216666133016121 0ustar rootroot## Configuration ### File By default, the configuration file will be read from the user's local data. On Linux, it will be in `/home/$USER/.config/MediaConch.rc`. On Windows, it will be in `C:\Users\$USER\AppData\Roaming\MediaConch\MediaConch.rc`. On Mac OS, it will be in `/Users/$USER/Library/Preferences/MediaConch.rc`. ### Usage The format of the configuration file is *JSON*. It should be an array of entries with each entry corresponding to the option wanted. #### Reconized entries * **SQLite\_Path**: give the path where the database should be created, default is the data application path. * **Database\_Enabled**: enable or not the database, default yes. * **Use\_Daemon**: in client mode, do the processing by a daemon or not. * **Daemon\_Address**: in client and daemon mode, give the address where the daemon should bind, default 0.0.0.0. * **Daemon\_Port**: in client and daemon mode, give the port where the daemon should bind, default 80. * **Scheduler\_Max\_Threads**: give the number of cores which process files. * **UI\_Poll\_Request**: set the value of the timer to refresh the UI in millisecond, default is 5000. It must be more than 500 and less than 10000. * **UI\_Database\_Path**: give the path where the database for the GUI is, default is the data application path. * **Plugins**: refers to the plugins section, see Plugins.md. #### Example ``` [ {"Use_Daemon": false}, # Do not use the daemon {"SQLite_Path": "/tmp"}, # Put the Database into the /tmp directory {"Scheduler_Max_Threads": 2}, # Use 2 cores to analyze files {"Plugins": []} # No plugins registered ] ``` #### Note Consider using Scheduler\_Max\_Threads with your computer's real core number. If you use too many, your computer could freeze. MediaConch/Documentation/Plugins.md0000644000000000000000000001145413216666133016336 0ustar rootroot## Plugins ### File The configuration of the plugins can be added in the general configuration of the CLI/GUI/Server. See Config.md for more precision. Also, it is also possible to give the file using the command line (CLI and Server only). ### Usage The format used by this structure is *JSON*. It should be a struct named *Plugins* which contains an array of plugin. ### Reconized entries #### Format plugin ##### VeraPDF * **id**: Id of the plugin * **name**: Has to be *VeraPDF* * **format**: Format given by MediaInfoLib to be used by the plugin. Here, it should be *PDF* * **bin**: Full path to the Command Line Interface * **params**: CLI parameters to be given to Vera PDF CLI ##### DPFManager * **id**: Id of the plugin * **name**: Has to be *DPFManager* * **format**: Format given by MediaInfoLib to be used by the plugin. Here, it should be *TIFF* * **bin**: Full path to the Command Line Interface (version 3.1) * **params**: CLI parameters to be given to DPF Manager CLI (need at least: ["check", "-s", "-f", "xml"]) * **isos**: TIFF standarts to check (could be: "TIAProfileChecker", "TiffITP1ProfileChecker", "TiffITP2ProfileChecker", "TiffITProfileChecker", "TIFF_Baseline_Core_6_0", "TIFF_Baseline_Extended_6_0", "TIFF_EP") ##### PreHook ###### PreHookOutputs * **name**: Name of the output, used in the formatting * **createFile**: If set to true, make the plugin manager to create an output file * **analyze**: Analyze the generated file, default set to true * **outputDir**: Directory where the created file will be put * **outputExt**: Extension of the File created * **outputParams**: CLI parameters to be given for the output file ###### Parameters * **id**: Id of the plugin (mandatory to be set) * **name**: Must be *PreHook* * **bin**: Full path to the Command Line Interface of the command * **formatting**: Command line formatting (following the pattern "$VAR[ $VARXXX]*", $VAR can be $BIN, $INPUTPARAMS, $INPUTFILE, $OUTPUTPARAMS, $OUTPUTFILE, $PARAMS; default is "$BIN $INPUTPARAMS $INPUTFILE $OUTPUTPARAMS $OUTPUTFILE $PARAMS"). In case of multiple outputs, $OUTPUTPARAMS and $OUTPUTFILE must be identified using ":$OUTPUTNAME" ($OUTPUTNAME is the name of the output) * **inputParams**: CLI parameters to be given before the input file * **params**: CLI parameters added after the command * **outputs**: List of PreHookOutputs ##### LogFile * **id**: Id of the plugin * **name**: Has to be *LogFile* * **file**: File name where log are wrote * **level**: verbosity of the log (can be "nothing", "debug", "warning", "error"), default is only error. ### Example ``` {"Plugins": [ { "id": "plugin1", "name": "VeraPDF", "format": "PDF", "bin": "$PATH_TO_VERA_PDF", "params": ["--format", "mrr"] }, { "id": "plugin2", "name": "DPFManager", "format": "TIFF", "bin": "$PATH_TO_DPF_MANAGER", "isos": ["TiffITProfileChecker", "TIFF_Baseline_Core_6_0", "TIFF_EP"], "params": ["check", "-s", "-f", "xml"] }, { "id": "plugin3", "name": "PreHook", "bin": "$PATH_TO_CMD", "formatting": "$BIN $INPUTPARAMS $OUTPUTPARAMS:demo $OUTPUTFILE:demo $INPUTFILE", "inputParams": ["--input"], "params": [], "outputs": [ "name": "demo", "createFile": true, "analyze": true, "outputDir": "/tmp", "outputExt": "mkv", "outputParams": [] ] }, { "id": "ffmpeg_example", "name": "PreHook", "bin": "$PATH_TO_FFMPEG", "formatting": "$BIN $INPUTPARAMS -i $INPUTFILE $OUTPUTPARAMS $OUTPUTFILE", #only one outputs, no need of the name "inputParams": ["-y"], "params": [], "outputs": [ "name": "demo", "createFile": true, "analyze": true, "outputDir": "/tmp", "outputExt": "mkv", "outputParams": ["-vcodec", "ffv1"] ] }, { "id": "plugin5", "name": "LogFile", "file": "/tmp/mediaconch.log", "level": "error" } ] } ``` ### Note * Due to a bug in Linux with the CLI of DPF Manager, consider to use the parameter *-s*. * Right now, only XML is possible for output, so, consider to use *--format xml* with Vera PDF. MediaConch/Documentation/REST.md0000644000000000000000000007247213216666133015501 0ustar rootroot## REST API ### Usage This API is used by the daemon with the others client to communicate. It is used above an HTTP connection. ### History #### Version 1.15 * Update command: * Checker_Report: add mi_inform * Create new command for the checker * Checker_List_MediaInfo_Outputs #### Version 1.14 * Create new command for the checker * Checker_Stop #### Version 1.13 * Update command: * Mediaconch_Watch_Folder: add options in request * Checker_Id_From_Filename: add options in request * Checker_File_Information: add options in result * Use a common error MediaConch_Nok everywhere #### Version 1.12 * Update command: * Checker_Analyze: add a flag to not analyze with MIL #### Version 1.11 * Update command: * Policy_Get: add is_public * Policy_Get: add must_be_public * Policy_Dump: add must_be_public * Policy_Duplicate: add must_be_public * Policy_Duplicate: add dst_user * Policy_Change_Info: add license * Policy_Policy: add license * Checker_Analyze: add array of options for analyze * Create new command for the Policy * Policy_Get_Public_Policies * Policy_Change_Is_Public * create the policy object: * Policy_Public_Policy #### Version 1.10 * Update command: * Checker_Get_Report: add plugins to the command to use * Create new command for the MediaConch * MediaConch_Get_Plugins * MediaConch_Watch_Folder * MediaConch_List_Watch_Folders * MediaConch_Edit_Watch_Folder * MediaConch_Remove_Watch_Folder * Create new structure for the MediaConch * MediaConch_Nok * Create new command namespace: * MediaConch #### Version 1.9 * Create new command for the checker * Checker_Id_From_Filename * Checker_File_information * Update commands of the checker * Checker_Status_result: add more information * Add user to all checker_* command #### Version 1.8 * Add XSL's options in Checker_Get_Report and Checker_Validate * Put the verbosity to options #### Version 1.7 * create the command for policies * XSLT_Policy_Create * Policy_Import * Policy_Save * Policy_Remove * Policy_Duplicate * Policy_Move * Policy_Dump * Policy_Get_Name * Policy_Change_Info * Policy_Change_Type * Policy_Get * Policy_Get_Policies * Policy_Get_Policies_Names_List * Policy_Get_Policies_Count * Policy_Clear_Policies * XSLT_Policy_Rule_Create * XSLT_Policy_Rule_Get * XSLT_Policy_Rule_Edit * XSLT_Policy_Rule_Move * XSLT_Policy_Rule_Delete * create the policy object: * Policy_Policy * XSLT_Policy_Rule * Policy_Error #### Version 1.6 * Use id for policy instead of files * Make scope (checker) for all checker commands * Change the name of create policy from file #### Version 1.5 * Add the create policy from file command #### Version 1.4 * Add the default values for type command #### Version 1.3 * Add verbosity in report request * Add tool in status ok * Add VERAPDF and DPFMANAGER report kinds #### Version 1.2 * Add the List command * Add the Validate command * Add the File_From_Id command #### Version 1.1 * Add the force parameter in the Analyze request. #### Version 1 * API created. * Command: Analyze, Status, Report, Retry, Clear ### API Current API version: $API_VERSION = 1.15 #### Command * MediaConch_Watch_Folder: HTTP POST * MediaConch_List_Watch_Folder: HTTP GET * MediaConch_Edit_Watch_Folder: HTTP POST * MediaConch_Remove_Watch_Folder: HTTP POST * Checker_Analyze: HTTP POST * Checker_Status: HTTP GET * Checker_Report: HTTP POST * Checker_Retry: HTTP PUT * Checker_Clear: HTTP DELETE * Checker_List: HTTP GET * Checker_Validate: HTTP POST * Checker_File_From_Id: HTTP POST * Default_Values_For_type: HTTP GET * Checker_Stop: HTTP POST * XSLT_Policy_Create: HTTP GET * Policy_Import: HTTP POST * Policy_Remove: HTTP GET * Policy_Duplicate: HTTP GET * Policy_Move: HTTP GET * Policy_Dump: HTTP GET * Policy_Save: HTTP GET * Policy_Get_Name: HTTP GET * Policy_Change_Info: HTTP POST * Policy_Change_Type: HTTP POST * Policy_Change_Is_Public: HTTP POST * Policy_Get: HTTP GET * Policy_Get_Policies: HTTP GET * Policy_Get_Public_Policies: HTTP GET * Policy_Get_Policies_Names_List: HTTP GET * Policy_Get_Policies_Count: HTTP GET * Policy_Clear_Policies: HTTP GET * Policy_Create_From_File: HTTP GET #### MediaConch_Nok Structure used when error occurs. ##### Parameters * error: String with the error description * id: Integer, optionnal with an id (file, policy, ...) Example: {"error": "File ID not existing", id: 2} #### MediaConch_Get_Plugins JSON format for the parameters. URL: /$API_VERSION/mediaconch_get_plugins ##### Request Parameters: No parameters for the request ##### Response Parameters: * plugins: Array of String with the Plugins ID * nok: MediaConch_Nok when error occurs #### MediaConch_Watch_Folder JSON format for the parameters. URL: /$API_VERSION/mediaconch_watch_folder ##### Request Parameters: * folder: String with the new directory name to watch * folder_reports: String with the name of the directory where to put the reports of the file analyzed in the watched folders * plugins: Array of String with the plugins ID * policies: Array of String with the policies contents * user: Integer: Use this User ID for the watch folder. If not present, find a unique ID * recursive: Boolean: Check the folder recursively (sub-directory), set to true by default - options: Array of Object of 2 Strings: List of Options to be given to MediaInfoLib ##### Response Parameters: * user: Integer: a unique id of the user for this watch folder or the one given as input * nok: MediaConch_Nok when error occurs #### MediaConch_List_Watch_Folders URI format for the parameters. URL: /$API_VERSION/mediaconch_list_watch_folders ##### Request Parameters: No parameters for the request ##### Response Parameters: * folders: Array of String: List the folders watched * nok: MediaConch_Nok when error occurs #### MediaConch_Edit_Watch_Folder JSON format for the parameters. URL: /$API_VERSION/mediaconch_edit_watch_folder ##### Request Parameters: * folder: String with the old directory watched * folder_reports: String with the name of the directory where to put the reports of the file analyzed in the watched folders ##### Response Parameters: * nok: MediaConch_Nok when error occurs #### MediaConch_Remove_Watch_Folder JSON format for the parameters. URL: /$API_VERSION/mediaconch_remove_watch_folder ##### Request Parameters: * folder: String with the directory to stop to watch ##### Response Parameters: * nok: MediaConch_Nok when error occurs #### Checker_Analyze JSON format for the parameters. URL: /$API_VERSION/checker_analyze ##### Request Parameters: * args: Array of arguments - file: String: Name of the file to analyze - user: Integer: a unique id for the user - id: Integer: a unique id for the request - plugins: Array of Integer: List of Plugins to use (other than format plugins) - options: Array of Object of 2 Strings: List of Options to be given to MediaInfoLib - force: Boolean: force to analyze the file even if registered in database (introduced in v1.1) - mil_analyze: Boolean: force to not analyze with MediaInfoLib ##### Response Parameters: * ok: Array of valid arguments - inId: Integer: id given by the request - outId: Integer: unique id generated by the daemon - create: Boolean: if the file was not registered * nok: Array of MediaConch_Nok when error occurs with ids #### Checker_Status URI format for the parameters. URL: /$API_VERSION/checker_status ##### Request Parameters: - user: Integer: a unique id for the user * List of: - id: Integer: id given by the Analyze command ##### Response Parameters: * ok: Array of valid arguments: - id: Integer: id given by the request - finished: Boolean: if the file is finished to be analyzed - has_error: Boolean: if the file analyze has error (optional, no error if not present) - error_log: String: if the file has error (has_error = true), give the error logs if any - done: Double: Percent done by the analysis - tool: REPORT: give the report tool used to analyze, when it is finished, optionnal (Default is IMPLEMENTATION) (since API v1.3) - generated_id: Array of Integers: ids of files generated, if any. - source_id: Integer: id of the source file if generated by the daemon * nok: Array of MediaConch_Nok when error occurs with ids #### Checker_Report JSON format for the parameters. URL: /$API_VERSION/checker_report ##### Request Parameters: - user: Integer: a unique id for the user * args: Array of arguments - id: Integer: id given by the Analyze command - reports: Array of report kinds - policies_contents: Array of policies contents (Strings) - policies_ids: Array of policies ids (Integer) - display_content: String: display content - display_name: String: display name (HTML, TEXT, XML, MAXML, JSTREE, SIMPLE, CSV) - mi_inform: String: mediainfolib output format - options: Object of strings given to the XSL transformations: Verbosity should be defined here. Example: "options":{"verbosity": "5", "key":"value", ...} ##### Response Parameters: * ok: Structure of the following parameters - report: String: Contain the report corresponding to all requested parameters - valid: Boolean: true if all policies are valid (optionnal, depending on reports kind) * nok: MediaConch_Nok when error occurs #### Checker_Retry JSON format for the parameters. URL: /$API_VERSION/checker_retry ##### Request Parameters: - user: Integer: a unique id for the user - ids: Array of id given by the Analyze command ##### Response Parameters: * ok: Array of Integer: ids of the files analyzed again * nok: MediaConch_Nok when error occurs #### Checker_Clear URI format for the parameters. URL: /$API_VERSION/checker_clear ##### Request Parameters: * List of: - user: Integer: a unique id for the user - ids: Array of integers: ids given by the Analyze command ##### Response Parameters: * ok: Array of Integer: ids of the files removed from Database * nok: MediaConch_Nok when error occurs #### Checker_Stop URI format for the parameters. URL: /$API_VERSION/checker_stop ##### Request Parameters: - user: Integer: a unique id for the user * List of ids: Array of integers: ids given by the Analyze command ##### Response Parameters: * ok: Array of Integer: ids of the files stoped * nok: MediaConch_Nok when error occurs #### Checker_List No Parameter URL: /$API_VERSION/checker_list ##### Request Parameters: - user: Integer: a unique id for the user ##### Response Parameters: * files: Array of files registered - file: Filename of the file - id: Internal id, id to be used by other request * nok: MediaConch_Nok when error occurs #### Checker_Validate JSON format for the parameters. URL: /$API_VERSION/checker_validate ##### Request Parameters: - user: Integer: a unique id for the user * args: Array of arguments - id: Integer: id given by the Analyze command - report: report kind, only POLICY or IMPLEMENTATION are possible - policies_contents: Array of policies contents (Strings) - policies_names: Array of policies names (Strings) - options: Objects with strings (key, value) given to the XSL transformations: Verbosity should be defined here. Example: "options":{"verbosity": "5", "key":"value", ...} ##### Response Parameters: * ok: Structure of the following parameters - id: Integer: Id given by the request - valid: Boolean: true if all policies are valid for this file * nok: MediaConch_Nok when error occurs #### Checker_File_From_Id JSON format for the parameters. URL: /$API_VERSION/checker_file_from_id ##### Request Parameters: - user: Integer: a unique id for the user - id: Integer: id given by the Analyze command ##### Response Parameter: * file: String: File corresponding to the id, left empty if id not matching * nok: MediaConch_Nok when error occurs #### Checker_Id_From_Filename JSON format for the parameters. URL: /$API_VERSION/checker_id_from_filename ##### Request Parameters: - user: Integer: a unique id for the user - filename: String: Requested filename for id - options: Array of String: Options associated to the analyze ##### Response Parameter: * id: Integer: id of the file, same value as the one from analyze command * nok: MediaConch_Nok when error occurs #### Checker_File_Information JSON format for the parameters. URL: /$API_VERSION/checker_file_information ##### Request Parameters: - user: Integer: a unique id for the user - id: Integer: id given by the Analyze command - options: Array of String: Options associated to the analyze ##### Response Parameter: * filename: String: File corresponding to the id * file_last_modifciation: String: Time of the file last modification, correspond to the creation time for generated file * generated_id: Integer: id of the last file generated, if any * source_id: Integer: id of the source file if generated by the daemon * generated_time: Integer: Time in milliseconds to generate this file * generated_log: String: Output log when generating this file (stdout) * generated_error_log: String: Output error log when generating this file (stderr) * analyzed: Boolean: If this file is already analyzed * has_error: Boolean: if the file analyze has error (optional, no error if not present) * error_log: String: if the file has error (has_error = true), give the error logs if any * nok: MediaConch_Nok when error occurs #### Default_Values_For_type URI format for the parameters. URL: /$API_VERSION/default_values_for_type ##### Request Parameters: * type: String: name of the type wanted * field: String: name of the field wanted ##### Response Parameters: * values: Array of values (String) * nok: MediaConch_Nok when error occurs #### XSLT_Policy_Create ##### Request Parameters: URI format for the parameters. URL: /$API_VERSION/xslt_policy_create ##### Request Parameters: user: User ID parent_id: Policy ID of the parent type: Policy operator ("and", "or"; default is "and") ##### Response Parameters: - if command is ok, return an object with the id of the created policy: '{"XSLT_POLICY_CREATE_RESULT": {"id": 0}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_CREATE_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Import JSON format for the parameters. URL: /$API_VERSION/policy_import ##### Request Parameters: user: User ID xml: XML corresponding to the policy {\"POLICY_IMPORT\": {\"xml\": \"$XML_DATA\"}} ##### Response Parameters: - if command is ok, return an object with the id of the created policy: '{"POLICY_IMPORT_RESULT": {"id": 0}}' - otherwise, return a MediaConch_Nok {"POLICY_IMPORT_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Remove URI format for the parameters. URL: /$API_VERSION/policy_remove?id=0 ##### Request Parameters: user: User ID id: Policy ID to remove ##### Response Parameters: - If command is ok, return an Empty object '{"POLICY_REMOVE_RESULT": {}}' - Otherwise, return a MediaConch_Nok {"POLICY_REMOVE_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Dump URI format for the parameters. URL: /$API_VERSION/policy_dump?id=0&must_be_public=true ##### Request Parameters: user: User ID id: Policy ID to dump must_be_public: Return an error if the policy is not public ##### Response Parameters: - If command is ok, return an object with the XML of the policy '{"POLICY_DUMP_RESULT": {"xml": "POLICY_XML"}}' - Otherwise, return a MediaConch_Nok {"POLICY_DUMP_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Save URI format for the parameters. URL: /$API_VERSION/policy_save?id=0 ##### Request Parameters: user: User ID id: Policy ID to save ##### Response Parameters: - If command is ok, return an Empty object '{"POLICY_SAVE_RESULT": {}}' - Otherwise, return a MediaConch_Nok {"POLICY_SAVE_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Duplicate URI format for the parameters. URL: /$API_VERSION/policy_duplicate?id=0 ##### Request Parameters: user: User ID id: Policy ID to duplicate dst_policy_id: Policy ID used as parent (default is -1, root node) dst_user: Copy the policy to this user ID (optional, if not present, copy to the "user") must_be_public: Return an error if the policy is not public ##### Response Parameters: - If command is ok, return an object with the new ID '{"POLICY_DUPLICATE_RESULT": {"id": 0}}' - Otherwise, return a MediaConch_Nok {"POLICY_DUPLICATE_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Move URI format for the parameters. URL: /$API_VERSION/policy_move?id=0&dst_policy_id=41 ##### Request Parameters: user: User ID id: Policy ID to move (duplicate + delete) dst_policy_id: Policy ID used as new parent (default is -1, root node) ##### Response Parameters: - If command is ok, return an object with the new ID '{"POLICY_MOVE_RESULT": {"id": 42}}' - Otherwise, return a MediaConch_Nok {"POLICY_MOVE_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Get_Name URI format for the parameters. URL: /$API_VERSION/policy_get_name?id=0 ##### Request Parameters: user: User ID id: Policy ID to retrieve information ##### Response Parameters: - If command is ok, return an object with the name '{"POLICY_GET_NAME_RESULT": {"name": "New policy"}}' - Otherwise, return a MediaConch_Nok {"POLICY_GET_NAME_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Change_Info JSON format for the parameters. URL: /$API_VERSION/policy_change_info" ##### Request Parameters: user: User ID id: Policy ID to retrieve information name: New name for the policy description: New description for the policy license: New license for the policy '{"POLICY_CHANGE_INFO":{"id": 0, "name": "changed name", "description": "changed description", "license": "MIT"}}' ##### Response Parameters: - If command is ok, return an empty object '{"POLICY_CHANGE_INFO_RESULT": {}}' - Otherwise, return a MediaConch_Nok {"POLICY_CHANGE_INFO_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Change_Type JSON format for the parameters. URL: /$API_VERSION/policy_change_type" ##### Request Parameters: user: User ID id: Policy ID to retrieve information type: New type for the policy '{"POLICY_CHANGE_TYPE":{"id": 0, "type": "or"}}' ##### Response Parameters: - If command is ok, return an empty object '{"POLICY_CHANGE_TYPE_RESULT": {}}' - Otherwise, return a MediaConch_Nok {"POLICY_CHANGE_TYPE_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Change_Is_Public JSON format for the parameters. URL: /$API_VERSION/policy_change_is_public" ##### Request Parameters: user: User ID id: Policy ID to retrieve information (must be a root policy) is_public: Boolean to set the policy to public or not '{"POLICY_CHANGE_IS_PUBLIC":{"id": 0, "is_public": true}}' ##### Response Parameters: - If command is ok, return an empty object '{"POLICY_CHANGE_IS_PUBLIC_RESULT": {}}' - Otherwise, return a MediaConch_Nok {"POLICY_CHANGE_IS_PUBLIC_RESULT": {"nok": {\"error\":\"ERROR\"}}} #### Policy_Get URI format for the parameters. URL: /$API_VERSION/policy_get?id=0&format=JSTREE ##### Request Parameters: user: User ID id: Policy ID format: Output format, can be "JSTREE" or "JSON" must_be_public: Return an error if the policy is not public ##### Response Parameters: - if command is ok, if format is JSON, return a Policy_Policy: '{"POLICY_GET_RESULT": {"policy": {"type": "and", "id": 0, "description": "", "parent_id": -1, "name": "New policy", "is_system": false, "children":[]}}}' - if command is ok, if format is JSTREE, return a string with policy tree: '{"POLICY_GET_RESULT": "{\"policyTree\": {\"type\": \"p\", \"text\": \"New policy\", \"data\": {\"kind\":\"XSLT\",\"policyId\": 0, \"description\": \"\", \"parent_id\": -1, \"isEditable\": true,\"type\":\"or\"},\"children\":[]}}"}' - otherwise, return a MediaConch_Nok {"POLICY_GET_POLICIES_COUNT_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Get_Policies_Count URI format for the parameters. URL: /$API_VERSION/policy_get_policies_count ##### Request Parameters: user: User ID ##### Response Parameters: - if command is ok, return an object with the number of policies for the user in size: '{"POLICY_GET_POLICIES_COUNT_RESULT": {"size": 0}}' - otherwise, return a MediaConch_Nok {"POLICY_GET_POLICIES_COUNT_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Get_Policies URI format for the parameters. URL: /$API_VERSION/policy_get_policies?id=0&id=1 ##### Request Parameters: user: User ID id: Policy ID (can be cumulated), if not present, return all policies format: Output format, can be "JSTREE" or "JSON" ##### Response Parameters: - if command is ok, format is "JSON", return an object with an array of policies (Policy_Policy): '{"POLICY_GET_POLICIES_RESULT": {"policies": []}}' - if command is ok, format is "JSTREE", return an object with a jstree string policies: '{"POLICY_GET_POLICIES_RESULT": {"policiesTree": "[]"}}' - otherwise, return a MediaConch_Nok {"POLICY_GET_POLICIES_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Get_Public_Policies URI format for the parameters. URL: /$API_VERSION/policy_get_public_policies ##### Request Parameters: - No parameters for Policy_Get_Public_Policies ##### Response Parameters: - if command is ok, return an object with an array of public policies (Policy_Public_Policy): '{"POLICY_GET_PUBLIC_POLICIES_RESULT": {"policies": []}}' - otherwise, return a MediaConch_Nok {"POLICY_GET_POLICIES_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Get_Policies_Names_List URI format for the parameters. URL: /$API_VERSION/policy_get_policies_names_list ##### Request Parameters: user: User ID ##### Response Parameters: - if command is ok, return an object with an array of policies ids and names: '{"POLICY_GET_POLICIES_NAMES_LIST_RESULT": {"policies": [{\"id\":0,\"name\":\"policy name\"}]}}' - otherwise, return a MediaConch_Nok {"POLICY_GET_POLICIES_NAMES_LIST_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Clear_Policies URI format for the parameters. URL: /$API_VERSION/policy_clear_policies ##### Request Parameters: user: User ID ##### Response Parameters: - if command is ok, return an empty object: '{"POLICY_CLEAR_POLICIES_RESULT": {}}' - otherwise, return a MediaConch_Nok {"POLICY_CLEAR_POLICIES_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Create_From_File URI format for the parameters. URL: /$API_VERSION/xslt_policy_create_from_file ##### Request Parameters: * user: Integer: User ID * id: Integer: Id given by analyze for a file ##### Response Parameters: * policy_id: Integer with the ID of the created XSL policy * nok: MediaConch_Nok when error occurs #### XSLT_Policy_Rule_Create URI format for the parameters. URL: /$API_VERSION/xslt_policy_rule_create?policy_id=0 ##### Request Parameters: user: User ID policy_id: Policy ID of the parent (XSLT) policy ##### Response Parameters: - if command is ok, return an object with the id of the created rule: '{"XSLT_POLICY_RULE_CREATE_RESULT": {"id": 0}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_CREATE_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Rule_Get URI format for the parameters. URL: /$API_VERSION/xslt_policy_rule_get?policy_id=0&id=0 ##### Request Parameters: user: User ID policy_id: Policy ID of the parent (XSLT) policy id: Rule ID of the rule wanted ##### Response Parameters: - if command is ok, return a XSLT_Policy_Rule: '{"XSLT_POLICY_RULE_GET_RESULT": {"rule": {"field": "", "id": 0, "occurrence": -1, "name": "New Rule", "ope": "", "tracktype": "", "value": ""}}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_CREATE_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Rule_Edit JSON format for the parameters. URL: /$API_VERSION/xslt_policy_rule_edit ##### Request Parameters: user: User ID policy_id: Policy ID of the parent (XSLT) policy rule: Contains a XSLT_Policy_Rule object, use the "id" value to find the correct rule '{"XSLT_POLICY_RULE_EDIT": {"rule": {"field": "Format", "id": 0, "occurrence": -1, "name": "General Format is Matroska", "ope": "is_equal", "tracktype": "General", "value": "Matroska"}}}' ##### Response Parameters: - if command is ok, return an empty object: '{"XSLT_POLICY_RULE_EDIT_RESULT": {}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_EDIT_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Rule_Duplicate URI format for the parameters. URL: /$API_VERSION/xslt_policy_rule_duplicate?policy_id=0&id=0 ##### Request Parameters: user: User ID policy_id: Policy ID of the parent (XSLT) policy id: Rule ID of the rule to duplicate dst_policy_id: Policy ID used as parent (default is -1, root node) ##### Response Parameters: - if command is ok, return an object with the new Rule ID: '{"XSLT_POLICY_RULE_DUPLICATE_RESULT": {"id": 17}}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_DUPLICATE_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Rule_Move ##### Request Parameters: URI format for the parameters. URL: /$API_VERSION/xslt_policy_rule_move?policy_id=0&id=0&dst_policy_id=42 user: User ID policy_id: Policy ID of the parent (XSLT) policy id: Rule ID of the rule to move dst_policy_id: Policy ID used as new parent (default is -1, root node) ##### Response Parameters: - if command is ok, return an object with the new Rule ID: '{"XSLT_POLICY_RULE_MOVE_RESULT": {"id": 17}}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_MOVE_RESULT": {"nok": {"error":"ERROR"}}} #### XSLT_Policy_Rule_Delete URI format for the parameters. URL: /$API_VERSION/xslt_policy_rule_delete?policy_id=0&id=0 ##### Request Parameters: user: User ID policy_id: Policy ID of the parent (XSLT) policy id: Rule ID of the rule to delete ##### Response Parameters: - if command is ok, return an empty object: '{"XSLT_POLICY_RULE_DELETE_RESULT": {}}' - otherwise, return a MediaConch_Nok {"XSLT_POLICY_RULE_DELETE_RESULT": {"nok": {"error":"ERROR"}}} #### Policy_Policy Policy Object Parameters: * id: ID of the policy * parent_id: ID of the parent policy (optional, root is -1) * name: string containing the name of the policy (optional) * kind: string containing the policy kind ("UNKNOWN" or "XSLT") * type: string containing the policy operator (optional; value: "and", "or"; default is "and") * is_system: boolean set to true if it is a system policy * is_public: boolean set to true if it is a public policy * description: string containing the description of the policy (optional) * license: string containing the license of the policy (optional) * children: list of children of the policy (sub-policies, rules) {"id":0, "parent_id":-1, "name": "NAME", "description":"", "type":"and", "children":[]} #### XSLT_Policy_Rule Policy Object Parameters: * id: ID of the rule inside the policy * name: Name of the rule * tracktype: Track type of the rule * field: Field of the rule * scope: Scope of the rule, mt for MediaTrace, nothing for MediaInfo * occurrence: Number of occurrence of the field * ope: Operator of the Rule * value: Value of the rule {"id":0, "name": "NAME", "tracktype": "TYPE", "field":"FIELD", "occurrence":-1, "ope":"is_existing", value=""} #### Policy_Public_Policy Public Policy Object Parameters: * id: ID of the policy * user: ID of the user owning this policy * name: string containing the name of the policy (optional) * description: string containing the name of the policy (optional) {"id":0, "user":-1, "name": "NAME", "description":""} #### Policy_Error Policy Object Parameters: * error: string corresponding to the error {\"error\"=\"ERROR\"} #### Report kinds * NO\_REPORT: 0 * POLICY: 1 * IMPLEMENTATION: 2 * MEDIAINFO: 3 * MEDIATRACE: 4 * VERAPDF: 5 * DPFMANAGER: 6 #### Error reason * NO\_REASON 0 * FILE\_NOT\_EXISTING 1 * ID\_NOT\_EXISTING 2 * NOT\_READY 3 MediaConch/CONTRIBUTING.md0000644000000000000000000001175113216666133014013 0ustar rootroot# Contribution Guide ## Rules for contributing feedback The MediaArea project team welcomes contributions and feedback from contributing and/or interested institutions and individuals via issue tracking, various open source communication and social media channels, and other sources of public community outreach. Open source feedback and participation of all kinds and from any interested party or institution is encouraged and can be made through opening an issue on GitHub or contacting the team directly at info@mediaarea.net. ## Rules for contributing code MediaArea welcomes and encourages open source contributions to the software throughout the development stage. To participate and further the MediaConch project as it develops, contributions and additions can be made to the code and/or documentation residing within the project’s Github repository. Contributions and commits should be directed to Github and written as a branch submitted as a pull request. Individual commits should be created for each change and alteration made to the relevant file or code. All contributions should be clear, concise, and follow the standardized, applicable coding and naming conventions within the each language's style guidelines. - Fork the initial project to your own account - Clone your own repository on your computer - Check out a new branch with an explicit name corresponding to the bug corrected or feature added - Make a changes and add commit(s) - Update your local repository with the source repository in case features have been added while you were working - Resolve conflicts if present - Send the change to a branch in your repository - On the Github website, go to your repository, change the branch to the new one created and create a new Pull Request with the changes (after reviewing to ensure no errors will be sent) - Wait for someone approve and merge the changes ### File Naming Conventions In regards to the required conventions for commit messages on the open source platform, all messages should be concise and clear and effectively summarize each contribution to the project. If more than one substantial change was made, users should not create one commit message to cover all feedback and changes. New individual commits should be made to cover each individual change made to the relevant file being altered. Effective commit messages, covering context of a change, will enable MediaArea to work within a speedier, more efficient review process and better alter development around this feedback. ### Guidelines for Qt/C++ code Manageability and productivity within the C++ coding atmosphere will be preserved by upholding to the Style and Consistency rules necessary for creating a readable and controlled code base. Attention to detail will be given to the rules governing the creation of a workable open source code in the following areas: - Headers - Scoping - Classes - Naming - Comments - Formatting - Specific Features/Abilities of C++ - Relevant Exceptions For a detailed account of specific rules, examples and guidelines for each section, please refer to the Google guide on C++: http://google-styleguide.googlecode.com/svn/trunk/cppguide.html ### Rules for Qt/C++ code MediaConch graphical user interface is programmed in C++ and uses the Qt application framework. Guideline for Qt is as follows: Attention to detail will be given to the following rules/guidelines: Indentation: - Four spaces to should be given for indentation (not tabs) Variables: - Each variable should be declared on separate lines, only at the moment they are needed - Avoid short names, abbreviations and single character names (only used for counters and temporaries) - Follow the case conventions for naming Whitespaces: - Use only one blank line and use when grouping statements as suited. Do not put multiple statements onto one line. - Also use a new line for the body of a control flow statement - Follow the specific single space conventions when needed Braces: - Attached braces should be used (follow guidelines for rules and exceptions) - Curly braces are used only when the body of a conditional statement contains 1+ line or when body of a conditional statement is empty (follow guidelines for rules and exceptions) Parenthesis: - Parenthesis should be used to group expressions Switch Statements and Jump Statements: - Case labels are in the same column as the switch - Each case should have a break statement at the end or a comment to indicate there is no intentional break - Do not use ‘else’ at the end of Jump Statements unless for symmetry purposes Line Breaks: - Lines should kept under 100 characters - Wrap text if necessary - Use commas at the end of wrapped text and operators at the beginning of new lines Exceptions: - Always try to achieve functional, consistent and readable code. When code does not look good, exceptions to the rules may pertain to fixing this situation. For more specific rules, examples, exceptions and guidelines, please refer to the Qt Coding Style guide: http://qt-project.org/wiki/Qt_Coding_StyleMediaConch/History_GUI.txt0000644000000000000000000002371013216666133014466 0ustar rootrootNotes : ------- + Added - Deleted x Correction #number is the identifier of bug report (B), requested feature (F) or patch (P) bug reports and feature request are here : https://github.com/MediaArea/MediaConch_SourceCode Version 17.12, 2017-12-21 -------------- Endianness and Sign report for PCM Matroska tracks Support of external time code tracks (.qtc) in MOV Support of file names >64 chars long or non ASCII for referenced files in MOV JPEG 2000: Support of IMF profiles Fixed wrong color range info Matroska I630, "Input is not proper UTF-8" message with some MOV files Version 17.11, 2017-11-22 -------------- Formatted MediaInfo display Text and EBUCore 1.8 (XML and JSON) reports available for download in MediaInfo display Improved Matroska video frame rate detection Support of BWF (bext) loudness info Support of MOV HDR metadata Support of PCM endianess in Matroska files Several minor fixes Version 17.08, 2017-09-11 -------------- FFV1: fix false positive about FFV1 slice_x error when slice_w>slice_h Clarifcation about license of some third party library Version 17.07, 2017-08-08 -------------- Add EBML-MINVER-COHERANT and EBML-MAXVER-COHERANT tests MediaConch is now directly integrated in Fedora repository Version 17.06, 2017-06-30 -------------- "Full parsing" option Internal database viewer Policy column in checker was sometimes displaying "fail" even if test was passing Ubuntu 17.04 packages More Matroska checks More detailed FFV1 errors See https://github.com/MediaArea/groundtruth/blob/master/matroska/README.md for more information Version 17.05, 2017-06-01 -------------- Add MediaConch to Mac App Store Use OS native dialogs instead of those from Qt Display login status in settings page and allow to logout Fixed broken XML output display add FFV1-VALID-VERSION, EBML-ELEMENT-VALID-RANGE, NO-JUNK-IN-FIXEDSIZE-MATROSKA, EBML-ELEM-UNKNOWN-SIZE tests deprecate MKV-VALID-BOOLEANS test fixes to MKV-NUMERICAL-TAG test Version 17.04, 2017-05-04 -------------- Better support of some broken Matroska files (high EBMLMaxSizeLength, padding before start of EBML) Was sometimes displaying "Bit depth: Bit0" when bit depth is unknown in Matroska FFV1 PixelAspectRatio was an integer, switched to 3-digit rational Several small bug fixes and small performance optimizations Version 17.03, 2017-03-31 -------------- Analyze attachments in Matroska files Reduce size of Matroska trace Few small FFV1 parsing improvements Checker: js refactoring, improve display of results, performance improvements Several small bug fixes Version 17.02, 2017-02-28 -------------- New policy example (TN2162) Fix incorrect namespaces in schemaLocation (Thanks to kimec) Report refactoring Flipping between pages removed Several minor FFV1 related bug fixed Support of V_FFV1 codec identifier Fix Qt 5.7+ webengine support in Matroska Version 17.01.1, 2017-02-02 -------------- Fix a performance regression in the matroska parser Version 17.01, 2017-01-31 ------------- Less verbose output by default (use " -ft" for old behavior) New display templates "Simple" and "CSV" Support of newest version of DPFManager (TIFF plugin) and VeraPDF (PDF plugin) Store implementation report in database (no need to run it again at relaunch) Policy editor: option for creating policy from a file Policy editor: split between Profile and Level Checker page: jump to the page containing the file to analyze Checker page: scroll to the top of the results when page is changed Checker page: add reload analyze button (force analyze) Checker page: reduce font size of jstree MediaInfo and MediaTrace Several small bug fixes Version 16.12, 2016-12-31 ------------- Push policies to MCO (public or private) Import policies from MCO UI improvements Better handling of errors Fix adding 100+ files for analyze Fixes Version 16.11, 2016-11-30 ------------- Publish a policy to MediaConchOnline public policies MediaTrace optimization for Matroska Fixed parsing of FFV1 v0/v1 Minor UI fixes Improve support of plugins Version 16.10, 2016-10-31 ------------- Update implementation tests, policies and displays Public policies page Handle latest versions of VeraPDF and DPF Manager FFmpeg plugin Watch folder plugin Fixer (see https://mediaarea.net/MediaConch/fixity.html ) Several minor fixes Version 16.09, 2016-09-30 ------------- New policy format to allow complex policies Update example policies and displays New policy editor to build complex policies Policy rules can use MediaTrace Handling of FFV1 16-bit bitdepth (YUV and RGB) Support of Matroska FieldOrder, MatrixCoefficients, BitsPerChannel, Range, TransferCharacteristics, Primaries new elements Stream count policy test (in General section) Version 16.08, 2016-08-31 ------------- Policy Editor: close message when user change of policy/rule Checker: remove a node is not saved Checker: fix handling of files with special chars Add ctrl-q shortcut to quit Better handling of user path Version 16.07, 2016-07-29 ------------- New policy editor Minor fixes Version 16.06, 2016-06-30 ------------- Create a policy from MediaInfo report Revisited HTML report, more compact and with a summary per test Revisited Display window Minor UI fixes on the main window Matroska files with CodecPrivate element before CodecID element where not always correctly parsed Performance improvements Version 16.05, 2016-05-31 ------------- MediaConch XML format v0.2 Improved Matroska tests Improved HTML display FFV1 parsing speed improvement Updated settings display Remember last policy and display directories List of values for several elements in the policy editor Option for applying a policy to all open files Code refactoring of the user interface Minor UI fixes Version 16.04, 2016-04-29 ------------- Merge of "Checker" and "Results" pages in one page as in MediaConchOnline Checker page new design, based on MediaConchOnline one Add some settings (default policy, default display, default path for file open) Remember the last policy used, the last display used, the last path used FFV1: display of the trace of the slice header Check a directory recursively Fix: display correctly information even if the file disappeared (renamed / not accessible) Minor UI fixes Version 16.03, 2016-03-31 ------------- Verbosity selection Improved free text editor Support of plugins (VeraPDF and DPF Manager) Bugfixes Version 16.02, 2016-02-29 ------------- New page for the results (analyze and update in background, delete/add jobs during the processing of the queue) GUI usage is saved and restored when it is restarted Dynamic selection of the policy and the display format in the policy viewer Dynamic selection of the display format in the implementation viewer CAVPP access and preservation policy sets Update of implementation checker tests, including some FFV1 checks Expanded REST API of the server Version 16.01, 2016-01-27 ------------- More Matroska validation tests Improved reports Verbosity option MediaConch server, with a REST API MediaConch CLI and GUI can communicate with MediaConch server Support of Qt 5.6 (QtWebKit dependancy is replaced by Qt QtWebEngine dependancy) Matroska: CRC-32 validation Matroska: support of padding/junk at the start of a segment Matroska: trace is activated for all elements (but report is still based on the first element met) Matroska: add an intermediate level in the trace for the raw stream parser Visual Studio 2015 project files Version 15.12, 2015-12-31 ------------- New icon Database support (speed improvement: file is parsed once, then policies are applied to the pre-analyzed content) More explicit licences (MediaConch and MediaInfo library are GPLv3+ and MPLv2+, list of third party libraries and their licences) Matroska: negative timecodes were not correctly handled Better support of non-English filenames Display format is applied also on invalid files Implementation tests now load logic from an XML representation of the Matroska EBML Schema Implementation tests on valid parent elements, element multiplicity, mandated child elements MediaTrace now documents the parser used for raw streams within Matroska. Sync tests with latest Matroska/EBML draft specifications. Version 15.11, 2015-11-30 ------------- Detection of truncated Matroska files Support of MKVMerge statistics tags (duration frame count, stream size, bit rate) per track Count of subtitle elements Frame rate detection algorithm revisited Showing precision of 1/1.001 frame rates (e.g. "23.976 (24000/1001) fps" and "23.976 (23976/1000) fps") Version 15.10, 2015-11-02 ------------- Implementation checker with some EBML tests New set of default Policy reports About box and Help documentation added More coherent list of options MediaTrace UI changed, with a grid (offset on the left, value on the right) MediaInfo report UI MediaInfo XML export Policy XSL editor updated Display XSL import / export Text/HTML/XSL display examples Several bug fixes Version 15.09, 2015-10-02 ------------- Design of the report is changed (similar to MediaConchOnline) Examples of policies provided by default Support of XSLT policies Drag and drop of several files MediaTrace UI Save of MediaTrace output in XML format Version 15.08, 2015-08-31 ------------- Improved FFV1 slice analysis Trace feature: XML malformed with Flags items (hotfix, flags meaning disabled in XML output) Trace feature: XML malformed with some MP4 files Trace feature: XML duplicated attributes Trace feature: versioned xsd, creating library name and version Version 15.07, 2015-08-06 ------------- Improved FFV1 slice analysis (currently activated only for 1st frame) Improved Schematron file editor Version 15.06, 2015-06-30 ------------- Basic Schematron validator Basic Schematron file editor Version 15.05, 2015-05-31 ------------- Basic hard-coded policy checker (must be Matroska with FFV1 protected by CRC) Info tool (Text or XML) Trace tool (Text or XML) MediaConch/.appveyor.yml0000644000000000000000000000175013216666133014226 0ustar rootrootconfiguration: - Release platform: - Win32 - x64 before_build: - cmd: git -C .. clone -q https://github.com/MediaArea/zlib.git - cmd: git -C .. clone -q https://github.com/MediaArea/libxml2.git - cmd: git -C .. clone -q https://github.com/MediaArea/libxslt.git - cmd: git -C .. clone -q https://github.com/MediaArea/libevent.git - cmd: git -C .. clone -q https://github.com/MediaArea/jansson.git - cmd: git -C .. clone -q https://github.com/MediaArea/ZenLib.git - cmd: git -C .. clone -q https://github.com/MediaArea/MediaInfoLib.git - ps: >- If ($Env:PLATFORM -Eq "Win32") { perl -p '-i.bak' -e 's/..\\..\\..\\..\\Qt5.6-msvc2015\\5.6\\msvc2015/C:\\Qt\\5.7\\msvc2015/g' Project\MSVC2015\GUI\MediaConch_GUI.vcxproj } else { perl -p '-i.bak' -e 's/..\\..\\..\\..\\Qt5.6-msvc2015_64\\5.6\\msvc2015_64/C:\\Qt\\5.7\\msvc2015_64/g' Project\MSVC2015\GUI\MediaConch_GUI.vcxproj } build: project: Project\MSVC2015\MediaConch.sln verbosity: quiet MediaConch/Qt_Licenses/0000755000000000000000000000000013216666133013766 5ustar rootrootMediaConch/Qt_Licenses/qtcore-attribution-qbig5codecs.html0000644000000000000000000000500213216666133022676 0ustar rootroot Text Codecs: Big5, Big5-HKSCS

Text Codecs: Big5, Big5-HKSCS

The Big5 codecs (QBig5Codec, QBig5hkscsCodec) provide conversion to and from the Big5 encodings.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qbig5codec.cpp.

Copyright (C) 2000  Ming-Che Chuang
Copyright (C) 2001, 2002  James Su, Turbolinux Inc.
Copyright (C) 2002  WU Yi, HancomLinux Inc.
Copyright (C) 2001, 2002  Anthony Fok, ThizLinux Laboratory Ltd.

BSD 2-clause "Simplified" License.

Copyright (C) 2000  Ming-Che Chuang
Copyright (C) 2001, 2002  James Su, Turbolinux Inc.
Copyright (C) 2002  WU Yi, HancomLinux Inc.
Copyright (C) 2001, 2002  Anthony Fok, ThizLinux Laboratory Ltd.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-chrome-custom-tabs-example-and-usage.html0000644000000000000000000002406613216666133027747 0ustar rootroot Chrome Custom Tabs - Example and Usage

Chrome Custom Tabs - Example and Usage

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-boost.html0000644000000000000000000000435313216666133024333 0ustar rootroot Boost

Boost

Boost provides free peer-reviewed portable C++ source libraries.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/libboost.

Project Homepage

Copyright (c) Boost developers

Boost Software License 1.0.

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-usrsctp.html0000644000000000000000000000377413216666133022446 0ustar rootroot usrsctp

usrsctp

Project Homepage

(Copied from the COPYRIGHT file of
https://code.google.com/p/sctp-refimpl/source/browse/trunk/COPYRIGHT)
--------------------------------------------------------------------------------

Copyright (c) 2001, 2002 Cisco Systems, Inc.
Copyright (c) 2002-12 Randall R. Stewart
Copyright (c) 2002-12 Michael Tuexen
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-wds.html0000644000000000000000000006465213216666133021542 0ustar rootroot WDS

WDS

Project Homepage

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtwebengine-3rdparty-hardware-composer-plus.html0000644000000000000000000000407513216666133025341 0ustar rootroot Hardware Composer Plus

Hardware Composer Plus

Project Homepage

// Copyright 2014 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-linux-syscall-support.html0000644000000000000000000000404713216666133025256 0ustar rootroot linux-syscall-support

linux-syscall-support

Project Homepage

// Copyright 2015 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-qjiscodec.html0000644000000000000000000000430313216666133022455 0ustar rootroot Text Codec: ISO 2022-JP (JIS)

Text Codec: ISO 2022-JP (JIS)

The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qjiscodec.cpp.

Copyright (C) 1999 Serika Kurusugawa.

BSD 2-clause "Simplified" License.

Copyright (C) 1999 Serika Kurusugawa, All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-pcre2.html0000644000000000000000000001023313216666133021523 0ustar rootroot PCRE2

PCRE2

The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.

Optionally used in Qt Core (QRegularExpression). Configure with -system-pcre or -no-pcre to avoid.

The sources can be found in qtbase/src/3rdparty/pcre2.

Project Homepage, upstream version: 10.22

Copyright (c) 1997-2016 University of Cambridge
Copyright (c) 2009-2016 Zoltan Herczeg
Copyright (c) 2007-2012 Google Inc.
Copyright (c) 2013-2013 Tilera Corporation (jiwang@tilera.com)

BSD 3-clause "New" or "Revised" License.

PCRE2 LICENCE
-------------

PCRE2 is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

Release 10 of PCRE2 is distributed under the terms of the "BSD" licence, as
specified below. The documentation for PCRE2, supplied in the "doc"
directory, is distributed under the same terms as the software itself. The data
in the testdata directory is not copyrighted and is in the public domain.

The basic library functions are written in C and are freestanding. Also
included in the distribution is a just-in-time compiler that can be used to
optimize pattern matching. This is an optional feature that can be omitted when
the library is built.


THE BASIC LIBRARY FUNCTIONS
---------------------------

Written by:       Philip Hazel
Email local part: ph10
Email domain:     cam.ac.uk

University of Cambridge Computing Service,
Cambridge, England.

Copyright (c) 1997-2016 University of Cambridge
All rights reserved.


PCRE2 JUST-IN-TIME COMPILATION SUPPORT
--------------------------------------

Written by:       Zoltan Herczeg
Email local part: hzmester
Emain domain:     freemail.hu

Copyright(c) 2010-2016 Zoltan Herczeg
All rights reserved.


STACK-LESS JUST-IN-TIME COMPILER
--------------------------------

Written by:       Zoltan Herczeg
Email local part: hzmester
Emain domain:     freemail.hu

Copyright(c) 2009-2016 Zoltan Herczeg
All rights reserved.


THE "BSD" LICENCE
-----------------

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of any
      contributors may be used to endorse or promote products derived from this
      software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

End
MediaConch/Qt_Licenses/qtwebengine-3rdparty-strongtalk.html0000644000000000000000000000365713216666133023133 0ustar rootroot Strongtalk

Strongtalk

Project Homepage

Copyright (c) 1994-2006 Sun Microsystems Inc.
All Rights Reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

- Redistribution in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

- Neither the name of Sun Microsystems or the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-qeventdispatcher-cf.html0000644000000000000000000000465613216666133024463 0ustar rootroot QEventDispatcher on macOS

QEventDispatcher on macOS

Implementation of QAbstractEventDispatcher for macOS.

Used in Qt Core on macOS.

The sources can be found in qtbase/src/corelib/kernel/qeventdispatcher_cf_p.h.

Copyright (c) 2007-2008, Apple, Inc.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2007-2008, Apple, Inc.

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice,
    this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.

  * Neither the name of Apple, Inc. nor the names of its contributors
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtgui-attribution-libjpeg.html0000644000000000000000000000615413216666133021767 0ustar rootroot LibJPEG

LibJPEG

The Independent JPEG Group's JPEG software

Used in the QJPEG image plugin. Configure with -no-jpeg to avoid.

The sources can be found in qtbase/src/3rdparty/libjpeg.

Project Homepage

Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding.

Independent JPEG Group License.

from qtbase/src/3rdparty/libjpeg/README:

LEGAL ISSUES
============

In plain English:

1. We don't promise that this software works.  (But if you find any bugs,
   please let us know!)
2. You can use this software for whatever you want.  You don't have to pay us.
3. You may not pretend that you wrote this software.  If you use it in a
   program, you must acknowledge somewhere in your documentation that
   you've used the IJG code.

In legalese:

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991-1998, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library.  If you use our work, you ought to
acknowledge us.

Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it.  This software may be referred to only as "the Independent JPEG Group's
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-v8-javascript-engine.html0000644000000000000000000000653213216666133024702 0ustar rootroot V8 JavaScript Engine

V8 JavaScript Engine

Project Homepage

This license applies to all parts of V8 that are not externally
maintained libraries.  The externally maintained libraries used by V8
are:

  - PCRE test suite, located in
    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
    test suite from PCRE-7.3, which is copyrighted by the University
    of Cambridge and Google, Inc.  The copyright notice and license
    are embedded in regexp-pcre.js.

  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
    based on layout tests from webkit.org which are copyrighted by
    Apple Computer, Inc. and released under a 3-clause BSD license.

  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
    This code is copyrighted by Sun Microsystems Inc. and released
    under a 3-clause BSD license.

  - Valgrind client API header, located at third_party/valgrind/valgrind.h
    This is release under the BSD license.

These libraries have their own licenses; we recommend you read them,
as their terms may differ from the terms below.

Further license information can be found in LICENSE files located in
sub-directories.

Copyright 2014, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-qeuckrcodec.html0000644000000000000000000000434413216666133023006 0ustar rootroot Text Codec: EUC-KR

Text Codec: EUC-KR

The EUC-KR text codec provides conversion to and from EUC-KR, KR, the main legacy encoding for Unix machines in Korea.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qeuckrcodec.cpp.

Copyright (C) 1999-2000 Mizi Research Inc.

BSD 2-clause "Simplified" License.

Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootMediaConch/Qt_Licenses/qtwebengine-3rdparty-google-fork-of-khronos-reference-front-end-for-glsl-and-essl.htmlMediaConch/Qt_Licenses/qtwebengine-3rdparty-google-fork-of-khronos-reference-front-end-for-glsl-and-0000644000000000000000000000355513216666133032461 0ustar rootroot Google fork of Khronos reference front-end for GLSL and ESSL

Google fork of Khronos reference front-end for GLSL and ESSL

Project Homepage

Copyright (c) 2015-2016 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
   https://www.khronos.org/registry/

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-google-glog-s-symbolization-library.html0000644000000000000000000000406313216666133027740 0ustar rootroot google-glog's symbolization library

google-glog's symbolization library

Project Homepage

// Copyright (c) 2006, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libjingle.html0000644000000000000000000000370613216666133022675 0ustar rootroot libjingle

libjingle

Project Homepage

Copyright (c) 2011, The WebRTC project authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtimageformats-attribution-libwebp.html0000644000000000000000000000477313216666133023676 0ustar rootroot WebP (libwebp)

WebP (libwebp)

WebP is a new image format that provides lossless and lossy compression for images on the web.

Used in the qwebp image plugin if no system libwebp is found.

The sources can be found in qtimageformats/src/3rdparty/libwebp.

Project Homepage, upstream version: 0.6.0

Copyright (c) 2010, Google Inc. All rights reserved.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2010, Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-grpc-an-rpc-library-and-framework.html0000644000000000000000000000373213216666133027243 0ustar rootroot gRPC, an RPC library and framework

gRPC, an RPC library and framework

Project Homepage

Copyright 2015, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-opus.html0000644000000000000000000000460013216666133021716 0ustar rootroot opus

opus

Project Homepage

Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
                    Jean-Marc Valin, Timothy B. Terriberry,
                    CSIRO, Gregory Maxwell, Mark Borgerding,
                    Erik de Castro Lopo

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

- Neither the name of Internet Society, IETF or IETF Trust, nor the
names of specific contributors, may be used to endorse or promote
products derived from this software without specific prior written
permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Opus is subject to the royalty-free patent licenses which are
specified at:

Xiph.Org Foundation:
https://datatracker.ietf.org/ipr/1524/

Microsoft Corporation:
https://datatracker.ietf.org/ipr/1914/

Broadcom Corporation:
https://datatracker.ietf.org/ipr/1526/
MediaConch/Qt_Licenses/qtwebengine-3rdparty-error-prone.html0000644000000000000000000002610613216666133023207 0ustar rootroot Error Prone

Error Prone

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-inspector-protocol.html0000644000000000000000000000405413216666133024600 0ustar rootroot inspector protocol

inspector protocol

Project Homepage

// Copyright 2016 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtgui-attribution-angle-arrayboundsclamper.html0000644000000000000000000000440013216666133025324 0ustar rootroot ANGLE: Array Bounds Clamper for WebKit

ANGLE: Array Bounds Clamper for WebKit

Implements clamping of array indexing expressions during shader translation.

Used on Windows to implement OpenGL ES on top of DirectX. Configure with -no-opengl, or -opengl desktop to exclude.

The sources can be found in qtbase/src/3rdparty/angle/src/third_party/compiler.

Copyright (C) 2012 Apple Inc.

BSD 2-clause "Simplified" License.

Copyright (C) 2012 Apple Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE, INC. OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-sha1.html0000644000000000000000000000160213216666133021344 0ustar rootroot Secure Hash Algorithm SHA-1

Secure Hash Algorithm SHA-1

Implements the Secure Hash Algorithms SHA 1

Used in Qt Core (QCryptographicHash).

The sources can be found in qtbase/src/3rdparty/sha1.

Project Homepage

Copyright (C) Dominik Reichl <dominik.reichl@t-online.de>
Copyright (C) 2016 The Qt Company Ltd

Public Domain.

MediaConch/Qt_Licenses/qtgui-attribution-iaccessible2.html0000644000000000000000000000612113216666133022675 0ustar rootroot IAccessible2 IDL Specification

IAccessible2 IDL Specification

IAccessible2 is a new accessibility API which complements Microsoft's earlier work on MSAA

Optionally used in the Windows platform plugin. Configure with -no-accessibility to avoid.

The sources can be found in qtbase/src/3rdparty/iaccessible2.

Project Homepage

Copyright (c) 2000, 2006 Sun Microsystems, Inc.
Copyright (c) 2006 IBM Corporation
Copyright (c) 2007, 2010, 2012, 2013 Linux Foundation

IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 mark may be used in accordance with the Linux Foundation Trademark Policy to indicate compliance with the IAccessible2 specification.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2013 Linux Foundation
All rights reserved.


Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

 2. Redistributions in binary form must reproduce the above
    copyright notice, this list of conditions and the following
    disclaimer in the documentation and/or other materials
    provided with the distribution.

 3. Neither the name of the Linux Foundation nor the names of its
    contributors may be used to endorse or promote products
    derived from this software without specific prior written
    permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This BSD License conforms to the Open Source Initiative "Simplified
BSD License" as published at:
http://www.opensource.org/licenses/bsd-license.php
MediaConch/Qt_Licenses/qtwebengine-3rdparty-webp-image-encoder-decoder.html0000644000000000000000000000660613216666133025775 0ustar rootroot WebP image encoder/decoder

WebP image encoder/decoder

Project Homepage

Copyright (c) 2010, Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Additional IP Rights Grant (Patents)
------------------------------------

"These implementations" means the copyrightable works that implement the WebM
codecs distributed by Google as part of the WebM Project.

Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable (except as stated in this section) patent license to
make, have made, use, offer to sell, sell, import, transfer, and otherwise
run, modify and propagate the contents of these implementations of WebM, where
such license applies only to those patent claims, both currently owned by
Google and acquired in the future, licensable by Google that are necessarily
infringed by these implementations of WebM. This grant does not include claims
that would be infringed only as a consequence of further modification of these
implementations. If you or your agent or exclusive licensee institute or order
or agree to the institution of patent litigation or any other patent
enforcement activity against any entity (including a cross-claim or
counterclaim in a lawsuit) alleging that any of these implementations of WebM
or any code incorporated within any of these implementations of WebM
constitute direct or contributory patent infringement, or inducement of
patent infringement, then any patent rights granted to you under this License
for these implementations of WebM shall terminate as of the date such
litigation is filed.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-nvidia-control-x-extension-library.html0000644000000000000000000000327213216666133027605 0ustar rootroot NVidia Control X Extension Library

NVidia Control X Extension Library

Project Homepage

/*
 * Copyright (c) 2008 NVIDIA, Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 * /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-woff2.html0000644000000000000000000002610213216666133021754 0ustar rootroot woff2

woff2

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-sudden-motion-sensor-library.html0000644000000000000000000000452113216666133026470 0ustar rootroot Sudden Motion Sensor library

Sudden Motion Sensor library

Project Homepage

SMSLib Sudden Motion Sensor Access Library
Copyright (c) 2010 Suitable Systems
All rights reserved.

Developed by: Daniel Griscom
              Suitable Systems
              http://www.suitable.com

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal with the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimers.

- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimers in the
documentation and/or other materials provided with the distribution.

- Neither the names of Suitable Systems nor the names of its
contributors may be used to endorse or promote products derived from
this Software without specific prior written permission.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.

For more information about SMSLib, see
   &lt;http://www.suitable.com/tools/smslib.html&gt;
or contact
   Daniel Griscom
   Suitable Systems
   1 Centre Street, Suite 204
   Wakefield, MA 01880
   (781) 665-0053
MediaConch/Qt_Licenses/qtwebengine-3rdparty-webm-container-parser-and-writer.html0000644000000000000000000000376013216666133027214 0ustar rootroot WebM container parser and writer.

WebM container parser and writer.

Project Homepage

Copyright (c) 2010, Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libxslt.html0000644000000000000000000000656413216666133022424 0ustar rootroot libxslt

libxslt

Project Homepage

Licence for libxslt except libexslt
----------------------------------------------------------------------
 Copyright (C) 2001-2002 Daniel Veillard.  All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of Daniel Veillard shall not
be used in advertising or otherwise to promote the sale, use or other deal-
ings in this Software without prior written authorization from him.

----------------------------------------------------------------------

Licence for libexslt
----------------------------------------------------------------------
 Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.
 All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of the authors shall not
be used in advertising or otherwise to promote the sale, use or other deal-
ings in this Software without prior written authorization from him.
----------------------------------------------------------------------
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-geojson-vt-cpp.html0000644000000000000000000000325213216666133026055 0ustar rootroot geojson-vt-cpp

geojson-vt-cpp

A library for slicing GeoJSON into vector tiles on the fly.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/geojson-vt-cpp.

Project Homepage

Copyright (c) 2015 Mapbox

ISC License.

ISC License

Copyright (c) 2015, Mapbox

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-openmax-dl.html0000644000000000000000000000421613216666133022777 0ustar rootroot OpenMAX DL

OpenMAX DL

Project Homepage

Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file in the root of the source tree. All
contributing project authors may be found in the AUTHORS file in the
root of the source tree.

The files were originally licensed by ARM Limited.

The following files:

    * dl/api/omxtypes.h
    * dl/sp/api/omxSP.h

are licensed by Khronos:

Copyright © 2005-2008 The Khronos Group Inc. All Rights Reserved.

These materials are protected by copyright laws and contain material
proprietary to the Khronos Group, Inc.  You may use these materials
for implementing Khronos specifications, without altering or removing
any trademark, copyright or other notice from the specification.

Khronos Group makes no, and expressly disclaims any, representations
or warranties, express or implied, regarding these materials, including,
without limitation, any implied warranties of merchantability or fitness
for a particular purpose or non-infringement of any intellectual property.
Khronos Group makes no, and expressly disclaims any, warranties, express
or implied, regarding the correctness, accuracy, completeness, timeliness,
and reliability of these materials.

Under no circumstances will the Khronos Group, or any of its Promoters,
Contributors or Members or their respective partners, officers, directors,
employees, agents or representatives be liable for any damages, whether
direct, indirect, special or consequential damages for lost revenues,
lost profits, or otherwise, arising from or in connection with these
materials.

Khronos and OpenMAX are trademarks of the Khronos Group Inc.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-optional.html0000644000000000000000000000443313216666133025031 0ustar rootroot C+11 <optional> polyfill

C+11 <optional> polyfill

C++11 <optional> polyfill

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/optional.

Project Homepage

Copyright (c) 2011-2012 Andrzej Krzemienski

Boost Software License 1.0.

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtsvg-attribution-xsvg.html0000644000000000000000000000367213216666133021357 0ustar rootroot XSVG

XSVG

Some code for arc handling is derived from code from the XSVG project.

Used in the Qt SVG library.

The sources can be found in qtsvg/src/svg/qtsvghandler.cpp.

Copyright  2002 USC/Information Sciences Institute

MIT "Old Style" License.

Copyright  2002 USC/Information Sciences Institute

Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without
fee, provided that the above copyright notice appear in all copies
and that both that copyright notice and this permission notice
appear in supporting documentation, and that the name of
Information Sciences Institute not be used in advertising or
publicity pertaining to distribution of the software without
specific, written prior permission.  Information Sciences Institute
makes no representations about the suitability of this software for
any purpose.  It is provided "as is" without express or implied
warranty.

INFORMATION SCIENCES INSTITUTE DISCLAIMS ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL INFORMATION SCIENCES
INSTITUTE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-chromevox.html0000644000000000000000000000210113216666133022734 0ustar rootroot ChromeVox

ChromeVox

Project Homepage

// Copyright 2013 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-netscape-portable-runtime-nspr.html0000644000000000000000000000433113216666133027002 0ustar rootroot Netscape Portable Runtime (NSPR)

Netscape Portable Runtime (NSPR)

Project Homepage

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the Netscape Portable Runtime (NSPR).
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998-2000
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** * /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-openh264.html0000644000000000000000000000335713216666133022305 0ustar rootroot OpenH264

OpenH264

Project Homepage

Copyright (c) 2013, Cisco Systems
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this
  list of conditions and the following disclaimer in the documentation and/or
  other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libudev.html0000644000000000000000000006470713216666133022400 0ustar rootroot libudev

libudev

Project Homepage

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtwebengine-3rdparty-tcmalloc.html0000644000000000000000000000400013216666133022520 0ustar rootroot tcmalloc

tcmalloc

Project Homepage

// Copyright (c) 2005, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-iaccessible2-com-interfaces-for-accessibility.html0000644000000000000000000000555613216666133031601 0ustar rootroot IAccessible2 COM interfaces for accessibility

IAccessible2 COM interfaces for accessibility

Project Homepage

/*************************************************************************
 *
 *  IAccessible2 IDL Specification
 *
 *  Copyright (c) 2007, 2010 Linux Foundation
 *  Copyright (c) 2006 IBM Corporation
 *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
 *  All rights reserved.
 *
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above
 *      copyright notice, this list of conditions and the following
 *      disclaimer in the documentation and/or other materials
 *      provided with the distribution.
 *
 *   3. Neither the name of the Linux Foundation nor the names of its
 *      contributors may be used to endorse or promote products
 *      derived from this software without specific prior written
 *      permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  This BSD License conforms to the Open Source Initiative "Simplified
 *  BSD License" as published at:
 *  http://www.opensource.org/licenses/bsd-license.php
 *
 *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
 *  mark may be used in accordance with the Linux Foundation Trademark
 *  Policy to indicate compliance with the IAccessible2 specification.
 *
 ************************************************************************ /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-iccjpeg.html0000644000000000000000000000545213216666133022342 0ustar rootroot iccjpeg

iccjpeg

Project Homepage

(Copied from the README.)

--------------------------------------------------------------------------------

LICENSE extracted from IJG's jpeg distribution:
-----------------------------------------------

In plain English:

1. We don't promise that this software works.  (But if you find any bugs,
   please let us know!)
2. You can use this software for whatever you want.  You don't have to pay us.
3. You may not pretend that you wrote this software.  If you use it in a
   program, you must acknowledge somewhere in your documentation that
   you've used the IJG code.

In legalese:

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991-1998, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library.  If you use our work, you ought to
acknowledge us.

Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it.  This software may be referred to only as "the Independent JPEG Group's
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-x86inc.html0000644000000000000000000000471613216666133022057 0ustar rootroot x86inc

x86inc

Project Homepage

;*****************************************************************************
;* x86inc.asm
;*****************************************************************************
;* Copyright (C) 2005-2011 x264 project
;*
;* Authors: Loren Merritt &lt;lorenm@u.washington.edu&gt;
;*          Anton Mitrofanov &lt;BugMaster@narod.ru&gt;
;*          Jason Garrett-Glaser &lt;darkshikari@gmail.com&gt;
;*
;* Permission to use, copy, modify, and/or distribute this software for any
;* purpose with or without fee is hereby granted, provided that the above
;* copyright notice and this permission notice appear in all copies.
;*
;* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
;* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
;* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
;* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
;* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
;* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;*****************************************************************************

; This is a header file for the x264ASM assembly language, which uses
; NASM/YASM syntax combined with a large number of macros to provide easy
; abstraction between different calling conventions (x86_32, win64, linux64).
; It also has various other useful features to simplify writing the kind of
; DSP functions that are most often used in x264.

; Unlike the rest of x264, this file is available under an ISC license, as it
; has significant usefulness outside of x264 and we want it to be available
; to the largest audience possible.  Of course, if you modify it for your own
; purposes to add a new feature, we strongly encourage contributing a patch
; as this feature might be useful for others as well.  Send patches or ideas
; to x264-devel@videolan.org .
MediaConch/Qt_Licenses/qtpurchasing-attribution-inappservice.html0000644000000000000000000003004113216666133024412 0ustar rootroot In-app billing service

In-app billing service

An interface definition for the interface to Google Play's In-app Billing Service Version 3.

Used on Android for connection to Google Play billing service.

The sources can be found in qtpurchasing/src/android/src/com/android/vending/billing/IInAppBillingService.aidl.

Copyright (C) 2012 The Android Open Source Project

Apache License 2.0.

Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-kdbush-hpp.html0000644000000000000000000000322113216666133025243 0ustar rootroot kdbush.hpp

kdbush.hpp

A fast static spatial index for 2D points.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/kdbush.hpp.

Project Homepage

Copyright (c) 2016 Vladimir Agafonkin

ISC License.

Copyright (c) 2016, Vladimir Agafonkin

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtcore-attribution-md4.html0000644000000000000000000000167213216666133021203 0ustar rootroot MD4 | Qt Core 5.9

MD4

An OpenSSL-compatible implementation of the RSA Data Security, Inc. MD4 Message-Digest Algorithm.

Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.

The sources can be found in qtbase/src/3rdparty/md4.

Written by Alexander Peslyak - better known as Solar Designer <solar@openwall.com> - in 2001, and placed in the public domain. There's absolutely no warranty.

Public Domain.

MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-supercluster-hpp.html0000644000000000000000000000325313216666133026530 0ustar rootroot supercluster.hpp

supercluster.hpp

A fast 2D point clustering library for use in interactive maps.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/supercluster.hpp.

Project Homepage

Copyright (c) 2016 Mapbox

ISC License.

Copyright (c) 2016, Mapbox

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtpurchasing-attribution-base64decoder.html0000644000000000000000000003004613216666133024341 0ustar rootroot Base64 Decoder

Base64 Decoder

Converts between binary and base64.

Used on Android in verification of purchases if a public key is set.

The sources can be found in qtpurchasing/src/android/src/org/qtproject/qt5/android/purchasing/Base64.java and qtpurchasing/src/android/src/org/qtproject/qt5/android/purchasing/Base64DecoderException.java.

Copyright 2002, Google, Inc.

Apache License 2.0.

Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
MediaConch/Qt_Licenses/qtgui-attribution-angle-murmurhash.html0000644000000000000000000000150513216666133023625 0ustar rootroot ANGLE: Murmurhash

ANGLE: Murmurhash

Used on Windows to implement OpenGL ES on top of DirectX. Configure with -no-opengl, or -opengl desktop to exclude.

The sources can be found in qtbase/src/3rdparty/angle/src/third_party/murmurhash.

MurmurHash3 was written by Austin Appleby, and is placed in the public domain. The author hereby disclaims copyright to this source code.

Public Domain.

MediaConch/Qt_Licenses/qtwebengine-3rdparty-mach-override.html0000644000000000000000000000374113216666133023462 0ustar rootroot mach_override

mach_override

Project Homepage

Copyright (c) 2003-2012 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
Some rights reserved: http://opensource.org/licenses/mit

mach_override includes a copy of libudis86, licensed as follows:

Copyright (c) 2002-2009 Vivek Thampi
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-open-vcdiff.html0000644000000000000000000002614613216666133023141 0ustar rootroot open-vcdiff

open-vcdiff

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright 2008 The open-vcdiff Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtgui-attribution-harfbuzz-ng.html0000644000000000000000000000610013216666133022577 0ustar rootroot HarfBuzz-NG

HarfBuzz-NG

HarfBuzz is an OpenType text shaping engine.

Optionally used in Qt GUI. Configure with -system-harfbuzz or -qt-harfbuzz to avoid.

The sources can be found in qtbase/src/3rdparty/harfbuzz-ng.

Project Homepage, upstream version: 1.4.1

Copyright © 2010,2011,2012  Google, Inc.
Copyright © 2012  Mozilla Foundation
Copyright © 2011  Codethink Limited
Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
Copyright © 2009  Keith Stribley
Copyright © 2009  Martin Hosken and SIL International
Copyright © 2007  Chris Wilson
Copyright © 2006  Behdad Esfahbod
Copyright © 2005  David Turner
Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
Copyright © 1998-2004  David Turner and Werner Lemberg

MIT License.

HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
For parts of HarfBuzz that are licensed under different licenses see individual
files names COPYING in subdirectories where applicable.

Copyright © 2010,2011,2012  Google, Inc.
Copyright © 2012  Mozilla Foundation
Copyright © 2011  Codethink Limited
Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
Copyright © 2009  Keith Stribley
Copyright © 2009  Martin Hosken and SIL International
Copyright © 2007  Chris Wilson
Copyright © 2006  Behdad Esfahbod
Copyright © 2005  David Turner
Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
Copyright © 1998-2004  David Turner and Werner Lemberg

For full copyright notices consult the individual files in the package.


Permission is hereby granted, without written agreement and without
license or royalty fees, to use, copy, modify, and distribute this
software and its documentation for any purpose, provided that the
above copyright notice and the following two paragraphs appear in
all copies of this software.

IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libfuzzer.html0000644000000000000000000000727513216666133022757 0ustar rootroot libFuzzer

libFuzzer

Project Homepage

==============================================================================
LLVM Release License
==============================================================================
University of Illinois/NCSA
Open Source License

Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign.
All rights reserved.

Developed by:

    LLVM Team

    University of Illinois at Urbana-Champaign

    http://llvm.org

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal with
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimers.

    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimers in the
      documentation and/or other materials provided with the distribution.

    * Neither the names of the LLVM Team, University of Illinois at
      Urbana-Champaign, nor the names of its contributors may be used to
      endorse or promote products derived from this Software without specific
      prior written permission.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
SOFTWARE.

==============================================================================
Copyrights and Licenses for Third Party Software Distributed with LLVM:
==============================================================================
The LLVM software contains code written by third parties.  Such software will
have its own individual LICENSE.TXT file in the directory in which it appears.
This file will describe the copyrights, license, and restrictions which apply
to that code.

The disclaimer of warranty in the University of Illinois Open Source License
applies to all code in the LLVM Distribution, and nothing in any of the
other licenses gives permission to use the names of the LLVM Team or the
University of Illinois to endorse or promote products derived from this
Software.

The following pieces of software have additional or alternate copyrights,
licenses, and/or restrictions:

Program             Directory
-------             ---------
Autoconf            llvm/autoconf
                    llvm/projects/ModuleMaker/autoconf
Google Test         llvm/utils/unittest/googletest
OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
pyyaml tests        llvm/test/YAMLParser/{*.data, LICENSE.TXT}
ARM contributions   llvm/lib/Target/ARM/LICENSE.TXT
md5 contributions   llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h
MediaConch/Qt_Licenses/qtlocation-attribution-clipper.html0000644000000000000000000000357613216666133023042 0ustar rootroot Clipper Polygon Clipping Library

Clipper Polygon Clipping Library

Clip2Tri can be used together with Clipper for robust triangulation.

Used in the QML plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/clipper.

Project Homepage

Copyright Angus Johnson 2010-2014

Boost Software License 1.0.

Use, modification & distribution is subject to Boost Software License Ver 1.
http://www.boost.org/LICENSE_1_0.txt

Attributions:
The code in this library is an extension of Bala Vatti's clipping algorithm:
"A generic solution to polygon clipping"
Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.
http://portal.acm.org/citation.cfm?id=129906

Computer graphics and geometric modeling: implementation and algorithms
By Max K. Agoston
Springer; 1 edition (January 4, 2005)
http://books.google.com/books?q=vatti+clipping+agoston

See also:
"Polygon Offsetting by Computing Winding Numbers"
Paper no. DETC2005-85513 pp. 565-575
ASME 2005 International Design Engineering Technical Conferences
and Computers and Information in Engineering Conference (IDETC/CIE2005)
September 24-28, 2005 , Long Beach, California, USA
http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libusbx.html0000644000000000000000000006465013216666133022413 0ustar rootroot libusbx

libusbx

Project Homepage

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtpurchasing-attribution-pkeyverify.html0000644000000000000000000002772713216666133024140 0ustar rootroot Public Key Verification

Public Key Verification

Verifies a given signature on data.

Used on Android in verification of purchases if a public key is set.

The sources can be found in qtpurchasing/src/android/src/org/qtproject/qt5/android/purchasing/Security.java.

Copyright (c) 2012 Google Inc.

Apache License 2.0.

Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-flac.html0000644000000000000000000000373513216666133021645 0ustar rootroot flac

flac

Project Homepage

Copyright (C) 2000-2009  Josh Coalson
Copyright (C) 2011-2014  Xiph.Org Foundation

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

- Neither the name of the Xiph.org Foundation nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-harfbuzz-ng.html0000644000000000000000000000417313216666133023172 0ustar rootroot harfbuzz-ng

harfbuzz-ng

Project Homepage

HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
For parts of HarfBuzz that are licensed under different licenses see individual
files names COPYING in subdirectories where applicable.

Copyright © 2010,2011,2012  Google, Inc.
Copyright © 2012  Mozilla Foundation
Copyright © 2011  Codethink Limited
Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
Copyright © 2009  Keith Stribley
Copyright © 2009  Martin Hosken and SIL International
Copyright © 2007  Chris Wilson
Copyright © 2006  Behdad Esfahbod
Copyright © 2005  David Turner
Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
Copyright © 1998-2004  David Turner and Werner Lemberg

For full copyright notices consult the individual files in the package.


Permission is hereby granted, without written agreement and without
license or royalty fees, to use, copy, modify, and distribute this
software and its documentation for any purpose, provided that the
above copyright notice and the following two paragraphs appear in
all copies of this software.

IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-paul-hsieh-s-superfasthash.html0000644000000000000000000000401613216666133026106 0ustar rootroot Paul Hsieh's SuperFastHash

Paul Hsieh's SuperFastHash

Project Homepage

Paul Hsieh OLD BSD license

Copyright (c) 2010, Paul Hsieh
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
  list of conditions and the following disclaimer in the documentation and/or
  other materials provided with the distribution.
* Neither my name, Paul Hsieh, nor the names of any other contributors to the
  code use may not be used to endorse or promote products derived from this
  software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-xdg-user-dirs.html0000644000000000000000000000304713216666133023431 0ustar rootroot xdg-user-dirs

xdg-user-dirs

Project Homepage

Copyright (c) 2007 Red Hat, inc

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
(the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-shaderc.html0000644000000000000000000002611013216666133022341 0ustar rootroot Shaderc

Shaderc

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libjpeg.html0000644000000000000000000001107313216666133022346 0ustar rootroot libjpeg

libjpeg

Project Homepage

(Copied from the README.)

--------------------------------------------------------------------------------

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991-1998, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library.  If you use our work, you ought to
acknowledge us.

Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it.  This software may be referred to only as "the Independent JPEG Group's
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.


ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
by the usual distribution terms of the Free Software Foundation; principally,
that you must include source code if you redistribute it.  (See the file
ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
of any program generated from the IJG code, this does not limit you more than
the foregoing paragraphs do.

The Unix configuration script "configure" was produced with GNU Autoconf.
It is copyright by the Free Software Foundation but is freely distributable.
The same holds for its supporting scripts (config.guess, config.sub,
ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
by M.I.T. but is also freely distributable.

It appears that the arithmetic coding option of the JPEG spec is covered by
patents owned by IBM, AT&amp;T, and Mitsubishi.  Hence arithmetic coding cannot
legally be used without obtaining one or more licenses.  For this reason,
support for arithmetic coding has been removed from the free JPEG software.
(Since arithmetic coding provides only a marginal gain over the unpatented
Huffman mode, it is unlikely that very many implementations will support it.)
So far as we are aware, there are no patent restrictions on the remaining
code.

The IJG distribution formerly included code to read and write GIF files.
To avoid entanglement with the Unisys LZW patent, GIF reading support has
been removed altogether, and the GIF writer has been simplified to produce
"uncompressed GIFs".  This technique does not use the LZW algorithm; the
resulting GIF files are larger than usual, but are readable by all standard
GIF decoders.

We are required to state that
    "The Graphics Interchange Format(c) is the Copyright property of
    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    CompuServe Incorporated."

--------------------------------------------------------------------------------

jconfig.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.

jmorecfg.h contains modifications, which are distributed under the Netscape
Public License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-flot-javascript-jquery-library-for-creating-graphs.html0000644000000000000000000000314213216666133032657 0ustar rootroot Flot Javascript/JQuery library for creating graphs

Flot Javascript/JQuery library for creating graphs

Project Homepage

Copyright (c) 2007-2013 IOLA and Ole Laursen

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-dynamic-annotations.html0000644000000000000000000000361013216666133024707 0ustar rootroot dynamic annotations

dynamic annotations

Project Homepage

/* Copyright (c) 2008-2009, Google Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ---
 * Author: Kostya Serebryany
 * /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-chromium-global.html0000644000000000000000000000402113216666133024006 0ustar rootroot Chromium License

Chromium License

The Google-authored portion of Chromium is released under a BSD license:

// Copyright 2015 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-snappy-a-fast-compressor-decompressor.html0000644000000000000000000000374513216666133030321 0ustar rootroot Snappy: A fast compressor/decompressor

Snappy: A fast compressor/decompressor

Project Homepage

Copyright 2011, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl.html0000644000000000000000000000154513216666133023207 0ustar rootroot Mapbox GL Native

Mapbox GL Native

A library for embedding interactive and customizable vector maps.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native.

Project Homepage

Copyright (c) 2014-2017 Mapbox

BSD 2-clause "Simplified" License.

MediaConch/Qt_Licenses/qtwebengine-3rdparty-libsrtp.html0000644000000000000000000000405613216666133022414 0ustar rootroot libsrtp

libsrtp

Project Homepage

/*
 *
 * Copyright (c) 2001-2006 Cisco Systems, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 *   Redistributions in binary form must reproduce the above
 *   copyright notice, this list of conditions and the following
 *   disclaimer in the documentation and/or other materials provided
 *   with the distribution.
 *
 *   Neither the name of the Cisco Systems, Inc. nor the names of its
 *   contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-d3.html0000644000000000000000000000355613216666133021247 0ustar rootroot d3

d3

Project Homepage

Copyright (c) 2010-2014, Michael Bostock
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* The name Michael Bostock may not be used to endorse or promote products
  derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-shaders.html0000644000000000000000000001204313216666133024631 0ustar rootroot Mapbox GL Shaders

Mapbox GL Shaders

Shaders used by Mapbox GL

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/mapbox-gl-shaders.

Copyright (c) 2016 Mapbox

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2016, Mapbox

All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of Mapbox GL JS nor the names of its contributors
      may be used to endorse or promote products derived from this software
      without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-------------------------------------------------------------------------------

Contains glmatrix.js

Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this
    list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-------------------------------------------------------------------------------

Contains Hershey Simplex Font: http://paulbourke.net/dataformats/hershey/

-------------------------------------------------------------------------------

Contains code from glfx.js

Copyright (C) 2011 by Evan Wallace

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libcxx.html0000644000000000000000000000757713216666133022241 0ustar rootroot libcxx

libcxx

Project Homepage

==============================================================================
libc++ License
==============================================================================

The libc++ library is dual licensed under both the University of Illinois
"BSD-Like" license and the MIT license.  As a user of this code you may choose
to use it under either license.  As a contributor, you agree to allow your code
to be used under both.

Full text of the relevant licenses is included below.

==============================================================================

University of Illinois/NCSA
Open Source License

Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT

All rights reserved.

Developed by:

    LLVM Team

    University of Illinois at Urbana-Champaign

    http://llvm.org

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal with
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimers.

    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimers in the
      documentation and/or other materials provided with the distribution.

    * Neither the names of the LLVM Team, University of Illinois at
      Urbana-Champaign, nor the names of its contributors may be used to
      endorse or promote products derived from this Software without specific
      prior written permission.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
SOFTWARE.

==============================================================================

Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libevent.html0000644000000000000000000000552613216666133022550 0ustar rootroot libevent

libevent

Project Homepage

Libevent is available for use under the following license, commonly known
as the 3-clause (or "modified") BSD license:

==============================
Copyright (c) 2000-2007 Niels Provos &lt;provos@citi.umich.edu&gt;
Copyright (c) 2007-2010 Niels Provos and Nick Mathewson

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
==============================

Portions of Libevent are based on works by others, also made available by
them under the three-clause BSD license above.  The copyright notices are
available in the corresponding source files; the license is as above.  Here's
a list:

log.c:
   Copyright (c) 2000 Dug Song &lt;dugsong@monkey.org&gt;
   Copyright (c) 1993 The Regents of the University of California.

strlcpy.c:
   Copyright (c) 1998 Todd C. Miller &lt;Todd.Miller@courtesan.com&gt;

win32.c:
   Copyright (c) 2003 Michael A. Davis &lt;mike@datanerds.net&gt;

evport.c:
   Copyright (c) 2007 Sun Microsystems

min_heap.h:
   Copyright (c) 2006 Maxim Yegorushkin &lt;maxim.yegorushkin@gmail.com&gt;

tree.h:
   Copyright 2002 Niels Provos &lt;provos@citi.umich.edu&gt;
MediaConch/Qt_Licenses/qtwebengine-3rdparty-xdg-utils.html0000644000000000000000000000305513216666133022653 0ustar rootroot xdg-utils

xdg-utils

Project Homepage

#
#   Permission is hereby granted, free of charge, to any person obtaining a
#   copy of this software and associated documentation files (the "Software"),
#   to deal in the Software without restriction, including without limitation
#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
#   and/or sell copies of the Software, and to permit persons to whom the
#   Software is furnished to do so, subject to the following conditions:
#
#   The above copyright notice and this permission notice shall be included
#   in all copies or substantial portions of the Software.
#
#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
#   OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtcore-attribution-qsjiscodec.html0000644000000000000000000000425313216666133022644 0ustar rootroot Text Codec: Shift-JIS

Text Codec: Shift-JIS

The Shift-JIS text codec provides conversion to and from Shift-JIS.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qsjiscodec.cpp.

Copyright (C) 1999 Serika Kurusugawa.

BSD 2-clause "Simplified" License.

Copyright (C) 1999 Serika Kurusugawa, All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-crashpad.html0000644000000000000000000002610713216666133022523 0ustar rootroot Crashpad

Crashpad

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-swiftshader.html0000644000000000000000000002613713216666133023264 0ustar rootroot SwiftShader

SwiftShader

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtgui-attribution-pixman.html0000644000000000000000000000375213216666133021650 0ustar rootroot Pixman

Pixman

pixman is a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.

Used in Qt GUI on ARM NEON.

The sources can be found in qtbase/src/3rdparty/pixman.

Project Homepage

Copyright © 2009 Nokia Corporation

MIT License.

Copyright © 2009 Nokia Corporation

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtcore-attribution-md5.html0000644000000000000000000000145413216666133021202 0ustar rootroot MD5

MD5

MD5 message-digest algorithm.

Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.

The sources can be found in qtbase/src/3rdparty/md5.

Written by Colin Plumb in 1993, no copyright is claimed.
Ian Jackson <ian@chiark.greenend.org.uk>.

Public Domain.

MediaConch/Qt_Licenses/qtgui-attribution-cocoa-platform-plugin.html0000644000000000000000000000564113216666133024555 0ustar rootroot Cocoa Platform Plugin

Cocoa Platform Plugin

Allows Qt to integrate into Apple's Cocoa API.

Code used in the Qt Platform Abstraction (QPA) for macOS.

The sources can be found in qtbase/src/plugins/platforms/cocoa/qcocoaapplication.h, qtbase/src/plugins/platforms/cocoa/qcocoaapplication.mm, qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.h, qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm, qtbase/src/plugins/platforms/cocoa/qcocoaeventdispatcher.h, qtbase/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm, qtbase/src/plugins/platforms/cocoa/qcocoaintrospection.h, qtbase/src/plugins/platforms/cocoa/qcocoaintrospection.mm, qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm, and qtbase/src/plugins/platforms/cocoa/qmacdefines_mac.h.

Copyright (c) 2007-2008, Apple, Inc.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2007-2008, Apple, Inc.

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice,
    this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.

  * Neither the name of Apple, Inc. nor the names of its contributors
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-freebsd.html0000644000000000000000000000516413216666133022131 0ustar rootroot FreeBSD strtoll and strtoull

FreeBSD strtoll and strtoull

strtoll() and strtoull() are functions for converting a string to (unsigned) long long integer.

Used in Qt Core.

The sources can be found in qtbase/src/3rdparty/freebsd.

Copyright (c) 1992, 1993 The Regents of the University of California.
Copyright (c) 2011 The FreeBSD Foundation

BSD 3-clause "New" or "Revised" License.

Copyright (c) 1992, 1993
     The Regents of the University of California.  All rights reserved.

Copyright (c) 2011 The FreeBSD Foundation
All rights reserved.
Portions of this software were developed by David Chisnall
under sponsorship from the FreeBSD Foundation.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-sha3-endian.html0000644000000000000000000000351413216666133022606 0ustar rootroot Secure Hash Algorithm SHA-3 - brg_endian

Secure Hash Algorithm SHA-3 - brg_endian

SHA-3, originally known as Keccak, is a cryptographic hash function.

Used in Qt Core (QCryptographicHash).

The sources can be found in qtbase/src/3rdparty/sha3/brg_endian.h.

Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.

LICENSE TERMS

The redistribution and use of this software (with or without changes)
is allowed without the payment of fees or royalties provided that:

 1. source code distributions include the above copyright notice, this
    list of conditions and the following disclaimer;

 2. binary distributions include the above copyright notice, this list
    of conditions and the following disclaimer in their documentation;

 3. the name of the copyright holder is not used to endorse products
    built using this software without specific written permission.

DISCLAIMER

This software is provided 'as is' with no explicit or implied warranties
in respect of its properties, including, but not limited to, correctness
and/or fitness for purpose.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-almost-native-graphics-layer-engine.html0000644000000000000000000000422713216666133027673 0ustar rootroot Almost Native Graphics Layer Engine

Almost Native Graphics Layer Engine

Project Homepage

// Copyright (C) 2002-2013 The ANGLE Project Authors.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
//     Redistributions of source code must retain the above copyright
//     notice, this list of conditions and the following disclaimer.
//
//     Redistributions in binary form must reproduce the above
//     copyright notice, this list of conditions and the following
//     disclaimer in the documentation and/or other materials provided
//     with the distribution.
//
//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
//     Ltd., nor the names of their contributors may be used to endorse
//     or promote products derived from this software without specific
//     prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-chromium-os-system-api.html0000644000000000000000000000405113216666133025263 0ustar rootroot Chromium OS system API

Chromium OS system API

Project Homepage

// Copyright (c) 2006-2009 The Chromium OS Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-icu.html0000644000000000000000000004671513216666133021525 0ustar rootroot icu

icu

Project Homepage

COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)

Copyright © 1991-2016 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html

Permission is hereby granted, free of charge, to any person obtaining
a copy of the Unicode data files and any associated documentation
(the "Data Files") or Unicode software and any associated documentation
(the "Software") to deal in the Data Files or Software
without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, and/or sell copies of
the Data Files or Software, and to permit persons to whom the Data Files
or Software are furnished to do so, provided that either
(a) this copyright and permission notice appear with all copies
of the Data Files or Software, or
(b) this copyright and permission notice appear in associated
Documentation.

THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THE DATA FILES OR SOFTWARE.

Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale,
use or other dealings in these Data Files or Software without prior
written authorization of the copyright holder.

---------------------

Third-Party Software Licenses

This section contains third-party software notices and/or additional
terms for licensed third-party software components included within ICU
libraries.

1. ICU License - ICU 1.8.1 to ICU 57.1

COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1995-2016 International Business Machines Corporation and others
All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies of
the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
of the copyright holder.

All trademarks and registered trademarks mentioned herein are the
property of their respective owners.

2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)

 #     The Google Chrome software developed by Google is licensed under
 # the BSD license. Other software included in this distribution is
 # provided under other licenses, as set forth below.
 #
 #  The BSD License
 #  http://opensource.org/licenses/bsd-license.php
 #  Copyright (C) 2006-2008, Google Inc.
 #
 #  All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
 #
 #  Redistributions of source code must retain the above copyright notice,
 # this list of conditions and the following disclaimer.
 #  Redistributions in binary form must reproduce the above
 # copyright notice, this list of conditions and the following
 # disclaimer in the documentation and/or other materials provided with
 # the distribution.
 #  Neither the name of  Google Inc. nor the names of its
 # contributors may be used to endorse or promote products derived from
 # this software without specific prior written permission.
 #
 #
 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 #
 #  The word list in cjdict.txt are generated by combining three word lists
 # listed below with further processing for compound word breaking. The
 # frequency is generated with an iterative training against Google web
 # corpora.
 #
 #  * Libtabe (Chinese)
 #    - https://sourceforge.net/project/?group_id=1519
 #    - Its license terms and conditions are shown below.
 #
 #  * IPADIC (Japanese)
 #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
 #    - Its license terms and conditions are shown below.
 #
 #  ---------COPYING.libtabe ---- BEGIN--------------------
 #
 #  /*
 #   * Copyrighy (c) 1999 TaBE Project.
 #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
 #   * All rights reserved.
 #   *
 #   * Redistribution and use in source and binary forms, with or without
 #   * modification, are permitted provided that the following conditions
 #   * are met:
 #   *
 #   * . Redistributions of source code must retain the above copyright
 #   *   notice, this list of conditions and the following disclaimer.
 #   * . Redistributions in binary form must reproduce the above copyright
 #   *   notice, this list of conditions and the following disclaimer in
 #   *   the documentation and/or other materials provided with the
 #   *   distribution.
 #   * . Neither the name of the TaBE Project nor the names of its
 #   *   contributors may be used to endorse or promote products derived
 #   *   from this software without specific prior written permission.
 #   *
 #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 #   * OF THE POSSIBILITY OF SUCH DAMAGE.
 #   * /
 #
 #  /*
 #   * Copyright (c) 1999 Computer Systems and Communication Lab,
 #   *                    Institute of Information Science, Academia
 #       *                    Sinica. All rights reserved.
 #   *
 #   * Redistribution and use in source and binary forms, with or without
 #   * modification, are permitted provided that the following conditions
 #   * are met:
 #   *
 #   * . Redistributions of source code must retain the above copyright
 #   *   notice, this list of conditions and the following disclaimer.
 #   * . Redistributions in binary form must reproduce the above copyright
 #   *   notice, this list of conditions and the following disclaimer in
 #   *   the documentation and/or other materials provided with the
 #   *   distribution.
 #   * . Neither the name of the Computer Systems and Communication Lab
 #   *   nor the names of its contributors may be used to endorse or
 #   *   promote products derived from this software without specific
 #   *   prior written permission.
 #   *
 #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 #   * OF THE POSSIBILITY OF SUCH DAMAGE.
 #   * /
 #
 #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
 #      University of Illinois
 #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
 #
 #  ---------------COPYING.libtabe-----END--------------------------------
 #
 #
 #  ---------------COPYING.ipadic-----BEGIN-------------------------------
 #
 #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
 #  and Technology.  All Rights Reserved.
 #
 #  Use, reproduction, and distribution of this software is permitted.
 #  Any copy of this software, whether in its original form or modified,
 #  must include both the above copyright notice and the following
 #  paragraphs.
 #
 #  Nara Institute of Science and Technology (NAIST),
 #  the copyright holders, disclaims all warranties with regard to this
 #  software, including all implied warranties of merchantability and
 #  fitness, in no event shall NAIST be liable for
 #  any special, indirect or consequential damages or any damages
 #  whatsoever resulting from loss of use, data or profits, whether in an
 #  action of contract, negligence or other tortuous action, arising out
 #  of or in connection with the use or performance of this software.
 #
 #  A large portion of the dictionary entries
 #  originate from ICOT Free Software.  The following conditions for ICOT
 #  Free Software applies to the current dictionary as well.
 #
 #  Each User may also freely distribute the Program, whether in its
 #  original form or modified, to any third party or parties, PROVIDED
 #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
 #  on, or be attached to, the Program, which is distributed substantially
 #  in the same form as set out herein and that such intended
 #  distribution, if actually made, will neither violate or otherwise
 #  contravene any of the laws and regulations of the countries having
 #  jurisdiction over the User or the intended distribution itself.
 #
 #  NO WARRANTY
 #
 #  The program was produced on an experimental basis in the course of the
 #  research and development conducted during the project and is provided
 #  to users as so produced on an experimental basis.  Accordingly, the
 #  program is provided without any warranty whatsoever, whether express,
 #  implied, statutory or otherwise.  The term "warranty" used herein
 #  includes, but is not limited to, any warranty of the quality,
 #  performance, merchantability and fitness for a particular purpose of
 #  the program and the nonexistence of any infringement or violation of
 #  any right of any third party.
 #
 #  Each user of the program will agree and understand, and be deemed to
 #  have agreed and understood, that there is no warranty whatsoever for
 #  the program and, accordingly, the entire risk arising from or
 #  otherwise connected with the program is assumed by the user.
 #
 #  Therefore, neither ICOT, the copyright holder, or any other
 #  organization that participated in or was otherwise related to the
 #  development of the program and their respective officials, directors,
 #  officers and other employees shall be held liable for any and all
 #  damages, including, without limitation, general, special, incidental
 #  and consequential damages, arising out of or otherwise in connection
 #  with the use or inability to use the program or any product, material
 #  or result produced or otherwise obtained by using the program,
 #  regardless of whether they have been advised of, or otherwise had
 #  knowledge of, the possibility of such damages at any time during the
 #  project or thereafter.  Each user will be deemed to have agreed to the
 #  foregoing by his or her commencement of use of the program.  The term
 #  "use" as used herein includes, but is not limited to, the use,
 #  modification, copying and distribution of the program and the
 #  production of secondary products from the program.
 #
 #  In the case where the program, whether in its original form or
 #  modified, was distributed or delivered to or received by a user from
 #  any person, organization or entity other than ICOT, unless it makes or
 #  grants independently of ICOT any specific warranty to the user in
 #  writing, such person, organization or entity, will also be exempted
 #  from and not be held liable to the user for any such damages as noted
 #  above as far as the program is concerned.
 #
 #  ---------------COPYING.ipadic-----END----------------------------------

3. Lao Word Break Dictionary Data (laodict.txt)

 #  Copyright (c) 2013 International Business Machines Corporation
 #  and others. All Rights Reserved.
 #
 # Project: http://code.google.com/p/lao-dictionary/
 # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
 # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
 #              (copied below)
 #
 #  This file is derived from the above dictionary, with slight
 #  modifications.
 #  ----------------------------------------------------------------------
 #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
 #  All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
 #  modification,
 #  are permitted provided that the following conditions are met:
 #
 #
 # Redistributions of source code must retain the above copyright notice, this
 #  list of conditions and the following disclaimer. Redistributions in
 #  binary form must reproduce the above copyright notice, this list of
 #  conditions and the following disclaimer in the documentation and/or
 #  other materials provided with the distribution.
 #
 #
 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 # OF THE POSSIBILITY OF SUCH DAMAGE.
 #  --------------------------------------------------------------------------

4. Burmese Word Break Dictionary Data (burmesedict.txt)

 #  Copyright (c) 2014 International Business Machines Corporation
 #  and others. All Rights Reserved.
 #
 #  This list is part of a project hosted at:
 #    github.com/kanyawtech/myanmar-karen-word-lists
 #
 #  --------------------------------------------------------------------------
 #  Copyright (c) 2013, LeRoy Benjamin Sharon
 #  All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
 #  modification, are permitted provided that the following conditions
 #  are met: Redistributions of source code must retain the above
 #  copyright notice, this list of conditions and the following
 #  disclaimer.  Redistributions in binary form must reproduce the
 #  above copyright notice, this list of conditions and the following
 #  disclaimer in the documentation and/or other materials provided
 #  with the distribution.
 #
 #    Neither the name Myanmar Karen Word Lists, nor the names of its
 #    contributors may be used to endorse or promote products derived
 #    from this software without specific prior written permission.
 #
 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
 #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 #  SUCH DAMAGE.
 #  --------------------------------------------------------------------------

5. Time Zone Database

  ICU uses the public domain data and code derived from Time Zone
Database for its time zone support. The ownership of the TZ database
is explained in BCP 175: Procedure for Maintaining the Time Zone
Database section 7.

 # 7.  Database Ownership
 #
 #    The TZ database itself is not an IETF Contribution or an IETF
 #    document.  Rather it is a pre-existing and regularly updated work
 #    that is in the public domain, and is intended to remain in the
 #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
 #    not apply to the TZ Database or contributions that individuals make
 #    to it.  Should any claims be made and substantiated against the TZ
 #    Database, the organization that is providing the IANA
 #    Considerations defined in this RFC, under the memorandum of
 #    understanding with the IETF, currently ICANN, may act in accordance
 #    with all competent court orders.  No ownership claims will be made
 #    by ICANN or the IETF Trust on the database or the code.  Any person
 #    making a contribution to the database or code waives all rights to
 #    future claims in that contribution or in the TZ Database.
MediaConch/Qt_Licenses/qtgui-attribution-opengl-headers.html0000644000000000000000000000404713216666133023247 0ustar rootroot OpenGL Headers

OpenGL Headers

OpenGL header generated from the Khronos OpenGL / OpenGL ES XML API Registry.

Used on Windows and Linux in the OpenGL related headers of Qt GUI.

The sources can be found in qtbase/src/gui/opengl/qopenglext.h.

Project Homepage, upstream version: Revision 27684

Copyright (c) 2013-2014 The Khronos Group Inc.

MIT License.

Copyright (c) 2013-2014 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-tlslite.html0000644000000000000000000000713413216666133022415 0ustar rootroot tlslite

tlslite

Project Homepage

TLS Lite includes code from different sources. All code is either dedicated to
the public domain by its authors, or available under a BSD-style license. In
particular:

-

Code written by Trevor Perrin, Kees Bos, Sam Rushing, Dimitris Moraitis,
Marcelo Fernandez, Martin von Loewis, Dave Baggett, and Yngve Pettersen is
available under the following terms:

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or distribute
this software, either in source code form or as a compiled binary, for any
purpose, commercial or non-commercial, and by any means.

In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-

Code written by Bram Cohen (rijndael.py) was dedicated to the public domain by
its author. See rijndael.py for details.

-

Code written by Google is available under the following terms:

Copyright (c) 2008, The Chromium Authors
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

 * Neither the name of the Google Inc. nor the names of its contributors may
   be used to endorse or promote products derived from this software without
   specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtimageformats-attribution-libtiff.html0000644000000000000000000000413213216666133023656 0ustar rootroot TIFF Software Distribution (libtiff)

TIFF Software Distribution (libtiff)

Used in the qtiff image plugin if no system libtiff is found.

The sources can be found in qtimageformats/src/3rdparty/libtiff.

Project Homepage, upstream version: 4.0.7

Copyright (c) 1988-1997 Sam Leffler
Copyright (c) 1991-1997 Silicon Graphics, Inc.

libtiff License.

Copyright (c) 1988-1997 Sam Leffler
Copyright (c) 1991-1997 Silicon Graphics, Inc.

Permission to use, copy, modify, distribute, and sell this software and
its documentation for any purpose is hereby granted without fee, provided
that (i) the above copyright notices and this permission notice appear in
all copies of the software and related documentation, and (ii) the names of
Sam Leffler and Silicon Graphics may not be used in any advertising or
publicity relating to the software without the specific, prior written
permission of Sam Leffler and Silicon Graphics.

THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtimageformats-attribution-libmng.html0000644000000000000000000000633413216666133023515 0ustar rootroot MNG reference library

MNG reference library

Used in the qmng image plugin if no system libmng is found.

The sources can be found in qtimageformats/src/3rdparty/libmng.

Project Homepage, upstream version: 1.0.10

Copyright (c) 2000-2007 Gerard Juyn (gerard@libmng.com)

zlib License.

Copyright (c) 2000-2007 Gerard Juyn (gerard@libmng.com)
[You may insert additional notices after this sentence if you modify
 this source]

For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals:

   Gerard Juyn
   Glenn Randers-Pehrson

The MNG Library is supplied "AS IS".  The Contributing Authors
disclaim all warranties, expressed or implied, including, without
limitation, the warranties of merchantability and of fitness for any
purpose.  The Contributing Authors assume no liability for direct,
indirect, incidental, special, exemplary, or consequential damages,
which may result from the use of the MNG Library, even if advised of
the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:

1. The origin of this source code must not be misrepresented;
   you must not claim that you wrote the original software.

2. Altered versions must be plainly marked as such and must not be
   misrepresented as being the original source.

3. This Copyright notice may not be removed or altered from any source
   or altered source distribution.

The Contributing Authors specifically permit, without fee, and
encourage the use of this source code as a component to supporting
the MNG and JNG file format in commercial products.  If you use this
source code in a product, acknowledgment would be highly appreciated.

************************************************************************

Parts of this software have been adapted from the libpng package.
Although this library supports all features from the PNG specification
(as MNG descends from it) it does not require the libpng package.
It does require the zlib library and optionally the IJG jpeg library,
and/or the "little-cms" library by Marti Maria (depending on the
inclusion of support for JNG and Full-Color-Management respectively.

This library's function is primarily to read and display MNG
animations. It is not meant as a full-featured image-editing
component! It does however offer creation and editing functionality
at the chunk level.
(future modifications may include some more support for creation
 and or editing)

************************************************************************
MediaConch/Qt_Licenses/qtgui-attribution-harfbuzz.html0000644000000000000000000000434213216666133022203 0ustar rootroot HarfBuzz

HarfBuzz

Optionally used in Qt GUI. Configure with -system-harfbuzz or -qt-harfbuzz to avoid.

The sources can be found in qtbase/src/3rdparty/harfbuzz.

Copyright (c) 1992, 1993
    The Regents of the University of California. All rights reserved.

Copyright (c) 2011 The FreeBSD Foundation
All rights reserved.
Portions of this software were developed by David Chisnall
under sponsorship from the FreeBSD Foundation.

MIT License.

HarfBuzz was previously licensed under different licenses.  This was
changed in January 2008.  If you need to relicense your old copies,
consult the announcement of the license change on the internet.
Other than that, each copy of HarfBuzz is licensed under the COPYING
file included with it.  The actual license follows:


Permission is hereby granted, without written agreement and without
license or royalty fees, to use, copy, modify, and distribute this
software and its documentation for any purpose, provided that the
above copyright notice and the following two paragraphs appear in
all copies of this software.

IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
MediaConch/Qt_Licenses/qtgui-attribution-angle.html0000644000000000000000000000475613216666133021447 0ustar rootroot ANGLE Library

ANGLE Library

Used on Windows to implement OpenGL ES on top of DirectX. Configure with -no-opengl, or -opengl desktop to exclude.

The sources can be found in qtbase/src/3rdparty/angle.

Copyright (C) 2002-2013 The ANGLE Project Authors

BSD 3-clause "New" or "Revised" License.

// Copyright (C) 2002-2013 The ANGLE Project Authors.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
//     Redistributions of source code must retain the above copyright
//     notice, this list of conditions and the following disclaimer.
//
//     Redistributions in binary form must reproduce the above
//     copyright notice, this list of conditions and the following
//     disclaimer in the documentation and/or other materials provided
//     with the distribution.
//
//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
//     Ltd., nor the names of their contributors may be used to endorse
//     or promote products derived from this software without specific
//     prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-qtemporaryfile.html0000644000000000000000000000470213216666133023557 0ustar rootroot Parts of QTemporaryFile

Parts of QTemporaryFile

Generates a unique file path and returns a native handle to the open file.

Used in Qt Core. Disable the qtemporaryfile feature to avoid.

The sources can be found in qtbase/src/corelib/io/qtemporaryfile.cpp.

Copyright (c) 1987, 1993 The Regents of the University of California.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 1987, 1993
     The Regents of the University of California.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-fontconfig.html0000644000000000000000000000343713216666133023073 0ustar rootroot fontconfig

fontconfig

Project Homepage

fontconfig/COPYING

Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard
Copyright © 2005 Patrick Lam
Copyright © 2009 Roozbeh Pournader
Copyright © 2008,2009 Red Hat, Inc.
Copyright © 2008 Danilo Šegan
Copyright © 2012 Google, Inc.


Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of the author(s) not be used in
advertising or publicity pertaining to distribution of the software without
specific, written prior permission.  The authors make no
representations about the suitability of this software for any purpose.  It
is provided "as is" without express or implied warranty.

THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtlocation-attribution-poly2tri.html0000644000000000000000000000510413216666133023155 0ustar rootroot Poly2Tri Polygon Triangulation Library

Poly2Tri Polygon Triangulation Library

Poly2Tri is a sweepline constrained Delaunay Polygon Triangulation Library.

Used in the QML plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/poly2tri.

Project Homepage

Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors

BSD 3-clause "New" or "Revised" License.

Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
http://code.google.com/p/poly2tri/

All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.
* Neither the name of Poly2Tri nor the names of its contributors may be
  used to endorse or promote products derived from this software without specific
  prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-american-fuzzy-lop.html0000644000000000000000000002613413216666133024472 0ustar rootroot American Fuzzy Lop

American Fuzzy Lop

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-unique-resource.html0000644000000000000000000000454413216666133026342 0ustar rootroot unique_resource

unique_resource

General RAII wrapper for exclusive ownership resource management

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/unique_resource.

Project Homepage

Copyright (c) 2015 okdshin

Boost Software License 1.0.

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-leakcanary.html0000644000000000000000000002612113216666133023044 0ustar rootroot LeakCanary

LeakCanary

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtgui-attribution-wintab.html0000644000000000000000000000144213216666133021632 0ustar rootroot Wintab API

Wintab API

Wintab is a de facto API for pointing devices on Windows.

Used in the Qt platform plugin for Windows. Configure with -DQT_NO_TABLETEVENT to avoid.

The sources can be found in qtbase/src/3rdparty/wintab.

Project Homepage

Copyright 1991-1998 by LCS/Telegraphics.

Public Domain.

MediaConch/Qt_Licenses/qtgui-attribution-angle-systeminfo.html0000644000000000000000000000421713216666133023635 0ustar rootroot ANGLE: Systeminfo

ANGLE: Systeminfo

Used on Windows to implement OpenGL ES on top of DirectX. Configure with -no-opengl, or -opengl desktop to exclude.

The sources can be found in qtbase/src/3rdparty/angle/src/third_party/systeminfo.

Copyright (C) 2009 Apple Inc. All Rights Reserved.

BSD 2-clause "Simplified" License.

Copyright (C) 2009 Apple Inc. All Rights Reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-webkit.html0000644000000000000000000014533613216666133022231 0ustar rootroot WebKit

WebKit

Project Homepage

(WebKit doesn't distribute an explicit license.  This LICENSE is derived from
license text in the source.)

Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007 Alexander Kellett, Alexey Proskuryakov, Alex Mathews, Allan
Sandfeld Jensen, Alp Toker, Anders Carlsson, Andrew Wellington, Antti
Koivisto, Apple Inc., Arthur Langereis, Baron Schwartz, Bjoern Graf,
Brent Fulgham, Cameron Zwarich, Charles Samuels, Christian Dywan,
Collabora Ltd., Cyrus Patel, Daniel Molkentin, Dave Maclachlan, David
Smith, Dawit Alemayehu, Dirk Mueller, Dirk Schulze, Don Gibson, Enrico
Ros, Eric Seidel, Frederik Holljen, Frerich Raabe, Friedmann Kleint,
George Staikos, Google Inc., Graham Dennis, Harri Porten, Henry Mason,
Hiroyuki Ikezoe, Holger Hans Peter Freyther, IBM, James G. Speth, Jan
Alonzo, Jean-Loup Gailly, John Reis, Jonas Witt, Jon Shier, Jonas
Witt, Julien Chaffraix, Justin Haygood, Kevin Ollivier, Kevin Watters,
Kimmo Kinnunen, Kouhei Sutou, Krzysztof Kowalczyk, Lars Knoll, Luca
Bruno, Maks Orlovich, Malte Starostik, Mark Adler, Martin Jones,
Marvin Decker, Matt Lilek, Michael Emmel, Mitz Pettel, mozilla.org,
Netscape Communications Corporation, Nicholas Shanks, Nikolas
Zimmermann, Nokia, Oliver Hunt, Opened Hand, Paul Johnston, Peter
Kelly, Pioneer Research Center USA, Rich Moore, Rob Buis, Robin Dunn,
Ronald Tschalär, Samuel Weinig, Simon Hausmann, Staikos Computing
Services Inc., Stefan Schimanski, Symantec Corporation, The Dojo
Foundation, The Karbon Developers, Thomas Boyer, Tim Copperfield,
Tobias Anton, Torben Weis, Trolltech, University of Cambridge, Vaclav
Slavik, Waldo Bastian, Xan Lopez, Zack Rusin

The terms and conditions vary from file to file, but are one of:

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the
   distribution.

*OR*

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the
   distribution.
3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
   its contributors may be used to endorse or promote products derived
   from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


                  GNU LIBRARY GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1991 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the library GPL.  It is
 numbered 2 because it goes with version 2 of the ordinary GPL.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it.  You can use it for
your libraries, 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 library, or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

  Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library.  If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, 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 companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software.  To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.

  Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs.  This
license, the GNU Library General Public License, applies to certain
designated libraries.  This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.

  The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it.  Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program.  However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

  Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries.  We
concluded that weaker conditions might promote sharing better.

  However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves.  This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them.  (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.)  The hope is that this
will lead to faster development of free libraries.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, while the latter only
works together with the library.

  Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.

                  GNU LIBRARY GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License").  Each licensee is
addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    c) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    d) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Library 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS
MediaConch/Qt_Licenses/qtgui-attribution-android-native-style.html0000644000000000000000000000250513216666133024411 0ustar rootroot Native Style for Android

Native Style for Android

Used in Android platform plugin.

The sources can be found in qtbase/src/3rdparty/android.

Copyright (C) 2005 The Android Open Source Project

Apache License 2.0.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootMediaConch/Qt_Licenses/qtwebengine-3rdparty-re2-an-efficient-principled-regular-expression-library.htmlMediaConch/Qt_Licenses/qtwebengine-3rdparty-re2-an-efficient-principled-regular-expression-library.h0000644000000000000000000000413413216666133032660 0ustar rootroot re2 - an efficient, principled regular expression library

re2 - an efficient, principled regular expression library

Project Homepage

// Copyright (c) 2009 The RE2 Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-hunspell.html0000644000000000000000000000214113216666133022560 0ustar rootroot hunspell

hunspell

Project Homepage

GPL 2.0/LGPL 2.1/MPL 1.1 tri-license

The contents of this software may be used under the terms of
the GNU General Public License Version 2 or later (the "GPL"), or
the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
intl/ directory) the Mozilla Public License Version 1.1 or later
(the "MPL", see COPYING.MPL).

Software distributed under these licenses is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
for the specific language governing rights and limitations under the licenses.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-web-animations-js.html0000644000000000000000000002615613216666133024271 0ustar rootroot Web Animations JS

Web Animations JS

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-jsoncpp.html0000644000000000000000000000612313216666133022406 0ustar rootroot jsoncpp

jsoncpp

Project Homepage

The JsonCpp library's source code, including accompanying documentation,
tests and demonstration applications, are licensed under the following
conditions...

The author (Baptiste Lepilleur) explicitly disclaims copyright in all
jurisdictions which recognize such a disclaimer. In such jurisdictions,
this software is released into the Public Domain.

In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
released under the terms of the MIT License (see below).

In jurisdictions which recognize Public Domain property, the user of this
software may choose to accept it either as 1) Public Domain, 2) under the
conditions of the MIT License (see below), or 3) under the terms of dual
Public Domain/MIT License conditions described here, as they choose.

The MIT License is about as close to Public Domain as a license can get, and is
described in clear, concise terms at:

   http://en.wikipedia.org/wiki/MIT_License

The full text of the MIT License follows:

========================================================================
Copyright (c) 2007-2010 Baptiste Lepilleur

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
========================================================================
(END LICENSE TEXT)

The MIT license is compatible with both the GPL and commercial
software, affording one all of the rights of Public Domain with the
minor nuisance of being required to keep the above copyright notice
and license text in the source code. Note also that by accepting the
Public Domain "license" you can re-license your copy using whatever
license you like.
MediaConch/Qt_Licenses/qtcore-attribution-rfc6234.html0000644000000000000000000000521213216666133021602 0ustar rootroot Secure Hash Algorithms SHA-384 and SHA-512

Secure Hash Algorithms SHA-384 and SHA-512

Implements the Secure Hash Algorithms SHA 384 and SHA-521

Used in Qt Core (QCryptographicHash and QMessageAuthenticationCode)

The sources can be found in qtbase/src/3rdparty/rfc6234.

Copyright (c) 2011 IETF Trust and the persons identified as authors of the code.

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2011 IETF Trust and the persons identified as
authors of the code.  All rights reserved.

Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the following
conditions are met:

- Redistributions of source code must retain the above
  copyright notice, this list of conditions and
  the following disclaimer.

- Redistributions in binary form must reproduce the above
  copyright notice, this list of conditions and the following
  disclaimer in the documentation and/or other materials provided
  with the distribution.

- Neither the name of Internet Society, IETF or IETF Trust, nor
  the names of specific contributors, may be used to endorse or
  promote products derived from this software without specific
  prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtvirtualkeyboard-attribution-openwnn.html0000644000000000000000000002572013216666133024462 0ustar rootroot OpenWnn

OpenWnn

OpenWnn is a Japanese keyboard/IME from the Android Open Source Project.

Optionally used in Qt Virtual Keyboard.

The sources can be found in qtvirtualkeyboard/src/virtualkeyboard/3rdparty/openwnn.

Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.

Apache License 2.0.

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of this License; and

You must cause any modified files to carry prominent notices stating that You changed the files; and

You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.


5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
MediaConch/Qt_Licenses/qtqml-attribution-masm.html0000644000000000000000000000543113216666133021312 0ustar rootroot JavaScriptCore Macro Assembler

JavaScriptCore Macro Assembler

Used in Qt QML.

The sources can be found in qtdeclarative/src/3rdparty/masm.

Copyright (C) 2003-2015 Apple Inc. All rights reserved.
Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com)
Copyright (C) 2007-2009 Torch Mobile, Inc. All rights reserved. (http://www.torchmobile.com/)
Copyright (C) 2009, 2010 University of Szeged
Copyright (C) 2009-2011 STMicroelectronics. All rights reserved.
Copyright (C) 2010 MIPS Technologies, Inc. All rights reserved.
Copyright (C) 2010 Peter Varga (pvarga@inf.u-szeged.hu), University of Szeged
Copyright (C) 2010 MIPS Technologies, Inc. All rights reserved.
Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
Copyright (C) 2011 Google Inc. All rights reserved.
Copyright (C) 2013 Samsung Electronics. All rights reserved.
Copyright (C) 2015 Cisco Systems, Inc. All rights reserved.
Copyright (c) 2002-2009 Vivek Thampi

BSD 2-clause "Simplified" License.

Copyright (C) 2012 Apple Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libcxxabi.html0000644000000000000000000000761613216666133022707 0ustar rootroot libcxxabi

libcxxabi

Project Homepage

==============================================================================
libc++abi License
==============================================================================

The libc++abi library is dual licensed under both the University of Illinois
"BSD-Like" license and the MIT license.  As a user of this code you may choose
to use it under either license.  As a contributor, you agree to allow your code
to be used under both.

Full text of the relevant licenses is included below.

==============================================================================

University of Illinois/NCSA
Open Source License

Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT

All rights reserved.

Developed by:

    LLVM Team

    University of Illinois at Urbana-Champaign

    http://llvm.org

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal with
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimers.

    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimers in the
      documentation and/or other materials provided with the distribution.

    * Neither the names of the LLVM Team, University of Illinois at
      Urbana-Champaign, nor the names of its contributors may be used to
      endorse or promote products derived from this Software without specific
      prior written permission.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
SOFTWARE.

==============================================================================

Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-earcut.html0000644000000000000000000000316013216666133024463 0ustar rootroot Earcut

Earcut

A fast polygon triangulation library.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/earcut.

Project Homepage

Copyright (c) 2015 Mapbox

ISC License.

ISC License

Copyright (c) 2015, Mapbox

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-ffmpeg.html0000644000000000000000000013767113216666133022213 0ustar rootroot ffmpeg

ffmpeg

Project Homepage

# License

Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
FFmpeg.

Some optional parts of FFmpeg are licensed under the GNU General Public License
version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
these parts are used by default, you have to explicitly pass `--enable-gpl` to
configure to activate them. In this case, FFmpeg's license changes to GPL v2+.

Specifically, the GPL parts of FFmpeg are:

- libpostproc
- optional x86 optimization in the files
    - `libavcodec/x86/flac_dsp_gpl.asm`
    - `libavcodec/x86/idct_mmx.c`
    - `libavfilter/x86/vf_removegrain.asm`
- the X11 grabber in `libavdevice/x11grab.c`
- the following building and testing tools
    - `compat/solaris/make_sunver.pl`
    - `doc/t2h.pm`
    - `doc/texi2pod.pl`
    - `libswresample/swresample-test.c`
    - `tests/checkasm/*`
    - `tests/tiny_ssim.c`
- the following filters in libavfilter:
    - `f_ebur128.c`
    - `vf_blackframe.c`
    - `vf_boxblur.c`
    - `vf_colormatrix.c`
    - `vf_cover_rect.c`
    - `vf_cropdetect.c`
    - `vf_delogo.c`
    - `vf_eq.c`
    - `vf_find_rect.c`
    - `vf_fspp.c`
    - `vf_geq.c`
    - `vf_histeq.c`
    - `vf_hqdn3d.c`
    - `vf_interlace.c`
    - `vf_kerndeint.c`
    - `vf_mcdeint.c`
    - `vf_mpdecimate.c`
    - `vf_owdenoise.c`
    - `vf_perspective.c`
    - `vf_phase.c`
    - `vf_pp.c`
    - `vf_pp7.c`
    - `vf_pullup.c`
    - `vf_repeatfields.c`
    - `vf_sab.c`
    - `vf_smartblur.c`
    - `vf_spp.c`
    - `vf_stereo3d.c`
    - `vf_super2xsai.c`
    - `vf_tinterlace.c`
    - `vf_uspp.c`
    - `vsrc_mptestsrc.c`

Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
the configure parameter `--enable-version3` will activate this licensing option
for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
`COPYING.GPLv3` to learn the exact legal terms that apply in this case.

There are a handful of files under other licensing terms, namely:

* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
  `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
  licensing details. Specifically note that you must credit the IJG in the
  documentation accompanying your program if you only distribute executables.
  You must also indicate any changes including additions and deletions to
  those three files in the documentation.
* `tests/reference.pnm` is under the expat license.


## External libraries

FFmpeg can be combined with a number of external libraries, which sometimes
affect the licensing of binaries resulting from the combination.

### Compatible libraries

The following libraries are under GPL:
- frei0r
- libcdio
- librubberband
- libvidstab
- libx264
- libx265
- libxavs
- libxvid

When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
passing `--enable-gpl` to configure.

The OpenCORE and VisualOn libraries are under the Apache License 2.0. That
license is incompatible with the LGPL v2.1 and the GPL v2, but not with
version 3 of those licenses. So to combine these libraries with FFmpeg, the
license version needs to be upgraded by passing `--enable-version3` to configure.

### Incompatible libraries

There are certain libraries you can combine with FFmpeg whose licenses are not
compatible with the GPL and/or the LGPL. If you wish to enable these
libraries, even in circumstances that their license may be incompatible, pass
`--enable-nonfree` to configure. But note that if you enable any of these
libraries the resulting binary will be under a complex license mix that is
more restrictive than the LGPL and that may result in additional obligations.
It is possible that these restrictions cause the resulting binary to be
unredistributable.

The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
incompatible with the GPLv2 and v3. To the best of our knowledge, they are
compatible with the LGPL.

The NVENC library, while its header file is licensed under the compatible MIT
license, requires a proprietary binary blob at run time, and is deemed to be
incompatible with the GPL. We are not certain if it is compatible with the
LGPL, but we require `--enable-nonfree` even with LGPL configurations in case
it is not.


********************************************************************************

libavcodec/arm/vp8dsp_armv6.S

VP8 ARMv6 optimisations

Copyright (c) 2010 Google Inc.
Copyright (c) 2010 Rob Clark &lt;rob@ti.com&gt;
Copyright (c) 2011 Mans Rullgard &lt;mans@mansr.com&gt;

This file is part of FFmpeg.

FFmpeg is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

FFmpeg is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with FFmpeg; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

This code was partially ported from libvpx, which uses this license:

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.

* Neither the name of Google nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

********************************************************************************

libavformat/oggparsespeex.c

Copyright (C) 2008  Reimar Döffinger

      Permission is hereby granted, free of charge, to any person
      obtaining a copy of this software and associated documentation
      files (the "Software"), to deal in the Software without
      restriction, including without limitation the rights to use, copy,
      modify, merge, publish, distribute, sublicense, and/or sell copies
      of the Software, and to permit persons to whom the Software is
      furnished to do so, subject to the following conditions:

      The above copyright notice and this permission notice shall be
      included in all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      DEALINGS IN THE SOFTWARE.

********************************************************************************

libavcodec/x86/xvididct.asm

XVID MPEG-4 VIDEO CODEC

 Conversion from gcc syntax to x264asm syntax with modifications
 by Christophe Gisquet &lt;christophe.gisquet@gmail.com&gt;

 ===========     SSE2 inverse discrete cosine transform     ===========

 Copyright(C) 2003 Pascal Massimino &lt;skal@planet-d.net&gt;

 Conversion to gcc syntax with modifications
 by Alexander Strange &lt;astrange@ithinksw.com&gt;

 Originally from dct/x86_asm/fdct_sse2_skal.asm in Xvid.

 Vertical pass is an implementation of the scheme:
  Loeffler C., Ligtenberg A., and Moschytz C.S.:
  Practical Fast 1D DCT Algorithm with Eleven Multiplications,
  Proc. ICASSP 1989, 988-991.

 Horizontal pass is a double 4x4 vector/matrix multiplication,
 (see also Intel's Application Note 922:
  http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
  Copyright (C) 1999 Intel Corporation)

 More details at http://skal.planet-d.net/coding/dct.html

 =======     MMX and XMM forward discrete cosine transform     =======

 Copyright(C) 2001 Peter Ross &lt;pross@xvid.org&gt;

 Originally provided by Intel at AP-922
 http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
 (See more app notes at http://developer.intel.com/vtune/cbts/strmsimd/appnotes.htm)
 but in a limited edition.
 New macro implements a column part for precise iDCT
 The routine precision now satisfies IEEE standard 1180-1990.

 Copyright(C) 2000-2001 Peter Gubanov &lt;peter@elecard.net.ru&gt;
 Rounding trick Copyright(C) 2000 Michel Lespinasse &lt;walken@zoy.org&gt;

 http://www.elecard.com/peter/idct.html
 http://www.linuxvideo.org/mpeg2dec/

 These examples contain code fragments for first stage iDCT 8x8
 (for rows) and first stage DCT 8x8 (for columns)

 conversion to gcc syntax by Michael Niedermayer

 ======================================================================

 This file is part of FFmpeg.

 FFmpeg is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.

 FFmpeg is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with FFmpeg; if not, write to the Free Software Foundation,
 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

********************************************************************************

libavcodec/arm/jrevdct_arm.S

C-like prototype :
        void j_rev_dct_arm(DCTBLOCK data)

   With DCTBLOCK being a pointer to an array of 64 'signed shorts'

   Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)

   Permission is hereby granted, free of charge, to any person obtaining a copy
   of this software and associated documentation files (the "Software"), to deal
   in the Software without restriction, including without limitation the rights
   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   copies of the Software, and to permit persons to whom the Software is
   furnished to do so, subject to the following conditions:

   The above copyright notice and this permission notice shall be included in
   all copies or substantial portions of the Software.

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

********************************************************************************

libswresample/version.h

Version macros.

This file is part of libswresample

libswresample is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

libswresample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with libswresample; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

********************************************************************************

libavcodec/faandct.c

Floating point AAN DCT
this implementation is based upon the IJG integer AAN DCT (see jfdctfst.c)

Copyright (c) 2003 Michael Niedermayer &lt;michaelni@gmx.at&gt;
Copyright (c) 2003 Roman Shaposhnik

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

********************************************************************************

libavformat/oggparsetheora.c

Copyright (C) 2005  Matthieu CASTET, Alex Beregszaszi

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

********************************************************************************

libswresample/swresample.h

Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)

This file is part of libswresample

libswresample is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

libswresample is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with libswresample; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

********************************************************************************

libavcodec/jfdctfst.c
libavcodec/jfdctint_template.c
libavcodec/jrevdct.c

This file is part of the Independent JPEG Group's software.

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and
you, its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1994-1996, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to
these conditions:
(1) If any part of the source code for this software is distributed, then
this README file must be included, with this copyright and no-warranty
notice unaltered; and any additions, deletions, or changes to the original
files must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work
of the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

These conditions apply to any software derived from or based on the IJG
code, not just to the unmodified library.  If you use our work, you ought
to acknowledge us.

Permission is NOT granted for the use of any IJG author's name or company
name in advertising or publicity relating to this software or products
derived from it.  This software may be referred to only as "the Independent
JPEG Group's software".

We specifically permit and encourage the use of this software as the basis
of commercial products, provided that all warranty or liability claims are
assumed by the product vendor.

********************************************************************************

libavcodec/fft_fixed_32.c
libavcodec/fft_init_table.c
libavcodec/fft_table.h
libavcodec/mdct_fixed_32.c
libavcodec/mips/aacdec_mips.c
libavcodec/mips/aacdec_mips.h
libavcodec/mips/aacpsdsp_mips.c
libavcodec/mips/aacsbr_mips.c
libavcodec/mips/aacsbr_mips.h
libavcodec/mips/amrwbdec_mips.h
libavcodec/mips/compute_antialias_fixed.h
libavcodec/mips/compute_antialias_float.h
libavcodec/mips/lsp_mips.h
libavcodec/mips/sbrdsp_mips.c
libavutil/fixed_dsp.c
libavutil/fixed_dsp.h
libavutil/mips/float_dsp_mips.c
libavutil/mips/libm_mips.h
libavutil/softfloat_tables.h

Copyright (c) 2012
MIPS Technologies, Inc., California.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the MIPS Technologies, Inc., nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

Authors:
Branimir Vasic   (bvasic@mips.com)
Darko Laus       (darko@mips.com)
Djordje Pesut    (djordje@mips.com)
Goran Cordasic   (goran@mips.com)
Nedeljko Babic   (nedeljko.babic imgtec com)
Mirjana Vulin    (mvulin@mips.com)
Stanislav Ocovaj (socovaj@mips.com)
Zoran Lukic      (zoranl@mips.com)

********************************************************************************

libavformat/oggdec.c
libavformat/oggdec.h
libavformat/oggparseogm.c
libavformat/oggparsevorbis.c

Copyright (C) 2005  Michael Ahlberg, Måns Rullgård

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

********************************************************************************

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-geometry-hpp.html0000644000000000000000000000323613216666133025624 0ustar rootroot geometry.hpp

geometry.hpp

C++ interfaces for geometry types, geometry collections, and features.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/geometry.hpp.

Project Homepage

Copyright (c) 2016 Mapbox

ISC License.

Copyright (c) 2016, Mapbox

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-geojson-cpp.html0000644000000000000000000000323313216666133025425 0ustar rootroot geojson-cpp

geojson-cpp

A C++14 library for converting GeoJSON into geometry.hpp representation.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/geojson-cpp.

Project Homepage

Copyright (c) 2016 Mapbox

ISC License.

Copyright (c) 2016, Mapbox

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-v4l-utils.html0000644000000000000000000006471713216666133022612 0ustar rootroot v4l-utils

v4l-utils

Project Homepage

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     51 Franklin Street, Suite 500, Boston, MA  02110-1335  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations
below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
^L
  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it
becomes a de-facto standard.  To achieve this, non-free programs must
be allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
^L
                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.
^L
  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
^L
  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at least
    three years, to give the same user the materials specified in
    Subsection 6a, above, for a charge no more than the cost of
    performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
^L
  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.
^L
  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
^L
  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS
^L
           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms
of the ordinary General Public License).

  To apply these terms, attach the following notices to the library.
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.


    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02111-1307  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or
your school, if any, to sign a "copyright disclaimer" for the library,
if necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James
  Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtwebengine-3rdparty-compact-encoding-detection.html0000644000000000000000000000405713216666133026124 0ustar rootroot Compact Encoding Detection

Compact Encoding Detection

Project Homepage

// Copyright (c) 2010 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libyuv.html0000644000000000000000000000370513216666133022247 0ustar rootroot libyuv

libyuv

Project Homepage

Copyright 2011 The LibYuv Project Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-easing.html0000644000000000000000000000452713216666133021767 0ustar rootroot Easing Equations by Robert Penner

Easing Equations by Robert Penner

Used in Qt Core (QEasingCurve).

The sources can be found in qtbase/src/3rdparty/easing.

Copyright (c) 2001 Robert Penner

BSD 3-clause "New" or "Revised" License.

Copyright (c) 2001 Robert Penner
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of the author nor the names of contributors may be used
      to endorse or promote products derived from this software without specific
      prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-quick-color-management-system.html0000644000000000000000000000315113216666133026614 0ustar rootroot Quick Color Management System

Quick Color Management System

Project Homepage

qcms
Copyright (C) 2009 Mozilla Corporation
Copyright (C) 1998-2007 Marti Maria

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-closure-compiler.html0000644000000000000000000002614213216666133024221 0ustar rootroot Closure compiler

Closure compiler

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-android-explicit-synchronization.html0000644000000000000000000002616313216666133027436 0ustar rootroot Android Explicit Synchronization

Android Explicit Synchronization

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libva.html0000644000000000000000000000302113216666133022021 0ustar rootroot libva

libva

Project Homepage

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sub license, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice (including the
next paragraph) shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libpng.html0000644000000000000000000001252613216666133022211 0ustar rootroot libpng

libpng

Project Homepage

This copy of the libpng notices is provided for your convenience.  In case of
any discrepancy between this copy and the notices in the file png.h that is
included in the libpng distribution, the latter shall prevail.

COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:

If you modify libpng you may insert additional notices immediately following
this sentence.

Using custom versions of pnglibconf.h and pngprefix.h for Chrome.

This code is released under the libpng license.

libpng versions 1.0.7, July 1, 2000 through 1.6.22, May 26, 2016 are
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, and are distributed according to the same
disclaimer and license as libpng-1.0.6 with the following individuals
added to the list of Contributing Authors:

   Simon-Pierre Cadieux
   Eric S. Raymond
   Mans Rullgard
   Cosmin Truta
   Gilles Vollant
   James Yu

and with the following additions to the disclaimer:

   There is no warranty against interference with your enjoyment of the
   library or against infringement.  There is no warranty that our
   efforts or the library will fulfill any of your particular purposes
   or needs.  This library is provided with all faults, and the entire
   risk of satisfactory quality, performance, accuracy, and effort is with
   the user.

Some files in the "contrib" directory and some configure-generated
files that are distributed with libpng have other copyright owners and
are released under other open source licenses.

libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, and are distributed according to the same disclaimer and
license as libpng-0.96, with the following individuals added to the list
of Contributing Authors:

   Tom Lane
   Glenn Randers-Pehrson
   Willem van Schaik

libpng versions 0.89, June 1996, through 0.96, May 1997, are
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
and are distributed according to the same disclaimer and license as
libpng-0.88, with the following individuals added to the list of
Contributing Authors:

   John Bowler
   Kevin Bracey
   Sam Bushell
   Magnus Holmgren
   Greg Roelofs
   Tom Tanner

Some files in the "scripts" directory have other copyright owners
but are released under this license.

libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.

For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals:

   Andreas Dilger
   Dave Martindale
   Guy Eric Schalnat
   Paul Schmidt
   Tim Wegner

The PNG Reference Library is supplied "AS IS".  The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
including, without limitation, the warranties of merchantability and of
fitness for any purpose.  The Contributing Authors and Group 42, Inc.
assume no liability for direct, indirect, incidental, special, exemplary,
or consequential damages, which may result from the use of the PNG
Reference Library, even if advised of the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:

  1. The origin of this source code must not be misrepresented.

  2. Altered versions must be plainly marked as such and must not
     be misrepresented as being the original source.

  3. This Copyright notice may not be removed or altered from any
     source or altered source distribution.

The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to
supporting the PNG file format in commercial products.  If you use this
source code in a product, acknowledgment is not required but would be
appreciated.

END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.

TRADEMARK:

The name "libpng" has not been registered by the Copyright owner
as a trademark in any jurisdiction.  However, because libpng has
been distributed and maintained world-wide, continually since 1995,
the Copyright owner claims "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized.

OSI CERTIFICATION:

Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.

EXPORT CONTROL:

The Copyright owner believes that the Export Control Classification
Number (ECCN) for libpng is EAR99, which means not subject to export
controls or International Traffic in Arms Regulations (ITAR) because
it is open source, publicly available software, that does not contain
any encryption software.  See the EAR, paragraphs 734.3(b)(3) and
734.7(b).

Glenn Randers-Pehrson
glennrp at users.sourceforge.net
May 26, 2016
MediaConch/Qt_Licenses/qtwebengine-3rdparty-gifplayer-animated-gif-library.html0000644000000000000000000002621713216666133026707 0ustar rootroot GifPlayer Animated GIF Library

GifPlayer Animated GIF Library

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-khronos-header-files.html0000644000000000000000000000600313216666133024740 0ustar rootroot Khronos header files

Khronos header files

Project Homepage

Copyright (c) 2007-2010 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.


SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)

Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice including the dates of first publication and either
this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of Silicon Graphics, Inc. shall
not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization from Silicon
Graphics, Inc.
MediaConch/Qt_Licenses/qtcore-attribution-zlib.html0000644000000000000000000000463613216666133021462 0ustar rootroot Data Compression Library (zlib)

Data Compression Library (zlib)

zlib is a general purpose data compression library.

Optionally used in Qt Core and and development tools. Configure with -system-zlib to avoid.

The sources can be found in qtbase/src/3rdparty/zlib.

Project Homepage, upstream version: 1.2.5

(C) 1995-2010 Jean-loup Gailly and Mark Adler

ZLib license.

This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly        Mark Adler
  jloup@gzip.org          madler@alumni.caltech.edu

If you use the zlib library in a product, we would appreciate *not* receiving
lengthy legal documents to sign.  The sources are provided for free but without
warranty of any kind.  The library has been entirely written by Jean-loup
Gailly and Mark Adler; it does not include third-party code.

If you redistribute modified sources, we would appreciate that you include in
the file ChangeLog history information documenting your changes.  Please read
the FAQ for more information on the distribution of modified source versions.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-fdlibm.html0000644000000000000000000000133213216666133022164 0ustar rootroot fdlibm

fdlibm

Project Homepage

Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.

Developed at SunSoft, a Sun Microsystems, Inc. business.
Permission to use, copy, modify, and distribute this
software is freely granted, provided that this notice
is preserved.
MediaConch/Qt_Licenses/qtcore-attribution-sha3-keccak.html0000644000000000000000000002074413216666133022575 0ustar rootroot Secure Hash Algorithm SHA-3 - Keccak

Secure Hash Algorithm SHA-3 - Keccak

SHA-3, originally known as Keccak, is a cryptographic hash function.

Used in Qt Core (QCryptographicHash).

The sources can be found in qtbase/src/3rdparty/sha3/KeccakF-1600-32-rvk.macros, qtbase/src/3rdparty/sha3/KeccakF-1600-32.macros, qtbase/src/3rdparty/sha3/KeccakF-1600-64.macros, qtbase/src/3rdparty/sha3/KeccakF-1600-interface.h, qtbase/src/3rdparty/sha3/KeccakF-1600-opt32.c, qtbase/src/3rdparty/sha3/KeccakF-1600-opt64.c, qtbase/src/3rdparty/sha3/KeccakF-1600-unrolling.macros, qtbase/src/3rdparty/sha3/KeccakNISTInterface.c, qtbase/src/3rdparty/sha3/KeccakNISTInterface.h, qtbase/src/3rdparty/sha3/KeccakSponge.c, and qtbase/src/3rdparty/sha3/KeccakSponge.h.

Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.

To the extent possible under law, the implementers have waived all copyright
and related or neighboring rights to the source code in this file.

Creative Commons Zero v1.0 Universal.

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF
THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS
DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES
RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.

Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and
Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner")
of an original work of authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing
to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and
without fear of later claims of infringement build upon, modify, incorporate in other works, reuse
and redistribute as freely as possible in any form whatsoever and for any purposes, including
without limitation commercial purposes. These owners may contribute to the Commons to promote the
ideal of a free culture and the further production of creative, cultural and scientific works, or to
gain reputation or greater distribution for their Work in part through the use and efforts of
others.

For these and/or other purposes and motivations, and without any expectation of additional
consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the
extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to
apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her
Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those
rights.

1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and
   related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights
   include, but are not limited to, the following:

  i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;

  ii. moral rights retained by the original author(s) and/or performer(s);

  iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;

  iv. rights protecting against unfair competition in regards to a Work, subject to the limitations
      in paragraph 4(a), below;

  v. rights protecting the extraction, dissemination, use and reuse of data in a Work;

  vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and
      of the Council of 11 March 1996 on the legal protection of databases, and under any national
      implementation thereof, including any amended or successor version of such directive); and

  vii. other similar, equivalent or corresponding rights throughout the world based on applicable
       law or treaty, and any national implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law,
   Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons,
   and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of
   action, whether now known or unknown (including existing as well as future claims and causes of
   action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by
   applicable law or treaty (including future time extensions), (iii) in any current or future
   medium and for any number of copies, and (iv) for any purpose whatsoever, including without
   limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the
   Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's
   heirs and successors, fully intending that such Waiver shall not be subject to revocation,
   rescission, cancellation, termination, or any other legal or equitable action to disrupt the
   quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of
   Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid
   or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent
   permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent
   the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non
   transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise
   Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for
   the maximum duration provided by applicable law or treaty (including future time extensions),
   (iii) in any current or future medium and for any number of copies, and (iv) for any purpose
   whatsoever, including without limitation commercial, advertising or promotional purposes (the
   "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to
   the Work. Should any part of the License for any reason be judged legally invalid or ineffective
   under applicable law, such partial invalidity or ineffectiveness shall not invalidate the
   remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i)
   exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any
   associated claims and causes of action with respect to the Work, in either case contrary to
   Affirmer's express Statement of Purpose.

4. Limitations and Disclaimers.

a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or
   otherwise affected by this document.

b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning
   the Work, express, implied, statutory or otherwise, including without limitation warranties of
   title, merchantability, fitness for a particular purpose, non infringement, or the absence of
   latent or other defects, accuracy, or the present or absence of errors, whether or not
   discoverable, all to the greatest extent permissible under applicable law.

c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work
   or any use thereof, including without limitation any person's Copyright and Related Rights in the
   Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents,
   permissions or other rights required for any use of the Work.

d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and
   has no duty or obligation with respect to this CC0 or use of the Work.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-bspatch.html0000644000000000000000000000335713216666133022364 0ustar rootroot bspatch

bspatch

Project Homepage

Copyright 2003,2004 Colin Percival
All rights reserved

Redistribution and use in source and binary forms, with or without
modification, are permitted providing that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-ots-opentype-sanitizer.html0000644000000000000000000000405013216666133025403 0ustar rootroot OTS (OpenType Sanitizer)

OTS (OpenType Sanitizer)

Project Homepage

// Copyright (c) 2009 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtlocation-attribution-clip2tri.html0000644000000000000000000000411413216666133023121 0ustar rootroot Clip2Tri Polygon Triangulation Library

Clip2Tri Polygon Triangulation Library

Clip2Tri can be used together with Clipper for robust triangulation.

Used in the QML plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/clip2tri.

Project Homepage

Copyright (c) 2014 Bitfighter developers

MIT License.

The MIT License (MIT)

Copyright (c) 2014 Bitfighter developers

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-expat-xml-parser.html0000644000000000000000000000316513216666133024146 0ustar rootroot Expat XML Parser

Expat XML Parser

Project Homepage

Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
Copyright (c) 2001-2016 Expat maintainers

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-polylabel.html0000644000000000000000000000320313216666133025161 0ustar rootroot polylabel

polylabel

A fast algorithm for finding polygon pole of inaccessibility.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/polylabel.

Project Homepage

Copyright (c) 2016 Mapbox

ISC License.

ISC License
Copyright (c) 2016 Mapbox

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-zlib.html0000644000000000000000000000306413216666133021673 0ustar rootroot zlib

zlib

Project Homepage

/* zlib.h -- interface of the 'zlib' general purpose compression library
  version 1.2.4, March 14th, 2010

  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly
  Mark Adler

* /

mozzconf.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-protozero.html0000644000000000000000000000432513216666133025247 0ustar rootroot protozero

protozero

Minimalist protocol buffer decoder and encoder in C++.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/protozero.

Project Homepage

Copyright (c) Mapbox

BSD 2-clause "Simplified" License.

protozero copyright (c) Mapbox.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in
      the documentation and/or other materials provided with the
      distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-network-security-services-nss.html0000644000000000000000000004433113216666133026715 0ustar rootroot Network Security Services (NSS)

Network Security Services (NSS)

Project Homepage

NSS is available under the Mozilla Public License, version 2, a copy of which
is below.

Note on GPL Compatibility
-------------------------

The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
General Public License (GPL) version 2, or any later version of that
license, to make a Larger Work, and distribute the result under the GPL.
The only condition is that you must also make NSS, and any changes you
have made to it, available to recipients under the terms of the MPL 2 also.

Anyone who receives the combined code from you does not have to continue
to dual licence in this way, and may, if they wish, distribute under the
terms of either of the two licences - either the MPL alone or the GPL
alone. However, we discourage people from distributing copies of NSS under
the GPL alone, because it means that any improvements they make cannot be
reincorporated into the main version of NSS. There is never a need to do
this for license compatibility reasons.

Note on LGPL Compatibility
--------------------------

The above also applies to combining MPLed code in a single library with
code under the GNU Lesser General Public License (LGPL) version 2.1, or
any later version of that license. If the LGPLed code and the MPLed code
are not in the same library, then the copyleft coverage of the two
licences does not overlap, so no issues arise.


Mozilla Public License Version 2.0
==================================

1. Definitions
--------------

1.1. "Contributor"
    means each individual or legal entity that creates, contributes to
    the creation of, or owns Covered Software.

1.2. "Contributor Version"
    means the combination of the Contributions of others (if any) used
    by a Contributor and that particular Contributor's Contribution.

1.3. "Contribution"
    means Covered Software of a particular Contributor.

1.4. "Covered Software"
    means Source Code Form to which the initial Contributor has attached
    the notice in Exhibit A, the Executable Form of such Source Code
    Form, and Modifications of such Source Code Form, in each case
    including portions thereof.

1.5. "Incompatible With Secondary Licenses"
    means

    (a) that the initial Contributor has attached the notice described
        in Exhibit B to the Covered Software; or

    (b) that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the
        terms of a Secondary License.

1.6. "Executable Form"
    means any form of the work other than Source Code Form.

1.7. "Larger Work"
    means a work that combines Covered Software with other material, in
    a separate file or files, that is not Covered Software.

1.8. "License"
    means this document.

1.9. "Licensable"
    means having the right to grant, to the maximum extent possible,
    whether at the time of the initial grant or subsequently, any and
    all of the rights conveyed by this License.

1.10. "Modifications"
    means any of the following:

    (a) any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered
        Software; or

    (b) any new file in Source Code Form that contains any Covered
        Software.

1.11. "Patent Claims" of a Contributor
    means any patent claim(s), including without limitation, method,
    process, and apparatus claims, in any patent Licensable by such
    Contributor that would be infringed, but for the grant of the
    License, by the making, using, selling, offering for sale, having
    made, import, or transfer of either its Contributions or its
    Contributor Version.

1.12. "Secondary License"
    means either the GNU General Public License, Version 2.0, the GNU
    Lesser General Public License, Version 2.1, the GNU Affero General
    Public License, Version 3.0, or any later versions of those
    licenses.

1.13. "Source Code Form"
    means the form of the work preferred for making modifications.

1.14. "You" (or "Your")
    means an individual or a legal entity exercising rights under this
    License. For legal entities, "You" includes any entity that
    controls, is controlled by, or is under common control with You. For
    purposes of this definition, "control" means (a) the power, direct
    or indirect, to cause the direction or management of such entity,
    whether by contract or otherwise, or (b) ownership of more than
    fifty percent (50%) of the outstanding shares or beneficial
    ownership of such entity.

2. License Grants and Conditions
--------------------------------

2.1. Grants

Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:

(a) under intellectual property rights (other than patent or trademark)
    Licensable by such Contributor to use, reproduce, make available,
    modify, display, perform, distribute, and otherwise exploit its
    Contributions, either on an unmodified basis, with Modifications, or
    as part of a Larger Work; and

(b) under Patent Claims of such Contributor to make, use, sell, offer
    for sale, have made, import, and otherwise transfer either its
    Contributions or its Contributor Version.

2.2. Effective Date

The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.

2.3. Limitations on Grant Scope

The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:

(a) for any code that a Contributor has removed from Covered Software;
    or

(b) for infringements caused by: (i) Your and any other third party's
    modifications of Covered Software, or (ii) the combination of its
    Contributions with other software (except as part of its Contributor
    Version); or

(c) under Patent Claims infringed by Covered Software in the absence of
    its Contributions.

This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).

2.4. Subsequent Licenses

No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).

2.5. Representation

Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.

2.7. Conditions

Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.

3. Responsibilities
-------------------

3.1. Distribution of Source Form

All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.

3.2. Distribution of Executable Form

If You distribute Covered Software in Executable Form then:

(a) such Covered Software must also be made available in Source Code
    Form, as described in Section 3.1, and You must inform recipients of
    the Executable Form how they can obtain a copy of such Source Code
    Form by reasonable means in a timely manner, at a charge no more
    than the cost of distribution to the recipient; and

(b) You may distribute such Executable Form under the terms of this
    License, or sublicense it under different terms, provided that the
    license for the Executable Form does not attempt to limit or alter
    the recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).

3.4. Notices

You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.

4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.

5. Termination
--------------

5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.

************************************************************************
*                                                                      *
*  6. Disclaimer of Warranty                                           *
*  -------------------------                                           *
*                                                                      *
*  Covered Software is provided under this License on an "as is"       *
*  basis, without warranty of any kind, either expressed, implied, or  *
*  statutory, including, without limitation, warranties that the       *
*  Covered Software is free of defects, merchantable, fit for a        *
*  particular purpose or non-infringing. The entire risk as to the     *
*  quality and performance of the Covered Software is with You.        *
*  Should any Covered Software prove defective in any respect, You     *
*  (not any Contributor) assume the cost of any necessary servicing,   *
*  repair, or correction. This disclaimer of warranty constitutes an   *
*  essential part of this License. No use of any Covered Software is   *
*  authorized under this License except under this disclaimer.         *
*                                                                      *
************************************************************************

************************************************************************
*                                                                      *
*  7. Limitation of Liability                                          *
*  --------------------------                                          *
*                                                                      *
*  Under no circumstances and under no legal theory, whether tort      *
*  (including negligence), contract, or otherwise, shall any           *
*  Contributor, or anyone who distributes Covered Software as          *
*  permitted above, be liable to You for any direct, indirect,         *
*  special, incidental, or consequential damages of any character      *
*  including, without limitation, damages for lost profits, loss of    *
*  goodwill, work stoppage, computer failure or malfunction, or any    *
*  and all other commercial damages or losses, even if such party      *
*  shall have been informed of the possibility of such damages. This   *
*  limitation of liability shall not apply to liability for death or   *
*  personal injury resulting from such party's negligence to the       *
*  extent applicable law prohibits such limitation. Some               *
*  jurisdictions do not allow the exclusion or limitation of           *
*  incidental or consequential damages, so this exclusion and          *
*  limitation may not apply to You.                                    *
*                                                                      *
************************************************************************

8. Litigation
-------------

Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.

9. Miscellaneous
----------------

This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.

10. Versions of the License
---------------------------

10.1. New Versions

Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.

10.2. Effect of New Versions

You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.

10.3. Modified Versions

If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses

If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice
-------------------------------------------

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------

  This Source Code Form is "Incompatible With Secondary Licenses", as
  defined by the Mozilla Public License, v. 2.0.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-protocol-buffers.html0000644000000000000000000000511613216666133024226 0ustar rootroot Protocol Buffers

Protocol Buffers

Project Homepage

This license applies to all parts of Protocol Buffers except the following:

  - Atomicops support for generic gcc, located in
    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
    This file is copyrighted by Red Hat Inc.

  - Atomicops support for AIX/POWER, located in
    src/google/protobuf/stubs/atomicops_internals_power.h.
    This file is copyrighted by Bloomberg Finance LP.

Copyright 2014, Google Inc.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it.  This code is not
standalone and requires a support library to be linked with it.  This
support library is itself covered by the above license.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-mesa.html0000644000000000000000000006511113216666133021661 0ustar rootroot mesa

mesa

Project Homepage

The default Mesa license is as follows:

Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



Some parts of Mesa are copyrighted under the GNU LGPL.  See the
Mesa/docs/COPYRIGHT file for details.

The following is the standard GNU copyright file.
----------------------------------------------------------------------


                  GNU LIBRARY GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1991 Free Software Foundation, Inc.
                    675 Mass Ave, Cambridge, MA 02139, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the library GPL.  It is
 numbered 2 because it goes with version 2 of the ordinary GPL.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it.  You can use it for
your libraries, 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 library, or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

  Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library.  If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, 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 companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software.  To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.

  Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs.  This
license, the GNU Library General Public License, applies to certain
designated libraries.  This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.

  The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it.  Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program.  However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

  Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries.  We
concluded that weaker conditions might promote sharing better.

  However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves.  This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them.  (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.)  The hope is that this
will lead to faster development of free libraries.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, while the latter only
works together with the library.

  Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.

                  GNU LIBRARY GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License").  Each licensee is
addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    c) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    d) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Library 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

     Appendix: How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtvirtualkeyboard-attribution-pinyin.html0000644000000000000000000002675113216666133024311 0ustar rootroot PinyinIME

PinyinIME

PinyinIME is an input method engine for Pinyin (the official romanization system for Standard Chinese in mainland China, Malaysia, Singapore, and Taiwan) from the Android Open Source Project.

Optionally used in Qt Virtual Keyboard.

The sources can be found in qtvirtualkeyboard/src/virtualkeyboard/3rdparty/pinyin.

Copyright (C) 2009 The Android Open Source Project

Apache License 2.0.

Copyright (c) 2009, The Android Open Source Project

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libjpeg-turbo.html0000644000000000000000000000657313216666133023510 0ustar rootroot libjpeg-turbo

libjpeg-turbo

Project Homepage

libjpeg-turbo Licenses
======================

libjpeg-turbo is covered by three compatible BSD-style open source licenses:

- The IJG (Independent JPEG Group) License, which is listed in
  [README.ijg](README.ijg)

  This license applies to the libjpeg API library and associated programs
  (any code inherited from libjpeg, and any modifications to that code.)

- The Modified (3-clause) BSD License, which is listed in
  [turbojpeg.c](turbojpeg.c)

  This license covers the TurboJPEG API library and associated programs.

- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc)

  This license is a subset of the other two, and it covers the libjpeg-turbo
  SIMD extensions.


Complying with the libjpeg-turbo Licenses
=========================================

This section provides a roll-up of the libjpeg-turbo licensing terms, to the
best of our understanding.

1.  If you are distributing a modified version of the libjpeg-turbo source,
    then:

    1.  You cannot alter or remove any existing copyright or license notices
        from the source.

        **Origin**
        - Clause 1 of the IJG License
        - Clause 1 of the Modified BSD License
        - Clauses 1 and 3 of the zlib License

    2.  You must add your own copyright notice to the header of each source
        file you modified, so others can tell that you modified that file (if
        there is not an existing copyright header in that file, then you can
        simply add a notice stating that you modified the file.)

        **Origin**
        - Clause 1 of the IJG License
        - Clause 2 of the zlib License

    3.  You must include the IJG README file, and you must not alter any of the
        copyright or license text in that file.

        **Origin**
        - Clause 1 of the IJG License

2.  If you are distributing only libjpeg-turbo binaries without the source, or
    if you are distributing an application that statically links with
    libjpeg-turbo, then:

    1.  Your product documentation must include a message stating:

        This software is based in part on the work of the Independent JPEG
        Group.

        **Origin**
        - Clause 2 of the IJG license

    2.  If your binary distribution includes or uses the TurboJPEG API, then
        your product documentation must include the text of the Modified BSD
        License.

        **Origin**
        - Clause 2 of the Modified BSD License

3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the
    contributors thereof in advertising, publicity, etc.

    **Origin**
    - IJG License
    - Clause 3 of the Modified BSD License

4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
    free of defects, nor do we accept any liability for undesirable
    consequences resulting from your use of the software.

    **Origin**
    - IJG License
    - Modified BSD License
    - zlib License
MediaConch/Qt_Licenses/qtwebengine-3rdparty-sqlite.html0000644000000000000000000000132313216666133022230 0ustar rootroot sqlite

sqlite

Project Homepage

The author disclaims copyright to this source code.  In place of
a legal notice, here is a blessing:

   May you do good and not evil.
   May you find forgiveness for yourself and forgive others.
   May you share freely, never taking more than you give.
MediaConch/Qt_Licenses/qtcore-attribution-qbkcodec.html0000644000000000000000000000477213216666133022276 0ustar rootroot Text Codec: GBK

Text Codec: GBK

The GBK codec provides conversion to and from the Chinese GB18030/GBK/GB2312 encoding.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qgb18030codec.cpp.

Copyright (C) 2000 TurboLinux, Inc.  Written by Justin Yu and Sean Chen.
Copyright (C) 2001, 2002 Turbolinux, Inc.  Written by James Su.
Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd.  Written by Anthony Fok.

BSD 2-clause "Simplified" License.

Copyright (C) 2000 TurboLinux, Inc.  Written by Justin Yu and Sean Chen.
Copyright (C) 2001, 2002 Turbolinux, Inc.  Written by James Su.
Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd.  Written by Anthony Fok.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-pdfium.html0000644000000000000000000000376413216666133022226 0ustar rootroot PDFium

PDFium

Project Homepage

// Copyright 2014 PDFium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtsql-attribution-sqlite.html0000644000000000000000000000167713216666133021674 0ustar rootroot SQLite

SQLite

SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.

Used in Qt SQL Lite plugin. Configure Qt with -system-sqlite or -no-sqlite to avoid.

The sources can be found in qtbase/src/3rdparty/sqlite.

Project Homepage, upstream version: 3.16.2

The authors disclaim copyright to the source code. However, a license can be obtained if needed.

Public Domain.

MediaConch/Qt_Licenses/qtwebengine-3rdparty-compact-language-detector-v3.html0000644000000000000000000002721513216666133026303 0ustar rootroot Compact Language Detector v3

Compact Language Detector v3

Project Homepage

Copyright 2016 Google Inc.  All rights reserved.

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2016, Google Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
MediaConch/Qt_Licenses/qtcore-attribution-forkfd.html0000644000000000000000000000370213216666133021766 0ustar rootroot forkfd

forkfd

Used on most Unix platforms in Qt Core.

The sources can be found in qtbase/src/3rdparty/forkfd.

Copyright (C) 2016 Intel Corporation
Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com

MIT License.

Copyright (C) 2016 Intel Corporation.
Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-the-library-to-input-validate-and-display-addresses.html0000644000000000000000000002626213216666133032704 0ustar rootroot The library to input, validate, and display addresses.

The library to input, validate, and display addresses.

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-the-usb-id-repository.html0000644000000000000000000000373613216666133025117 0ustar rootroot The USB ID Repository

The USB ID Repository

Project Homepage

Copyright (c) 2012, Linux USB Project
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

o Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.

o Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution.

o Neither the name of the Linux USB Project nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-css-color-parser.html0000644000000000000000000000155013216666133026377 0ustar rootroot CSS Color Parser

CSS Color Parser

C++ parser for CSS color strings.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/csscolorparser.

Project Homepage

Copyright (c) 2012 Dean McNamee, 2014 Konstantin Käfer

MIT License.

MediaConch/Qt_Licenses/qtwebengine-3rdparty-cocoa-extension-code-from-camino.html0000644000000000000000000000426413216666133027151 0ustar rootroot Cocoa extension code from Camino

Cocoa extension code from Camino

Project Homepage

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** * /
MediaConch/Qt_Licenses/qtgui-attribution-opengl-es2-headers.html0000644000000000000000000000407513216666133023737 0ustar rootroot OpenGL ES 2 Headers

OpenGL ES 2 Headers

OpenGL ES 2 header generated from the Khronos OpenGL / OpenGL ES XML API Registry.

Used on Windows and Linux in the OpenGL related headers of Qt GUI.

The sources can be found in qtbase/src/gui/opengl/qopengles2ext.h.

Project Homepage, upstream version: Revision 27673

Copyright (c) 2013-2014 The Khronos Group Inc.

MIT License.

Copyright (c) 2013-2014 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-fips181.html0000644000000000000000000000364313216666133022131 0ustar rootroot fips181

fips181

Project Homepage

Copyright (c) 1999, 2000, 2001, 2002
Adel I. Mirzazhanov. All rights reserved

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

     1.Redistributions of source code must retain the above copyright notice,
       this list of conditions and the following disclaimer.
     2.Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
     3.The name of the author may not be used to endorse or promote products
       derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN  NO  EVENT  SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES;  LOSS OF USE,  DATA,  OR  PROFITS;  OR BUSINESS
INTERRUPTION)  HOWEVER  CAUSED  AND  ON  ANY  THEORY OF LIABILITY,
WHETHER  IN  CONTRACT,   STRICT   LIABILITY,  OR  TORT  (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-variant.html0000644000000000000000000000457713216666133024661 0ustar rootroot variant

variant

A header-only alternative to boost::variant for C++11 and C++14.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/variant.

Project Homepage

Copyright (c) Mapbox

BSD 3-clause "New" or "Revised" License.

Copyright (c) MapBox
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this
  list of conditions and the following disclaimer in the documentation and/or
  other materials provided with the distribution.
- Neither the name "MapBox" nor the names of its contributors may be
  used to endorse or promote products derived from this software without
  specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-smhasher.html0000644000000000000000000000320113216666133022536 0ustar rootroot SMHasher

SMHasher

Project Homepage

All MurmurHash source files are placed in the public domain.

The license below applies to all other code in SMHasher:

Copyright (c) 2011 Google, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-david-m-gay-s-floating-point-routines.html0000644000000000000000000000257313216666133030074 0ustar rootroot David M. Gay's floating point routines

David M. Gay's floating point routines

Project Homepage

/****************************************************************
 *
 * The author of this software is David M. Gay.
 *
 * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose without fee is hereby granted, provided that this entire notice
 * is included in all copies of any software which is or includes a copy
 * or modification of this software and in all copies of the supporting
 * documentation for such software.
 *
 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
 *
 *************************************************************** /
MediaConch/Qt_Licenses/index.html0000644000000000000000000010762713216666133016000 0ustar rootroot

Qt Core

Data Compression Library (zlib)

ZLib license

Easing Equations by Robert Penner

BSD 3-clause "New" or "Revised" License

Efficient Binary-Decimal and Decimal-Binary Conversion Routines for IEEE Doubles

BSD 3-clause "New" or "Revised" License

FreeBSD strtoll and strtoull

BSD 3-clause "New" or "Revised" License

MD4

Public Domain

MD5

Public Domain

PCRE2

BSD 3-clause "New" or "Revised" License

Parts of QTemporaryFile

BSD 3-clause "New" or "Revised" License

QEventDispatcher on macOS

BSD 3-clause "New" or "Revised" License

Secure Hash Algorithm SHA-1

Public Domain

Secure Hash Algorithm SHA-3 - Keccak

Creative Commons Zero v1.0 Universal

Secure Hash Algorithm SHA-3 - brg_endian

BSD 3-clause "New" or "Revised" License

Secure Hash Algorithms SHA-384 and SHA-512

BSD 3-clause "New" or "Revised" License

Text Codec: EUC-JP

BSD 2-clause "Simplified" License

Text Codec: EUC-KR

BSD 2-clause "Simplified" License

Text Codec: GBK

BSD 2-clause "Simplified" License

Text Codec: ISO 2022-JP (JIS)

BSD 2-clause "Simplified" License

Text Codec: Shift-JIS

BSD 2-clause "Simplified" License

Text Codec: TSCII

BSD 2-clause "Simplified" License

Text Codecs: Big5, Big5-HKSCS

BSD 2-clause "Simplified" License

forkfd

MIT License

Qt GUI

ANGLE Library

BSD 3-clause "New" or "Revised" License

ANGLE: Array Bounds Clamper for WebKit

BSD 2-clause "Simplified" License

ANGLE: Murmurhash

Public Domain

ANGLE: Systeminfo

BSD 2-clause "Simplified" License

ANGLE: trace_event

BSD 3-clause "New" or "Revised" License

Cocoa Platform Plugin

BSD 3-clause "New" or "Revised" License

HarfBuzz

MIT License

HarfBuzz-NG

MIT License

IAccessible2 IDL Specification

BSD 3-clause "New" or "Revised" License

LibJPEG

Independent JPEG Group License

LibPNG

libpng License

Native Style for Android

Apache License 2.0

OpenGL ES 2 Headers

MIT License

OpenGL Headers

MIT License

Pixman

MIT License

Smooth Scaling Algorithm

BSD 2-clause "Simplified" License and Imlib2 License

Wintab API

Public Domain

XCB

MIT License

Qt Image Formats

MNG reference library

zlib License

TIFF Software Distribution (libtiff)

libtiff License

WebP (libwebp)

BSD 3-clause "New" or "Revised" License

Qt Location

Boost

Boost Software License 1.0

C+11 <optional> polyfill

Boost Software License 1.0

CSS Color Parser

MIT License

Clip2Tri Polygon Triangulation Library

MIT License

Clipper Polygon Clipping Library

Boost Software License 1.0

Earcut

ISC License

Mapbox GL Native

BSD 2-clause "Simplified" License

Mapbox GL Shaders

BSD 3-clause "New" or "Revised" License

Poly2Tri Polygon Triangulation Library

BSD 3-clause "New" or "Revised" License

RapidJSON

MIT License

geojson-cpp

ISC License

geojson-vt-cpp

ISC License

geometry.hpp

ISC License

kdbush.hpp

ISC License

libc++

MIT and UIUC (BSD-like)

polylabel

ISC License

protozero

BSD 2-clause "Simplified" License

supercluster.hpp

ISC License

unique_resource

Boost Software License 1.0

variant

BSD 3-clause "New" or "Revised" License

Qt Purchasing

Base64 Decoder

Apache License 2.0

In-app billing service

Apache License 2.0

Public Key Verification

Apache License 2.0

Qt QML

JavaScriptCore Macro Assembler

BSD 2-clause "Simplified" License

Qt SQL

SQLite

Public Domain

Qt SVG

XSVG

MIT "Old Style" License

Qt Virtual Keyboard

Lipi Toolkit

MIT License

OpenWnn

Apache License 2.0

PinyinIME

Apache License 2.0

Traditional Chinese IME (tcime)

Apache License 2.0 and BSD 3-clause "New" or "Revised" License

Qt WebEngine

Almost Native Graphics Layer Engine

BSD

American Fuzzy Lop

Apache 2.0

Android Explicit Synchronization

Apache 2.0

Brotli

MIT

Chrome Custom Tabs - Example and Usage

Apache 2.0

ChromeVox

Apache 2.0

Chromium License

BSD

Chromium OS system API

BSD

Closure compiler

Apache 2.0

Cocoa extension code from Camino

MPL 1.1/GPL 2.0/LGPL 2.1

Compact Encoding Detection

Apache 2.0

Compact Language Detector v3

Apache 2.0

Crashpad

Apache 2.0

Darwin

Apple Public Source License 2.0

David M. Gay's floating point routines

MIT-like

Error Prone

Apache 2.0

Expat XML Parser

MIT

FlatBuffers

Apache 2.0

Flot Javascript/JQuery library for creating graphs

MIT

GifPlayer Animated GIF Library

Apache License 2.0

Google fork of Khronos reference front-end for GLSL and ESSL

MIT

Hardware Composer Plus

Apache 2.0

Headless Android Heap Analyzer

Apache 2.0, LGPL 2.1

IAccessible2 COM interfaces for accessibility

BSD

ISimpleDOM COM interfaces for accessibility

MPL 1.1/GPL 2.0/LGPL 2.1

Khronos header files

MIT/X11, SGI Free Software License B

LZMA SDK

Public Domain

LeakCanary

Apache 2.0

LevelDB: A Fast Persistent Key-Value Store

New BSD

NSBezierPath additions from Sean Patrick O'Brien

BSD

NVidia Control X Extension Library

MIT

Netscape Portable Runtime (NSPR)

MPL 1.1/GPL 2.0/LGPL 2.1

Network Security Services (NSS)

MPL 2

OTS (OpenType Sanitizer)

BSD

OpenH264

2-Clause BSD

OpenMAX DL

BSD

PDFium

BSD

PLY (Python Lex-Yacc)

BSD

Paul Hsieh's SuperFastHash

BSD

Protocol Buffers

BSD

Quick Color Management System

MIT

SMHasher

MIT, Public Domain

SPIR-V Tools

MIT

Shaderc

Apache 2.0

Skia

BSD

Snappy: A fast compressor/decompressor

New BSD

Strongtalk

BSD

Sudden Motion Sensor library

University of Illinois/NCSA Open Source License

SwiftShader

Apache 2.0 and compatible licenses

The USB ID Repository

BSD

The library to input, validate, and display addresses.

Apache 2.0

V8 JavaScript Engine

BSD

Vulkan API headers

MIT

WDS

LGPL 2.1

Web Animations JS

Apache 2.0

WebKit

BSD and GPL v2

WebM container parser and writer.

BSD

WebP image encoder/decoder

BSD

WebRTC

BSD

boringssl

BSDish

bspatch

BSD 2-Clause License

d3

BSD 3-Clause

dom-distiller-js

BSD

dynamic annotations

BSD

fdlibm

Freely Distributable

ffmpeg

LGPL 2.1

fips181

BSD 3-Clause

flac

BSD

fontconfig

MIT

gRPC, an RPC library and framework

BSD-style, copyright Google

google-glog's symbolization library

BSD

google-jstemplate

Apache 2.0

harfbuzz-ng

MIT

hunspell

MPL 1.1/GPL 2.0/LGPL 2.1

iccjpeg

Custom license

icu

MIT

inspector protocol

BSD

jsoncpp

MIT

libFuzzer

University of Illinois/NCSA Open Source

libcxx

MIT, University of Illinois/NCSA Open Source License

libcxxabi

MIT, University of Illinois/NCSA Open Source License

libevent

BSD

libjingle

BSD

libjpeg

Custom license

libjpeg-turbo

Custom license

libpng

libpng license

libsecret

LGPL 2.1

libsrtp

3-clause BSD

libudev

LGPL 2.1

libusbx

LGPL 2.1

libva

MIT

libvpx

BSD

libxml

MIT

libxslt

MIT

libyuv

BSD

linux-syscall-support

BSD

mach_override

MIT and 2-clause BSD

mesa

MIT and LGPL v2

minigbm

BSD

modp base64 decoder

BSD

mt19937ar

BSD

open-vcdiff

Apache 2.0, MIT, GPL v2 and custom licenses

opus

BSD

re2 - an efficient, principled regular expression library

BSD 3-Clause

sfntly

Apache 2.0

simplejson

MIT

sqlite

Public domain

tcmalloc

BSD

tlslite

Public domain and BSD

url_parse

BSD and MPL 1.1/GPL 2.0/LGPL 2.1

usrsctp

New BSD

v4l-utils

LGPL 2.1

woff2

Apache 2.0

x86inc

ISC from text in file header. Same text is copied to LICENSE file.

xdg-mime

Academic Free License version 2.0 or LGPL v2

xdg-user-dirs

MIT

xdg-utils

MIT

zlib

Custom license

MediaConch/Qt_Licenses/qtvirtualkeyboard-attribution-tcime.html0000644000000000000000000001263513216666133024100 0ustar rootroot Traditional Chinese IME (tcime)

Traditional Chinese IME (tcime)

Traditional Chinese IME (tcime) is an input method engine for traditional Chinese.

Optionally used in Qt Virtual Keyboard.

The sources can be found in qtvirtualkeyboard/src/virtualkeyboard/3rdparty/tcime.

Copyright 2010 Google Inc.
Copyrighy (c) 1999 TaBE Project.
Copyright (c) 1999 Pai-Hsiang Hsiao.
Copyright (c) 1999 Computer Systems and Communication Lab, Institute of Information Science, Academia Sinica.
Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois

Apache License 2.0 and BSD 3-clause "New" or "Revised" License.

The project in general is under the following licenses:

================================================================================
Copyright 2010 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================

File dict_phrases.dat is built from libTabe; the licenses of libTabe is:

================================================================================

  Copyrighy (c) 1999 TaBE Project.
  Copyright (c) 1999 Pai-Hsiang Hsiao.
  All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

  . Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  . Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.
  . Neither the name of the TaBE Project nor the names of its
    contributors may be used to endorse or promote products derived
    from this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  OF THE POSSIBILITY OF SUCH DAMAGE.



  Copyright (c) 1999 Computer Systems and Communication Lab,
                     Institute of Information Science, Academia Sinica.
  All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

  . Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  . Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.
  . Neither the name of the Computer Systems and Communication Lab
    nor the names of its contributors may be used to endorse or
    promote products derived from this software without specific
    prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  OF THE POSSIBILITY OF SUCH DAMAGE.


Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois
c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
================================================================================
MediaConch/Qt_Licenses/qtwebengine-3rdparty-boringssl.html0000644000000000000000000002307013216666133022734 0ustar rootroot boringssl

boringssl

Project Homepage

BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
licensing. Files that are completely new have a Google copyright and an ISC
license. This license is reproduced at the bottom of this file.

Contributors to BoringSSL are required to follow the CLA rules for Chromium:
https://cla.developers.google.com/clas

Some files from Intel are under yet another license, which is also included
underneath.

The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
OpenSSL License and the original SSLeay license apply to the toolkit. See below
for the actual license texts. Actually both licenses are BSD-style Open Source
licenses. In case of any license issues related to OpenSSL please contact
openssl-core@openssl.org.

The following are Google-internal bug numbers where explicit permission from
some authors is recorded for use of their work. (This is purely for our own
record keeping.)
  27287199
  27287880
  27287883

  OpenSSL License
  ---------------

/* ====================================================================
 * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    openssl-core@openssl.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
 * /

 Original SSLeay License
 -----------------------

/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 *
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 *
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 *
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 * /


ISC license used for completely new code in BoringSSL:

/* Copyright (c) 2015, Google Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * /


Some files from Intel carry the following license:

# Copyright (c) 2012, Intel Corporation
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# *  Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
# *  Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the
#    distribution.
#
# *  Neither the name of the Intel Corporation nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
#
# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-headless-android-heap-analyzer.html0000644000000000000000000003200213216666133026671 0ustar rootroot Headless Android Heap Analyzer

Headless Android Heap Analyzer

Project Homepage

perflib, guava:

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================================================
trove4j:

This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option) any
later version. This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
for more details. You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA


Two classes (HashFunctions and PrimeFinder) included in Trove are licensed
under the following terms:

Copyright (c) 1999 CERN - European Organization for Nuclear Research.
Permission to use, copy, modify, distribute and sell this software and its
documentation for any purpose is hereby granted without fee, provided that the
above copyright notice appear in all copies and that both that copyright notice
and this permission notice appear in supporting documentation. CERN makes no
representations about the suitability of this software for any purpose. It is
provided "as is" without expressed or implied warranty.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-rapidjson.html0000644000000000000000000001375213216666133025201 0ustar rootroot RapidJSON

RapidJSON

A fast JSON parser/generator for C++ with both SAX/DOM style API.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native/src/3rd_party/rapidjson.

Project Homepage

Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip

MIT License.

Tencent is pleased to support the open source community by making RapidJSON available.

Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.  All rights reserved.

If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License.
If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms.  Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license.
A copy of the MIT License is included in this file.

Other dependencies and licenses:

Open Source Software Licensed Under the BSD License:
--------------------------------------------------------------------

The msinttypes r29
Copyright (c) 2006-2013 Alexander Chemeris
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of  copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Open Source Software Licensed Under the JSON License:
--------------------------------------------------------------------

json.org
Copyright (c) 2002 JSON.org
All Rights Reserved.

JSON_checker
Copyright (c) 2002 JSON.org
All Rights Reserved.


Terms of the JSON License:
---------------------------------------------------

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Terms of the MIT License:
--------------------------------------------------------------------

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-isimpledom-com-interfaces-for-accessibility.html0000644000000000000000000000435613216666133031410 0ustar rootroot ISimpleDOM COM interfaces for accessibility

ISimpleDOM COM interfaces for accessibility

Project Homepage

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** * /
MediaConch/Qt_Licenses/qtwebengine-3rdparty-webrtc.html0000644000000000000000000000370013216666133022216 0ustar rootroot WebRTC

WebRTC

Project Homepage

Copyright (c) 2011, The WebRTC project authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtgui-attribution-smooth-scaling-algorithm.html0000644000000000000000000000772613216666133025274 0ustar rootroot Smooth Scaling Algorithm

Smooth Scaling Algorithm

Normal smoothscale method, based on Imlib2's smoothscale.

Used in Qt Gui (QImage::transformed() functions).

The sources can be found in qtbase/src/gui/painting/qimagescale.cpp.

Copyright (C) 2004, 2005 Daniel M. Duley.
    (C) Carsten Haitzler and various contributors.
    (C) Willem Monsuwe <willem@stack.nl>

BSD 2-clause "Simplified" License and Imlib2 License.

qimagetransform.cpp was contributed by Daniel M. Duley based on code from Imlib2.

Copyright (C) 2004, 2005 Daniel M. Duley

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



Imlib2 License

Copyright (C) 2000 Carsten Haitzler and various contributors (see
AUTHORS)

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies of the Software and its Copyright notices. In addition
publicly documented acknowledgment must be given that this software has
been used if no source code of this software is made available publicly.
This includes acknowledgments in either Copyright notices, Manuals,
Publicity and Marketing documents or any documentation provided with any
product containing this software. This License does not apply to any
software that links to the libraries provided by this software
(statically or dynamically), but only to the software provided.

Please see the COPYING.PLAIN for a plain-english explanation of this
notice and it's intent.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-sfntly.html0000644000000000000000000002611613216666133022255 0ustar rootroot sfntly

sfntly

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright 2011 Google Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-simplejson.html0000644000000000000000000000302313216666133023111 0ustar rootroot simplejson

simplejson

Project Homepage

Copyright (c) 2006 Bob Ippolito

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-nsbezierpath-additions-from-sean-patrick-o-brien.html0000644000000000000000000000344013216666133032254 0ustar rootroot NSBezierPath additions from Sean Patrick O'Brien

NSBezierPath additions from Sean Patrick O'Brien

Project Homepage

Copyright 2008 MolokoCacao
All rights reserved

Redistribution and use in source and binary forms, with or without
modification, are permitted providing that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-skia.html0000644000000000000000000000406313216666133021662 0ustar rootroot Skia

Skia

Project Homepage

// Copyright (c) 2011 Google Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

--------------------------------------------------------------------------------
MediaConch/Qt_Licenses/qtwebengine-3rdparty-google-jstemplate.html0000644000000000000000000002614613216666133024363 0ustar rootroot google-jstemplate

google-jstemplate

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-mt19937ar.html0000644000000000000000000000431313216666133022311 0ustar rootroot mt19937ar

mt19937ar

Project Homepage

A C-program for MT19937, with initialization improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.

Before using, initialize the state by using init_genrand(seed)
or init_by_array(init_key, key_length).

Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.

  3. The names of its contributors may not be used to endorse or promote
     products derived from this software without specific prior written
     permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-darwin.html0000644000000000000000000005041413216666133022220 0ustar rootroot Darwin

Darwin

Project Homepage

APPLE PUBLIC SOURCE LICENSE Version 2.0 -  August 6, 2003

Please read this License carefully before downloading this software.  By
downloading or using this software, you are agreeing to be bound by the terms of
this License.  If you do not or cannot agree to the terms of this License,
please do not download or use the software.

Apple Note:  In January 2007, Apple changed its corporate name from "Apple
Computer, Inc." to "Apple Inc."  This change has been reflected below and
copyright years updated, but no other changes have been made to the APSL 2.0.

1.      General; Definitions.  This License applies to any program or other work
which Apple Inc. ("Apple") makes publicly available and which contains a notice
placed by Apple identifying such program or work as "Original Code" and stating
that it is subject to the terms of this Apple Public Source License version 2.0
("License").  As used in this License:

1.1      "Applicable Patent Rights" mean:  (a) in the case where Apple is the
grantor of rights, (i) claims of patents that are now or hereafter acquired,
owned by or assigned to Apple and (ii) that cover subject matter contained in
the Original Code, but only to the extent necessary to use, reproduce and/or
distribute the Original Code without infringement; and (b) in the case where You
are the grantor of rights, (i) claims of patents that are now or hereafter
acquired, owned by or assigned to You and (ii) that cover subject matter in Your
Modifications, taken alone or in combination with Original Code.

1.2     "Contributor" means any person or entity that creates or contributes to the
creation of Modifications.

1.3      "Covered Code" means the Original Code, Modifications, the combination of
Original Code and any Modifications, and/or any respective portions thereof.

1.4     "Externally Deploy" means: (a) to sublicense, distribute or otherwise make
Covered Code available, directly or indirectly, to anyone other than You; and/or
(b) to use Covered Code, alone or as part of a Larger Work, in any way to
provide a service, including but not limited to delivery of content, through
electronic communication with a client other than You.

1.5     "Larger Work" means a work which combines Covered Code or portions thereof
with code not governed by the terms of this License.

1.6     "Modifications" mean any addition to, deletion from, and/or change to, the
substance and/or structure of the Original Code, any previous Modifications, the
combination of Original Code and any previous Modifications, and/or any
respective portions thereof.  When code is released as a series of files, a
Modification is:  (a) any addition to or deletion from the contents of a file
containing Covered Code; and/or (b) any new file or other representation of
computer program statements that contains any part of Covered Code.

1.7     "Original Code" means (a) the Source Code of a program or other work as
originally made available by Apple under this License, including the Source Code
of any updates or upgrades to such programs or works made available by Apple
under this License, and that has been expressly identified by Apple as such in
the header file(s) of such work; and (b) the object code compiled from such
Source Code and originally made available by Apple under this License

1.8     "Source Code" means the human readable form of a program or other work that
is suitable for making modifications to it, including all modules it contains,
plus any associated interface definition files, scripts used to control
compilation and installation of an executable (object code).

1.9     "You" or "Your" means an individual or a legal entity exercising rights
under this License.  For legal entities, "You" or "Your" includes any entity
which controls, is controlled by, or is under common control with, You, where
"control" means (a) the power, direct or indirect, to cause the direction or
management of such entity, whether by contract or otherwise, or (b) ownership of
fifty percent (50%) or more of the outstanding shares or beneficial ownership of
such entity.

2.      Permitted Uses; Conditions &amp; Restrictions.   Subject to the terms and
conditions of this License, Apple hereby grants You, effective on the date You
accept this License and download the Original Code, a world-wide, royalty-free,
non-exclusive license, to the extent of Apple's Applicable Patent Rights and
copyrights covering the Original Code, to do the following:

2.1     Unmodified Code.  You may use, reproduce, display, perform, internally
distribute within Your organization, and Externally Deploy verbatim, unmodified
copies of the Original Code, for commercial or non-commercial purposes, provided
that in each instance:

(a)     You must retain and reproduce in all copies of Original Code the copyright
and other proprietary notices and disclaimers of Apple as they appear in the
Original Code, and keep intact all notices in the Original Code that refer to
this License; and

(b)     You must include a copy of this License with every copy of Source Code of
Covered Code and documentation You distribute or Externally Deploy, and You may
not offer or impose any terms on such Source Code that alter or restrict this
License or the recipients' rights hereunder, except as permitted under Section
6.

2.2     Modified Code.  You may modify Covered Code and use, reproduce, display,
perform, internally distribute within Your organization, and Externally Deploy
Your Modifications and Covered Code, for commercial or non-commercial purposes,
provided that in each instance You also meet all of these conditions:

(a)     You must satisfy all the conditions of Section 2.1 with respect to the
Source Code of the Covered Code;

(b)     You must duplicate, to the extent it does not already exist, the notice in
Exhibit A in each file of the Source Code of all Your Modifications, and cause
the modified files to carry prominent notices stating that You changed the files
and the date of any change; and

(c)     If You Externally Deploy Your Modifications, You must make Source Code of
all Your Externally Deployed Modifications either available to those to whom You
have Externally Deployed Your Modifications, or publicly available.  Source Code
of Your Externally Deployed Modifications must be released under the terms set
forth in this License, including the license grants set forth in Section 3
below, for as long as you Externally Deploy the Covered Code or twelve (12)
months from the date of initial External Deployment, whichever is longer. You
should preferably distribute the Source Code of Your Externally Deployed
Modifications electronically (e.g. download from a web site).

2.3     Distribution of Executable Versions.  In addition, if You Externally Deploy
Covered Code (Original Code and/or Modifications) in object code, executable
form only, You must include a prominent notice, in the code itself as well as in
related documentation, stating that Source Code of the Covered Code is available
under the terms of this License with information on how and where to obtain such
Source Code.

2.4     Third Party Rights.  You expressly acknowledge and agree that although
Apple and each Contributor grants the licenses to their respective portions of
the Covered Code set forth herein, no assurances are provided by Apple or any
Contributor that the Covered Code does not infringe the patent or other
intellectual property rights of any other entity. Apple and each Contributor
disclaim any liability to You for claims brought by any other entity based on
infringement of intellectual property rights or otherwise. As a condition to
exercising the rights and licenses granted hereunder, You hereby assume sole
responsibility to secure any other intellectual property rights needed, if any.
For example, if a third party patent license is required to allow You to
distribute the Covered Code, it is Your responsibility to acquire that license
before distributing the Covered Code.

3.      Your Grants.  In consideration of, and as a condition to, the licenses
granted to You under this License, You hereby grant to any person or entity
receiving or distributing Covered Code under this License a non-exclusive,
royalty-free, perpetual, irrevocable license, under Your Applicable Patent
Rights and other intellectual property rights (other than patent) owned or
controlled by You, to use, reproduce, display, perform, modify, sublicense,
distribute and Externally Deploy Your Modifications of the same scope and extent
as Apple's licenses under Sections 2.1 and 2.2 above.

4.      Larger Works.  You may create a Larger Work by combining Covered Code with
other code not governed by the terms of this License and distribute the Larger
Work as a single product.  In each such instance, You must make sure the
requirements of this License are fulfilled for the Covered Code or any portion
thereof.

5.      Limitations on Patent License.   Except as expressly stated in Section 2, no
other patent rights, express or implied, are granted by Apple herein.
Modifications and/or Larger Works may require additional patent licenses from
Apple which Apple may grant in its sole discretion.

6.      Additional Terms.  You may choose to offer, and to charge a fee for,
warranty, support, indemnity or liability obligations and/or other rights
consistent with the scope of the license granted herein ("Additional Terms") to
one or more recipients of Covered Code. However, You may do so only on Your own
behalf and as Your sole responsibility, and not on behalf of Apple or any
Contributor. You must obtain the recipient's agreement that any such Additional
Terms are offered by You alone, and You hereby agree to indemnify, defend and
hold Apple and every Contributor harmless for any liability incurred by or
claims asserted against Apple or such Contributor by reason of any such
Additional Terms.

7.      Versions of the License.  Apple may publish revised and/or new versions of
this License from time to time.  Each version will be given a distinguishing
version number.  Once Original Code has been published under a particular
version of this License, You may continue to use it under the terms of that
version. You may also choose to use such Original Code under the terms of any
subsequent version of this License published by Apple.  No one other than Apple
has the right to modify the terms applicable to Covered Code created under this
License.

8.      NO WARRANTY OR SUPPORT.  The Covered Code may contain in whole or in part
pre-release, untested, or not fully tested works.  The Covered Code may contain
errors that could cause failures or loss of data, and may be incomplete or
contain inaccuracies.  You expressly acknowledge and agree that use of the
Covered Code, or any portion thereof, is at Your sole and entire risk.  THE
COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY
QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT,
AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE AND EACH CONTRIBUTOR DOES NOT
WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE
FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE
OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT
DEFECTS IN THE COVERED CODE WILL BE CORRECTED.  NO ORAL OR WRITTEN INFORMATION
OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR
SHALL CREATE A WARRANTY.  You acknowledge that the Covered Code is not intended
for use in the operation of nuclear facilities, aircraft navigation,
communication systems, or air traffic control machines in which case the failure
of the Covered Code could lead to death, personal injury, or severe physical or
environmental damage.

9.      LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT
OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE
OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER UNDER A
THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR
OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY
REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF
INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In
no event shall Apple's total liability to You for all damages (other than as may
be required by applicable law) under this License exceed the amount of fifty
dollars ($50.00).

10.     Trademarks.  This License does not grant any rights to use the trademarks
or trade names  "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime Streaming
Server" or any other trademarks, service marks, logos or trade names belonging
to Apple (collectively "Apple Marks") or to any trademark, service mark, logo or
trade name belonging to any Contributor.  You agree not to use any Apple Marks
in or as part of the name of products derived from the Original Code or to
endorse or promote products derived from the Original Code other than as
expressly permitted by and in strict compliance at all times with Apple's third
party trademark usage guidelines which are posted at
http://www.apple.com/legal/guidelinesfor3rdparties.html.

11.     Ownership. Subject to the licenses granted under this License, each
Contributor retains all rights, title and interest in and to any Modifications
made by such Contributor.  Apple retains all rights, title and interest in and
to the Original Code and any Modifications made by or on behalf of Apple ("Apple
Modifications"), and such Apple Modifications will not be automatically subject
to this License.  Apple may, at its sole discretion, choose to license such
Apple Modifications under this License, or on different terms from those
contained in this License or may choose not to license them at all.

12.     Termination.

12.1    Termination.  This License and the rights granted hereunder will
terminate:

(a)     automatically without notice from Apple if You fail to comply with any
term(s) of this License and fail to cure such breach within 30 days of becoming
aware of such breach; (b)       immediately in the event of the circumstances
described in Section 13.5(b); or (c)    automatically without notice from Apple if
You, at any time during the term of this License, commence an action for patent
infringement against Apple; provided that Apple did not first commence an action
for patent infringement against You in that instance.

12.2    Effect of Termination.  Upon termination, You agree to immediately stop
any further use, reproduction, modification, sublicensing and distribution of
the Covered Code.  All sublicenses to the Covered Code which have been properly
granted prior to termination shall survive any termination of this License.
Provisions which, by their nature, should remain in effect beyond the
termination of this License shall survive, including but not limited to Sections
3, 5, 8, 9, 10, 11, 12.2 and 13.  No party will be liable to any other for
compensation, indemnity or damages of any sort solely as a result of terminating
this License in accordance with its terms, and termination of this License will
be without prejudice to any other right or remedy of any party.

13.     Miscellaneous.

13.1    Government End Users.   The Covered Code is a "commercial item" as defined
in FAR 2.101.  Government software and technical data rights in the Covered Code
include only those rights customarily provided to the public as defined in this
License. This customary commercial license in technical data and software is
provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical
Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software
or Computer Software Documentation).  Accordingly, all U.S. Government End Users
acquire Covered Code with only those rights set forth herein.

13.2    Relationship of Parties.  This License will not be construed as creating
an agency, partnership, joint venture or any other form of legal association
between or among You, Apple or any Contributor, and You will not represent to
the contrary, whether expressly, by implication, appearance or otherwise.

13.3    Independent Development.   Nothing in this License will impair Apple's
right to acquire, license, develop, have others develop for it, market and/or
distribute technology or products that perform the same or similar functions as,
or otherwise compete with, Modifications, Larger Works, technology or products
that You may develop, produce, market or distribute.

13.4    Waiver; Construction.  Failure by Apple or any Contributor to enforce any
provision of this License will not be deemed a waiver of future enforcement of
that or any other provision.  Any law or regulation which provides that the
language of a contract shall be construed against the drafter will not apply to
this License.

13.5    Severability.  (a) If for any reason a court of competent jurisdiction
finds any provision of this License, or portion thereof, to be unenforceable,
that provision of the License will be enforced to the maximum extent permissible
so as to effect the economic benefits and intent of the parties, and the
remainder of this License will continue in full force and effect.  (b)
Notwithstanding the foregoing, if applicable law prohibits or restricts You from
fully and/or specifically complying with Sections 2 and/or 3 or prevents the
enforceability of either of those Sections, this License will immediately
terminate and You must immediately discontinue any use of the Covered Code and
destroy all copies of it that are in your possession or control.

13.6    Dispute Resolution.  Any litigation or other dispute resolution between
You and Apple relating to this License shall take place in the Northern District
of California, and You and Apple hereby consent to the personal jurisdiction of,
and venue in, the state and federal courts within that District with respect to
this License. The application of the United Nations Convention on Contracts for
the International Sale of Goods is expressly excluded.

13.7    Entire Agreement; Governing Law.  This License constitutes the entire
agreement between the parties with respect to the subject matter hereof.  This
License shall be governed by the laws of the United States and the State of
California, except that body of California law concerning conflicts of law.

Where You are located in the province of Quebec, Canada, the following clause
applies:  The parties hereby confirm that they have requested that this License
and all related documents be drafted in English.  Les parties ont exigé que le
présent contrat et tous les documents connexes soient rédigés en anglais.

EXHIBIT A.

"Portions Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.

This file contains Original Code and/or Modifications of Original Code as
defined in and that are subject to the Apple Public Source License Version 2.0
(the 'License').  You may not use this file except in compliance with the
License.  Please obtain a copy of the License at
http://www.opensource.apple.com/apsl/ and read it before using this file.

The Original Code and all software distributed under the License are distributed
on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION,
ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
ENJOYMENT OR NON-INFRINGEMENT.  Please see the License for the specific language
governing rights and limitations under the License."
MediaConch/Qt_Licenses/qtwebengine-3rdparty-url-parse.html0000644000000000000000000000723513216666133022651 0ustar rootroot url_parse

url_parse

Project Homepage

Copyright 2007, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-------------------------------------------------------------------------------

The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
licensed separately as follows:

The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.

The Original Code is mozilla.org code.

The Initial Developer of the Original Code is
Netscape Communications Corporation.
Portions created by the Initial Developer are Copyright (C) 1998
the Initial Developer. All Rights Reserved.

Contributor(s):
  Darin Fisher (original author)

Alternatively, the contents of this file may be used under the terms of
either the GNU General Public License Version 2 or later (the "GPL"), or
the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
in which case the provisions of the GPL or the LGPL are applicable instead
of those above. If you wish to allow use of your version of this file only
under the terms of either the GPL or the LGPL, and not to allow others to
use your version of this file under the terms of the MPL, indicate your
decision by deleting the provisions above and replace them with the notice
and other provisions required by the GPL or the LGPL. If you do not delete
the provisions above, a recipient may use your version of this file under
the terms of any one of the MPL, the GPL or the LGPL.
MediaConch/Qt_Licenses/qtcore-attribution-doubleconversion.html0000644000000000000000000000530413216666133024073 0ustar rootroot Efficient Binary-Decimal and Decimal-Binary Conversion Routines for IEEE Doubles

Efficient Binary-Decimal and Decimal-Binary Conversion Routines for IEEE Doubles

Used in Qt Core. Configure with -system-doubleconversion or -no-doubleconversion to avoid.

The sources can be found in qtbase/src/3rdparty/double-conversion.

Project Homepage, upstream version: 2.0.1

Copyright 2006-2012, the V8 project authors

BSD 3-clause "New" or "Revised" License.

Copyright 2006-2011, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-lzma-sdk.html0000644000000000000000000000101513216666133022447 0ustar rootroot LZMA SDK

LZMA SDK

Project Homepage

LZMA SDK is placed in the public domain.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-minigbm.html0000644000000000000000000000403413216666133022353 0ustar rootroot minigbm

minigbm

Project Homepage

// Copyright 2014 The Chromium OS Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-spir-v-tools.html0000644000000000000000000000343313216666133023311 0ustar rootroot SPIR-V Tools

SPIR-V Tools

Project Homepage

Copyright (c) 2015-2016 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
   https://www.khronos.org/registry/

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libvpx.html0000644000000000000000000000373613216666133022245 0ustar rootroot libvpx

libvpx

Project Homepage

Copyright (c) 2010, The WebM Project authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google, nor the WebM Project, nor the names
    of its contributors may be used to endorse or promote products
    derived from this software without specific prior written
    permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtgui-attribution-angle-trace-event.html0000644000000000000000000000455413216666133023656 0ustar rootroot ANGLE: trace_event

ANGLE: trace_event

Used on Windows to implement OpenGL ES on top of DirectX. Configure with -no-opengl, or -opengl desktop to exclude.

The sources can be found in qtbase/src/3rdparty/angle/src/third_party/trace_event.

Copyright (c) 2013 The Chromium Authors.

BSD 3-clause "New" or "Revised" License.

Copyright 2013 The Chromium Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-vulkan-api-headers.html0000644000000000000000000001031313216666133024406 0ustar rootroot Vulkan API headers

Vulkan API headers

Project Homepage

Copyright (C) 2015 Valve Corporation

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.



Copyright (C) 2016 Valve Corporation
Copyright (C) 2016 Google Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.



stb_trutype.h:
stb_truetype.h - v1.07 - public domain
authored from 2009-2015 by Sean Barrett / RAD Game Tools

LICENSE

This software is in the public domain. Where that dedication is not
recognized, you are granted a perpetual, irrevocable license to copy,
distribute, and modify this file as you see fit.



glm:
///////////////////////////////////////////////////////////////////////////////////
/// OpenGL Mathematics (glm.g-truc.net)
///
/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to deal
/// in the Software without restriction, including without limitation the rights
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
/// copies of the Software, and to permit persons to whom the Software is
/// furnished to do so, subject to the following conditions:
///
/// The above copyright notice and this permission notice shall be included in
/// all copies or substantial portions of the Software.
///
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
/// THE SOFTWARE.
///
MediaConch/Qt_Licenses/qtwebengine-3rdparty-xdg-mime.html0000644000000000000000000002417213216666133022445 0ustar rootroot xdg-mime

xdg-mime

Project Homepage

Licensed under the Academic Free License version 2.0 (below)
Or under the following terms:

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.


--------------------------------------------------------------------------------
Academic Free License v. 2.0
--------------------------------------------------------------------------------

This Academic Free License (the "License") applies to any original work of
authorship (the "Original Work") whose owner (the "Licensor") has placed the
following notice immediately following the copyright notice for the Original
Work:

Licensed under the Academic Free License version 2.0
1) Grant of Copyright License. Licensor hereby grants You a world-wide,
royalty-free, non-exclusive, perpetual, sublicenseable license to do the
following:

a) to reproduce the Original Work in copies;
b) to prepare derivative works ("Derivative Works") based upon the Original
   Work;
c) to distribute copies of the Original Work and Derivative Works to the
   public;
d) to perform the Original Work publicly; and
e) to display the Original Work publicly.

2) Grant of Patent License. Licensor hereby grants You a world-wide,
royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
claims owned or controlled by the Licensor that are embodied in the Original
Work as furnished by the Licensor, to make, use, sell and offer for sale the
Original Work and Derivative Works.

3) Grant of Source Code License. The term "Source Code" means the preferred
form of the Original Work for making modifications to it and all available
documentation describing how to modify the Original Work. Licensor hereby
agrees to provide a machine-readable copy of the Source Code of the Original
Work along with each copy of the Original Work that Licensor distributes.
Licensor reserves the right to satisfy this obligation by placing a
machine-readable copy of the Source Code in an information repository
reasonably calculated to permit inexpensive and convenient access by You for as
long as Licensor continues to distribute the Original Work, and by publishing
the address of that information repository in a notice immediately following
the copyright notice that applies to the Original Work.

4) Exclusions From License Grant. Neither the names of Licensor, nor the names
of any contributors to the Original Work, nor any of their trademarks or
service marks, may be used to endorse or promote products derived from this
Original Work without express prior written permission of the Licensor. Nothing
in this License shall be deemed to grant any rights to trademarks, copyrights,
patents, trade secrets or any other intellectual property of Licensor except as
expressly stated herein. No patent license is granted to make, use, sell or
offer to sell embodiments of any patent claims other than the licensed claims
defined in Section 2. No right is granted to the trademarks of Licensor even if
such marks are included in the Original Work. Nothing in this License shall be
interpreted to prohibit Licensor from licensing under different terms from this
License any Original Work that Licensor otherwise would have a right to
license.

5) This section intentionally omitted.

6) Attribution Rights. You must retain, in the Source Code of any Derivative
Works that You create, all copyright, patent or trademark notices from the
Source Code of the Original Work, as well as any notices of licensing and any
descriptive text identified therein as an "Attribution Notice." You must cause
the Source Code for any Derivative Works that You create to carry a prominent
Attribution Notice reasonably calculated to inform recipients that You have
modified the Original Work.

7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
the copyright in and to the Original Work and the patent rights granted herein
by Licensor are owned by the Licensor or are sublicensed to You under the terms
of this License with the permission of the contributor(s) of those copyrights
and patent rights. Except as expressly stated in the immediately proceeding
sentence, the Original Work is provided under this License on an "AS IS" BASIS
and WITHOUT WARRANTY, either express or implied, including, without limitation,
the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
license to Original Work is granted hereunder except under this disclaimer.

8) Limitation of Liability. Under no circumstances and under no legal theory,
whether in tort (including negligence), contract, or otherwise, shall the
Licensor be liable to any person for any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License
or the use of the Original Work including, without limitation, damages for loss
of goodwill, work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses. This limitation of liability shall not
apply to liability for death or personal injury resulting from Licensor's
negligence to the extent applicable law prohibits such limitation. Some
jurisdictions do not allow the exclusion or limitation of incidental or
consequential damages, so this exclusion and limitation may not apply to You.

9) Acceptance and Termination. If You distribute copies of the Original Work or
a Derivative Work, You must make a reasonable effort under the circumstances to
obtain the express assent of recipients to the terms of this License. Nothing
else but this License (or another written agreement between Licensor and You)
grants You permission to create Derivative Works based upon the Original Work
or to exercise any of the rights granted in Section 1 herein, and any attempt
to do so except under the terms of this License (or another written agreement
between Licensor and You) is expressly prohibited by U.S. copyright law, the
equivalent laws of other countries, and by international treaty. Therefore, by
exercising any of the rights granted to You in Section 1 herein, You indicate
Your acceptance of this License and all of its terms and conditions.

10) Termination for Patent Action. This License shall terminate automatically
and You may no longer exercise any of the rights granted to You by this License
as of the date You commence an action, including a cross-claim or counterclaim,
for patent infringement (i) against Licensor with respect to a patent
applicable to software or (ii) against any entity with respect to a patent
applicable to the Original Work (but excluding combinations of the Original
Work with other software or hardware).

11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
License may be brought only in the courts of a jurisdiction wherein the
Licensor resides or in which Licensor conducts its primary business, and under
the laws of that jurisdiction excluding its conflict-of-law provisions. The
application of the United Nations Convention on Contracts for the International
Sale of Goods is expressly excluded. Any use of the Original Work outside the
scope of this License or after its termination shall be subject to the
requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq.,
the equivalent laws of other countries, and international treaty. This section
shall survive the termination of this License.

12) Attorneys Fees. In any action to enforce the terms of this License or
seeking damages relating thereto, the prevailing party shall be entitled to
recover its costs and expenses, including, without limitation, reasonable
attorneys' fees and costs incurred in connection with such action, including
any appeal of such action. This section shall survive the termination of this
License.

13) Miscellaneous. This License represents the complete agreement concerning
the subject matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent necessary to
make it enforceable.

14) Definition of "You" in This License. "You" throughout this License, whether
in upper or lower case, means an individual or a legal entity exercising rights
under, and complying with all of the terms of, this License. For legal
entities, "You" includes any entity that controls, is controlled by, or is
under common control with you. For purposes of this definition, "control" means
(i) the power, direct or indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (ii) ownership of fifty percent
(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
entity.

15) Right to Use. You may use the Original Work in all ways not otherwise
restricted or conditioned by this License or by law, and Licensor promises not
to interfere with or be responsible for such uses by You.

This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved.
Permission is hereby granted to copy and distribute this license without
modification. This license may not be modified without the express written
permission of its copyright owner.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-leveldb-a-fast-persistent-key-value-store.html0000644000000000000000000000377413216666133030761 0ustar rootroot LevelDB: A Fast Persistent Key-Value Store

LevelDB: A Fast Persistent Key-Value Store

Project Homepage

Copyright (c) 2011 The LevelDB Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtcore-attribution-qeucjpcodec.html0000644000000000000000000000432613216666133023003 0ustar rootroot Text Codec: EUC-JP

Text Codec: EUC-JP

The EUC-JP text codec provides conversion to and from EUC-JP, the main legacy encoding for Unix machines in Japan.

Used in Qt Core if ICU is not used. Configure with -icu to avoid.

The sources can be found in qtbase/src/corelib/codecs/qeucjpcodec.cpp.

Copyright (C) 1999 Serika Kurusugawa.

BSD 2-clause "Simplified" License.

Copyright (C) 1999 Serika Kurusugawa, All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libxml.html0000644000000000000000000000333713216666133022225 0ustar rootroot libxml

libxml

Project Homepage

Except where otherwise noted in the source code (e.g. the files hash.c,
list.c and the trio files, which are covered by a similar licence but
with different Copyright notices) all the files are:

 Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtgui-attribution-libpng.html0000644000000000000000000001506113216666133021623 0ustar rootroot LibPNG

LibPNG

libpng is the official PNG reference library.

Used in the qpng image plugin. Configure with -system-png or -no-png to avoid.

The sources can be found in qtbase/src/3rdparty/libpng.

Project Homepage, upstream version: 1.6.28

Copyright (c) 1998-2017 Glenn Randers-Pehrson
Copyright (c) 2000-2017 Simon-Pierre Cadieux
Copyright (c) 2000-2017 Eric S. Raymond
Copyright (c) 2000-2017 Mans Rullgard
Copyright (c) 2000-2017 Cosmin Truta
Copyright (c) 2000-2017 Gilles Vollant
Copyright (c) 2000-2017 James Yu
Copyright (c) 2000-2017 Mandar Sahastrabuddhe
Copyright (c) 1998-2000 Tom Lane
Copyright (c) 1998-2000 Willem van Schaik
Copyright (c) 1996-1997 Andreas Dilger
Copyright (c) 1996-1997 John Bowler
Copyright (c) 1996-1997 Kevin Bracey
Copyright (c) 1996-1997 Sam Bushell
Copyright (c) 1996-1997 Magnus Holmgren
Copyright (c) 1996-1997 Greg Roelofs
Copyright (c) 1996-1997 Tom Tanner
Copyright (c) 1995-1996 Dave Martindale
Copyright (c) 1995-1996 Paul Schmidt
Copyright (c) 1995-1996 Tim Wegner
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.

libpng License.

This copy of the libpng notices is provided for your convenience.  In case of
any discrepancy between this copy and the notices in the file png.h that is
included in the libpng distribution, the latter shall prevail.

COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:

If you modify libpng you may insert additional notices immediately following
this sentence.

This code is released under the libpng license.

libpng versions 1.0.7, July 1, 2000 through 1.6.28, January 5, 2017 are
Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, and are distributed according to the same
disclaimer and license as libpng-1.0.6 with the following individuals
added to the list of Contributing Authors:

   Simon-Pierre Cadieux
   Eric S. Raymond
   Mans Rullgard
   Cosmin Truta
   Gilles Vollant
   James Yu
   Mandar Sahastrabuddhe

and with the following additions to the disclaimer:

   There is no warranty against interference with your enjoyment of the
   library or against infringement.  There is no warranty that our
   efforts or the library will fulfill any of your particular purposes
   or needs.  This library is provided with all faults, and the entire
   risk of satisfactory quality, performance, accuracy, and effort is with
   the user.

Some files in the "contrib" directory and some configure-generated
files that are distributed with libpng have other copyright owners and
are released under other open source licenses.

libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, and are distributed according to the same disclaimer and
license as libpng-0.96, with the following individuals added to the list
of Contributing Authors:

   Tom Lane
   Glenn Randers-Pehrson
   Willem van Schaik

libpng versions 0.89, June 1996, through 0.96, May 1997, are
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
and are distributed according to the same disclaimer and license as
libpng-0.88, with the following individuals added to the list of
Contributing Authors:

   John Bowler
   Kevin Bracey
   Sam Bushell
   Magnus Holmgren
   Greg Roelofs
   Tom Tanner

Some files in the "scripts" directory have other copyright owners
but are released under this license.

libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.

For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals:

   Andreas Dilger
   Dave Martindale
   Guy Eric Schalnat
   Paul Schmidt
   Tim Wegner

The PNG Reference Library is supplied "AS IS".  The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
including, without limitation, the warranties of merchantability and of
fitness for any purpose.  The Contributing Authors and Group 42, Inc.
assume no liability for direct, indirect, incidental, special, exemplary,
or consequential damages, which may result from the use of the PNG
Reference Library, even if advised of the possibility of such damage.

Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:

  1. The origin of this source code must not be misrepresented.

  2. Altered versions must be plainly marked as such and must not
     be misrepresented as being the original source.

  3. This Copyright notice may not be removed or altered from any
     source or altered source distribution.

The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to
supporting the PNG file format in commercial products.  If you use this
source code in a product, acknowledgment is not required but would be
appreciated.

END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.

TRADEMARK:

The name "libpng" has not been registered by the Copyright owner
as a trademark in any jurisdiction.  However, because libpng has
been distributed and maintained world-wide, continually since 1995,
the Copyright owner claims "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized.

OSI CERTIFICATION:

Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.

EXPORT CONTROL:

The Copyright owner believes that the Export Control Classification
Number (ECCN) for libpng is EAR99, which means not subject to export
controls or International Traffic in Arms Regulations (ITAR) because
it is open source, publicly available software, that does not contain
any encryption software.  See the EAR, paragraphs 734.3(b)(3) and
734.7(b).

Glenn Randers-Pehrson
glennrp at users.sourceforge.net
January 5, 2017
MediaConch/Qt_Licenses/qtwebengine-3rdparty-ply-python-lex-yacc.html0000644000000000000000000000401413216666133024555 0ustar rootroot PLY (Python Lex-Yacc)

PLY (Python Lex-Yacc)

Project Homepage

PLY (Python Lex-Yacc)                   Version 3.4

Copyright (C) 2001-2011,
David M. Beazley (Dabeaz LLC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.
* Neither the name of the David Beazley or Dabeaz LLC may be used to
  endorse or promote products derived from this software without
  specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtvirtualkeyboard-attribution-lipitk.html0000644000000000000000000000423613216666133024271 0ustar rootroot Lipi Toolkit

Lipi Toolkit

Lipi Toolkit (LipiTk) is an open source toolkit for online Handwriting Recognition.

Optionally used in Qt Virtual Keyboard.

The sources can be found in qtvirtualkeyboard/src/virtualkeyboard/3rdparty/lipi-toolkit.

Project Homepage

Copyright (c) 2006 Hewlett-Packard Development Company, L.P.
Copyright (c) 2007 Hewlett-Packard Development Company, L.P.

MIT License.

Copyright (c) 2006 Hewlett-Packard Development Company, L.P.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:


The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-flatbuffers.html0000644000000000000000000002610413216666133023236 0ustar rootroot FlatBuffers

FlatBuffers

Project Homepage

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright 2014 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MediaConch/Qt_Licenses/qtlocation-attribution-mapboxgl-libcxx.html0000644000000000000000000000143013216666133024467 0ustar rootroot libc++

libc++

libc++ is a new implementation of the C++ standard library, targeting C++11.

Used in the Mapbox GL plugin of Qt Location.

The sources can be found in qtlocation/src/3rdparty/mapbox-gl-native.

Project Homepage

Copyright (c) 2009-2014 libc++ developers

MIT and UIUC (BSD-like).

MediaConch/Qt_Licenses/qtwebengine-3rdparty-modp-base64-decoder.html0000644000000000000000000000423613216666133024361 0ustar rootroot modp base64 decoder

modp base64 decoder

Project Homepage

* MODP_B64 - High performance base64 encoder/decoder
* Version 1.3 -- 17-Mar-2006
* http://modp.com/release/base64
*
* Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
*   Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
*   Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
*
*   Neither the name of the modp.com nor the names of its
*   contributors may be used to endorse or promote products derived from
*   this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-dom-distiller-js.html0000644000000000000000000002622513216666133024121 0ustar rootroot dom-distiller-js

dom-distiller-js

Project Homepage

Copyright 2014 The Chromium Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



Parts of the following directories are available under Apache v2.0

src/de
Copyright (c) 2009-2011 Christian Kohlschütter

third_party/gwt_exporter
Copyright 2007 Timepedia.org

third_party/gwt-2.5.1
Copyright 2008 Google

java/org/chromium/distiller/dev
Copyright 2008 Google

Apache License

Version 2.0, January 2004

http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS
MediaConch/Qt_Licenses/qtwebengine-3rdparty-brotli.html0000644000000000000000000000303713216666133022226 0ustar rootroot Brotli

Brotli

Project Homepage

Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
MediaConch/Qt_Licenses/qtwebengine-3rdparty-libsecret.html0000644000000000000000000006470113216666133022714 0ustar rootroot libsecret

libsecret

Project Homepage

                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, 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 library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.

  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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.

  If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be 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.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.

  9. 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 Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.

  11. 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 Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.

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.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  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.

    &lt;one line to give the library's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  &lt;signature of Ty Coon&gt;, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!
MediaConch/Qt_Licenses/qtgui-attribution-xcb.html0000644000000000000000000000512113216666133021120 0ustar rootroot XCB

XCB

Selected xcb libraries.

Optionally used in xcb platform plugin if configured with -qt-xcb.

The sources can be found in qtbase/src/3rdparty/xcb.

Project Homepage

Copyright © 2000 Keith Packard
Copyright © 2006 Jamey Sharp
Copyright © 2007-2008 Vincent Torri <vtorri@univ-evry.fr>
Copyright © 2007 Bart Massey
Copyright © 2008-2009 Julien Danjou <julien@danjou.info>
Copyright © 2008 Arnaud Fontaine <arnau@debian.org>
Copyright © 2008 Bart Massey <bart@cs.pdx.edu>
Copyright © 2008 Ian Osgood <iano@quirkster.com>
Copyright © 2008 Jamey Sharp <jamey@minilop.net>
Copyright © 2008 Josh Triplett <josh@freedesktop.org>
Copyright © 2008 Ulrich Eckhardt <doomster@knuut.de>

MIT License.

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the names of the authors or
their institutions shall not be used in advertising or otherwise to
promote the sale, use or other dealings in this Software without
prior written authorization from the authors.
MediaConch/Qt_Licenses/qtcore-attribution-qtsciicodec.html0000644000000000000000000000420113216666133023000 0ustar rootroot Text Codec: TSCII

Text Codec: TSCII

The TSCII text codec provides conversion to and from the Tamil TSCII encoding.

Used in Qt Core.

The sources can be found in qtbase/src/corelib/codecs/qtsciicodec.cpp.

Copyright (C) 2000 Hans Petter Bieker.

BSD 2-clause "Simplified" License.

Copyright (C) 2000 Hans Petter Bieker. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
MediaConch/License.GPLv3.html0000644000000000000000000010276613216666133014733 0ustar rootroot The GNU General Public License v3.0 - GNU Project - Free Software Foundation

GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007

Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

0. Definitions.

“This License” refers to version 3 of the GNU General Public License.

“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

A “covered work” means either the unmodified Program or a work based on the Program.

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

1. Source Code.

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

The Corresponding Source for a work in source code form is that same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.

4. Conveying Verbatim Copies.

You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

  • a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
  • b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
  • c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
  • d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

  • a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
  • b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
  • c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
  • d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
  • e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

7. Additional Terms.

“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

  • a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
  • b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
  • c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
  • d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
  • e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
  • f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

11. Patents.

A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.

A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

15. Disclaimer of Warranty.

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.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

MediaConch/Tools/0000755000000000000000000000000013216666133012655 5ustar rootrootMediaConch/Tools/Transforms/0000755000000000000000000000000013216666133015013 5ustar rootrootMediaConch/Tools/Transforms/verapdf2mediaconch.xsl0000644000000000000000000001210113216666133021262 0ustar rootroot 0.2 / ( ) specification clause testNumber description object fail pass MediaConch/Tools/Transforms/dpfmanager2mediaconch.xsl0000644000000000000000000000661413216666133021753 0ustar rootroot 0.2 dpfmanager: 1 1 0 0 context ruleId ruleValue iso_reference fail pass MediaConch/Tools/Policies/0000755000000000000000000000000013216666133014424 5ustar rootrootMediaConch/Tools/Policies/sample_policy_7_memoriav_recommendations.xml0000644000000000000000000000612013216666133025401 0ustar rootroot This policy tests is the video codec is either 'recommended' or 'conditionally recommended' according to Memoriav Recommendations - Digital Archiving of Film and Video Principles and Guideance, see memoriav.ch/wp-content/uploads/2016/04/Empfehlungen_Digitale_-Archivierung_EN_Version1.0_Web.pdf This test uses characteristics rather than encoding ids YUV 4:2:2 10 This test uses characteristics rather than encoding ids YUV 4:4:4 10 This test uses characteristics rather than encoding ids YUV 4:2:2 8 DV to do: make test more specific to IMX or XDCam MPEG Video 2 50000000 50000000 JPEG 2000 FFV1 MediaConch/Tools/Policies/sample_policy_1.xml0000644000000000000000000000222713216666133020231 0ustar rootroot A test to see if the files use NTSC or PAL frame rates and sizes and has interlacement. 576 25.000 486 480 29.970 720 Interlaced MediaConch/Tools/Policies/sample_policy_2_comparison.xml0000644000000000000000000000105313216666133022460 0ustar rootroot Test to see if a file has a smaller frame size than another file but same aspect ratio. compare compare compare MediaConch/Tools/Policies/policyset2policytransform2policyresult.xsl0000644000000000000000000005004513216666133025172 0ustar rootroot 0.3 pass pass fail mmt:MicroMediaTrace mi:MediaInfo/mi:track[@type=' '] [ ] not( starts-with( not(starts-with( ) ,' ') ) document(' ')// ' ' mi:MediaInfo/mi:track[@type=' '] [ ] document(' ')// mmt:MicroMediaTrace mi:MediaInfo/mi:track[@type=' '][ ] pass fail /mmt:b[mmt:b[@n='Header']/mmt:d[@n='Name']=' /mi: /mmt:b[@n=' /mi: '] /mmt:d /mmt:b[mmt:b[@n='Header']/mmt:d[@n='Name']=' /mi: '] /mmt:b[@n=' /mi: '] /mmt:d[@n=' /mi: '] /@o /@s MediaConch/Tools/Policies/sample_policy_5_matroska_practices.xml0000644000000000000000000000620613216666133024174 0ustar rootroot Example of a digitization specification of analog SD video to FFV1 and Matroska. Matroska 4 1 1 6 9 14 2 2 2 2 2 MediaConch/Tools/Policies/some_files_mediaarea_report.xml0000644000000000000000000014073313216666133022666 0ustar rootroot MediaInfoLib MPEG-4 Base Media isom 8710 1.000 69680 25.000 25 1111 40 7607 1063 No 0 1 AVC High 4:4:4 Predictive@L1.3 Yes 4 avc1 1.000 60792 320 240 320 240 1.000 1.444 0.000 CFR VFR 25 1 25.000 25 YUV 4:4:4 8 Progressive 7599 x264 - core 148 r2668 fd2c324 x264 core 148 r2668 fd2c324 cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=4 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00 UTC 1904-01-01 00:00:00 UTC 1904-01-01 00:00:00 0 2 AVC High 4:4:4 Predictive@L1.3 Yes 4 avc1 1.000 60792 320 240 320 240 1.000 1.333 0.000 CFR VFR 225.000 25 YUV 4:4:4 8 Progressive 7599 x264 - core 148 r2668 fd2c324 x264 core 148 r2668 fd2c324 cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=4 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00 UTC 1904-01-01 00:00:00 UTC 1904-01-01 00:00:00 0 3 AVC High 4:4:4 Predictive@L1.3 Yes 4 avc1 1.000 60792 320 240 320 240 1.000 1.333 0.000 CFR VFR 235.000 25 YUV 4:4:4 8 Progressive 7599 x264 - core 148 r2668 fd2c324 x264 core 148 r2668 fd2c324 cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=4 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00 UTC 1904-01-01 00:00:00 UTC 1904-01-01 00:00:00 0 4 AVC High 4:4:4 Predictive@L1.3 Yes 4 avc1 1.000 60792 320 240 320 240 1.000 1.333 0.000 CFR VFR 245.000 25 YUV 4:4:4 8 Progressive 7599 x264 - core 148 r2668 fd2c324 x264 core 148 r2668 fd2c324 cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=4 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00 UTC 1904-01-01 00:00:00 UTC 1904-01-01 00:00:00 172351395 35 646 1 1 32 ftyp isom 512 isom iso2 avc1 mp41 8 free (0 bytes) 7607 mdat (7599 bytes) 1063 moov 108 mvhd 0 0 0 0 1000 1000 65536 256 (10 bytes) 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000 0 0 0 0 0 0 2 849 trak 92 tkhd 0 3 0 0 1 0 1000 0 0 0 0 0 0 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000 320.000 240.000 36 edts 28 elst 0 0 1 1000 1024 65536 713 mdia 32 mdhd 0 0 0 0 12800 12800 21956 0 45 hdlr 0 0 vide 0 0 VideoHandler 628 minf 20 vmhd 0 1 0 0 0 0 36 dinf 28 dref 0 0 1 12 url 0 1 564 stbl 152 stsd 0 0 1 136 avc1 0 1 0 0 0 0 320 240 4718592 4718592 0 1 0 (31 bytes) 24 65535 50 avcC 1 244 0 13 63 3 7 1 25 3 7 244 No No No No No No 0 13 0 3 No 0 0 No No 0 0 2 4 No 19 14 Yes Yes No Yes Yes 1 No No No Yes 1 50 No No No No Yes Yes 0 0 9 9 2 4 1 6 3 8 0 0 Yes No 0 2 0 Yes 2 -3 0 4 Yes No No Yes No 4 24 stts 0 0 1 25 512 20 stss 0 0 1 192 ctts 0 0 22 28 stsc 0 0 1 120 stsz 0 0 0 25 20 stco 0 0 1 98 udta 90 meta 0 0 33 hdlr 0 0 mdir appl 0 0 45 ilst 37 29 data 1 0 Lavf57.41.100 685 0 6 5 255 255 169 E6D948B7-E9BD-DC45-962C-D820D923EEEF x264 - core 148 r2668 fd2c324 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 2842 3 5 0 7 0 0 0 0 No No -14 0 0 0 (Data) 625 2 1 0 5 0 1 8 Yes 0 No 0 0 No No No 0 -14 0 0 0 (Data) MediaConch/Tools/Policies/sample_policy_8_TN2162.xml0000644000000000000000000002425713216666133021163 0ustar rootroot Test compliance with Apple's Technical Note 2162 (dated December 14, 1999) on Uncompressed Y'CbCr Video in QuickTime Files. This policy covers QuickTime's ImageDescription version 2 as documented by TN2162 and not version 0 or 1 as documented by its Backwards Compatibility section. Test that video fourcc is in table 1. 2vuy yuv2 v308 v408 v216 v410 v210 2vuy 24 yuv2 24 v308 24 v408 32 v216 24 v410 24 v210 24 2 0 0 1 0 nclc 1 2 5 6 1 2 7 1 2 6 7 1 0 2 1 6 9 14 0 0 0 0 0 0 0 0 MediaConch/Tools/Policies/sample_policy_4_output.xml0000644000000000000000000001140013216666133021645 0ustar rootroot Example of a digitization specification of analog SD video to FFV1 and Matroska. MediaConch/Tools/Policies/sample_policy_6_cavpp_preservation.xml0000644000000000000000000000355613216666133024236 0ustar rootroot Derived from http://calpreservation.org/wp-content/uploads/2014/12/CAVPP-file-specs-2014.11.20.pdf v210 Two tests, since there are two formats 'called' QuickTime. QuickTime MPEG-4 QuickTime 720 486 29.970 YUV Interlaced PCM 2 48000 24 MediaConch/Tools/Policies/mediaarea_xml_of_reference.xml0000644000000000000000000010563313216666133022450 0ustar rootroot MediaInfoLib 321731627564187164429847022950828649589 Matroska 4 108955 1.000 871640 25.000 25 2168 0 1 1 FFV1 0 V_MS/VFW/FOURCC / FFV1 1.000 854294 320 240 1.000 1.4d44 CFR 25.000 25 YUV 4:2:0 8 Lossless 0.000 106787 Lavc57.27.101 ffv1 Yes No 00:00:01.000000000 Golomb Rice 172351395 35 646 1 3 759 1 1 754 1 4 755 1 8 642 8 matroska 647 1 4 645 1 2 139690087 108896 21863284 60 3515 11 5035 4 88713574 5036 1 223 3515 12 5035 4 106212971 5036 2 304 3515 12 5035 4 39109479 5036 2 438 3515 13 5035 4 206814059 5036 3 108830 108 148 (148 bytes) 88713574 69 710577 3 1000000 3456 13 Lavf57.28.100 5953 13 Lavf57.28.100 13220 16 321731627564187164429847022950828649589 1161 8 1000.000 106212971 122 46 113 87 1 1 13253 1 1 28 1 0 177564 3 und 3 1 1 254851 4 40000000 6 15 V_MS/VFW/FOURCC 96 16 48 2 320 58 1 240 5296 2 320 5306 1 240 9122 40 40 320 240 1 24 FFV1 230400 0 0 0 0 39109479 189 13171 46 9152 0 10184 26 1443 7 ENCODER 1159 13 Lavf57.28.100 13171 55 9152 4 9157 1 1 10184 31 1443 7 ENCODER 1159 18 Lavc57.27.101 ffv1 13171 58 9152 4 9157 1 1 10184 34 1443 8 DURATION 1159 20 00:00:01.000000000 256095861 52261 103 1 0 35 4366 1 0 1 0 0 0 0 Yes 0 0 0 Yes 1 1 No 0 0 2 6 22 92 0 0 2 6 22 92 0 0 2 6 22 92 127 127 No 35 4250 1 40 (4247 bytes) 35 4373 1 80 (4370 bytes) 35 4326 1 120 (4323 bytes) 35 4445 1 160 (4442 bytes) 35 4448 1 200 (4445 bytes) 35 4310 1 240 (4307 bytes) 206814059 54 59 15 51 1 0 55 10 119 1 1 113 2 639 112 1 3 59 16 51 2 480 55 10 119 1 1 113 2 52912 112 1 4 59 17 51 2 960 55 11 119 1 1 113 3 104313 112 1 4 MediaConch/Tools/Policies/sample_policy_4_mkv_ffv1_digitization.xml0000644000000000000000000000703113216666133024607 0ustar rootroot Example of a digitization specification of analog SD video to FFV1 and Matroska. This policy contains a copy of another policy (Is this NTSC or PAL SD). Matroska 4 FFV1 3.4 N=1 Per slice 1.333 A test to see if the files use NTSC or PAL frame rates and sizes. 576 720 25.000 486 480 720 29.970 Interlaced CFR YUV 4:2:2 8 10 PCM 48000 1 2 16 24 MediaConch/Tools/Policies/sample_policy_3_comparison.xml0000644000000000000000000000357313216666133022472 0ustar rootroot Test to make sure that two files share significant characteristics such as when creating a derivative from a source file. compare compare compare compare compare compare compare compare compare compare compare compare compare compare MediaConch/Tools/Policies/scripts/0000755000000000000000000000000013216666133016113 5ustar rootrootMediaConch/Tools/Policies/scripts/mcpolicy0000755000000000000000000000464413216666133017670 0ustar rootroot#!/bin/bash VERSION=0.1 _maketemp(){ mktemp -q "/tmp/$(basename "${0}").XXXXXX" if [ "${?}" -ne 0 ]; then echo "${0}: Can't create temp file, exiting..." _writeerrorlog "_maketemp" "was unable to create the temp file, so the script had to exit." exit 1 fi } _usage(){ echo echo "$(basename "${0}") ${VERSION}" echo "This script is to test MediaConch policies in prototyping. This script is intended to be deprecated by MediaConch itself." echo "Usage: $(basename "${0}") [ -c optional_file_to_compare_to.mkv ] [ -p policy.xml ] [ -d display_type ] av_file_to_test_1 [ av_file_to_test_2 ...]" echo " -c (specify a file to compare the inputs to)" echo " -p (specify a policy)" echo " -d (specify a display xsl)" echo " -h ( display this help )" echo exit } [ "${#}" = 0 ] && _usage OPTIND=1 while getopts ":c:p:d:h" OPT ; do case "${OPT}" in c) comparefile="${OPTARG}";; p) policyfile="${OPTARG}";; d) displayfile="${OPTARG}";; h) _usage ;; *) echo "bad option -${OPTARG}" ; _usage ;; :) echo "Option -${OPTARG} requires an argument" ;; esac done shift $(( ${OPTIND} - 1 )) if [ ! -f "${policyfile}" ] ; then echo "Error: ${policyfile} is not a file." exit fi if [ -f "${comparefile}" ] ; then compare_tmp=$(_maketemp) mediaconch -mi -mmt -fx --force "${comparefile}" > "${compare_tmp}" else if [ "${comparefile}" ] ; then echo "Error: ${comparefile} is not a file." fi fi while [ "${*}" != "" ] ; do INPUT="${1}" shift mc_tmp=$(_maketemp) mediaconch -mi -mmt -fx --ParseSpeed=0.5 --force "${INPUT}" > "${mc_tmp}" if [ -f "${displayfile}" ] ; then xsltproc ../policyset2policytransform2policyresult.xsl "${policyfile}" | sed 's/aliasxsl/xsl/g' | sed 's|xmlns:xsl="my:namespace"|xmlns:xsl="http://www.w3.org/1999/XSL/Transform"|g' | xsltproc - "${mc_tmp}" | xsltproc "${displayfile}" - elif [ -f "${compare_tmp}" ] ; then xsltproc --stringparam compare "${compare_tmp}" ../policyset2policytransform2policyresult.xsl "${policyfile}" | sed 's/aliasxsl/xsl/g' | sed 's|xmlns:xsl="my:namespace"|xmlns:xsl="http://www.w3.org/1999/XSL/Transform"|g' | xsltproc - "${mc_tmp}" else xsltproc ../policyset2policytransform2policyresult.xsl "${policyfile}" | sed 's/aliasxsl/xsl/g' | sed 's|xmlns:xsl="my:namespace"|xmlns:xsl="http://www.w3.org/1999/XSL/Transform"|g' | xsltproc - "${mc_tmp}" fi doneMediaConch/Tools/Policies/scripts/output_of_html_display_on_sample_policy_4.html0000644000000000000000000002445413216666133027446 0ustar rootroot MediaConch

🐚 MediaConch Report

File: /Users/davidrice/Desktop/Dave/untitled folder/bees_ffv1.mkv

Example MKV FFV1 digitization policy

Example of a digitization specification of analog SD video to FFV1 and Matroska.

Type:

Rules run: 17

Fail count: 1

Pass count: 16

Is it PAL or NTSC?

Type:

Rules run: 2

Fail count: 1

Pass count: 1

Is it Matroska?
mi:MediaInfo/mi:track[@type='General']/mi:Format='Matroska'
✅ pass
Matroska version 4 or greater?
mi:MediaInfo/mi:track[@type='General']/mi:Format_Version>='4'
✅ pass
Unique ID is present?
mi:MediaInfo/mi:track[@type='General']/mi:UniqueID
✅ pass
Is the video FFV1?
mi:MediaInfo/mi:track[@type='Video']/mi:Format
✅ pass
FFV1 is version 3.4 or later?
mi:MediaInfo/mi:track[@type='Video']/mi:Format_Version>='3.4'
✅ pass
FFV1 is encoded in GOP size of 1?
mi:MediaInfo/mi:track[@type='Video']/mi:Format_Settings_GOP='N=1'
✅ pass
FFV1 uses slice crcs?
mi:MediaInfo/mi:track[@type='Video']/mi:extra/ErrorDetectionType='Per slice'
❌ fail
Display Aspect Ratio is 4/3?
mi:MediaInfo/mi:track[@type='Video']/mi:DisplayAspectRatio='1.333'
✅ pass
Frame Rate is Constant?
mi:MediaInfo/mi:track[@type='Video']/mi:FrameRate_Mode='CFR'
✅ pass
ColorSpace is YUV?
mi:MediaInfo/mi:track[@type='Video']/mi:ColorSpace='YUV'
✅ pass
Chroma Subsampling is 4:2:2?
mi:MediaInfo/mi:track[@type='Video']/mi:ChromaSubsampling='4:2:2'
✅ pass
Audio is PCM?
mi:MediaInfo/mi:track[@type='Audio']/mi:Format='PCM'
✅ pass
Audio is 48000 Hz?
mi:MediaInfo/mi:track[@type='Audio']/mi:SamplingRate='48000'
✅ pass

Is it PAL?

Type:

Rules run: 4

Fail count: 3

Pass count: 1

Width is 720?
mi:MediaInfo/mi:track[@type='Video']/mi:Width='720'
✅ pass
Height is 512?
mi:MediaInfo/mi:track[@type='Video']/mi:Height='512'
❌ fail
Actual: 486
Frame Rate is 25?
mi:MediaInfo/mi:track[@type='Video']/mi:FrameRate='25.000'
❌ fail
Actual: 29.970
Scan Order is Top Field First?
mi:MediaInfo/mi:track[@type='Video']/mi:ScanOrder='TFF'
❌ fail
Actual: BFF

Is it NTSC?

Type:

Rules run: 4

Fail count: 0

Pass count: 4

Width is 720?
mi:MediaInfo/mi:track[@type='Video']/mi:Width='720'
✅ pass
Height is 486?
mi:MediaInfo/mi:track[@type='Video']/mi:Height='486'
✅ pass
Frame Rate is 29.97?
mi:MediaInfo/mi:track[@type='Video']/mi:FrameRate='29.970'
✅ pass
Scan Order is Bottom Field First?
mi:MediaInfo/mi:track[@type='Video']/mi:ScanOrder='BFF'
✅ pass

Bit Depth is 8 or 10?

Type:

Rules run: 2

Fail count: 1

Pass count: 1

Bit Depth is 8?
mi:MediaInfo/mi:track[@type='Video']/mi:BitDepth='8'
❌ fail
Actual: 10
Bit Depth is 10?
mi:MediaInfo/mi:track[@type='Video']/mi:BitDepth='10'
✅ pass

Audio is Stereo or Mono?

Type:

Rules run: 2

Fail count: 1

Pass count: 1

Audio is mono?
mi:MediaInfo/mi:track[@type='Audio']/mi:Channels='1'
❌ fail
Actual: 2
Audio is stereo?
mi:MediaInfo/mi:track[@type='Audio']/mi:Channels='2'
✅ pass

Bit Depth is 16 or 24?

Type:

Rules run: 2

Fail count: 1

Pass count: 1

Bit Depth is 16?
mi:MediaInfo/mi:track[@type='Audio']/mi:BitDepth='16'
❌ fail
Actual: 24
Bit Depth is 24?
mi:MediaInfo/mi:track[@type='Audio']/mi:BitDepth='24'
✅ pass
MediaConch/Tools/Policies/scripts/README.md0000644000000000000000000000054413216666133017375 0ustar rootroot# readme The script mcpolicy is to allow a quick creation of a policy output in display form without mediaconch. The suggested command presumed that you did a `cd` into this directory. ``` ./mcpolicy -p ../sample_policy_4_mkv_ffv1_digitization.xml -d ../../displays/MediaConchHtml.xsl some_random.mkv > policy_output.html && open policy_output.html ``` MediaConch/Tools/Policies/README.md0000644000000000000000000000360713216666133015711 0ustar rootroot# How To ``` xsltproc policyset2policytransform2policyresult.xsl sample_policy_1.xml | sed 's/aliasxsl/xsl/g' | sed 's|xmlns:xsl="my:namespace"|xmlns:xsl="http://www.w3.org/1999/XSL/Transform"|g' | xsltproc - some_files_mediaarea_report.xml ``` To use comparison method, set `compare` as a test value and reference to mediaarea report to compare to: ``` xsltproc --stringparam compare mediaarea_xml_of_reference.xml policyset2policytransform2policyresult.xsl sample_policy_1.xml | sed 's/aliasxsl/xsl/g' | sed 's|xmlns:xsl="my:namespace"|xmlns:xsl="http://www.w3.org/1999/XSL/Transform"|g' | xsltproc - some_files_mediaarea_report.xml ``` ## occurrence Optional to store. If no `occurrence` attribute is provided, the test will run to see if the rule is true for `ANY` occurrence. Otherwise set `occurrence` to the track number, counting from 1. ## operator Optional to store (but storing no operator infers that you are only testing for the existance of the value). The operator stored must be a valid xpath operator such as: - = - < - > - <= - >= If no operator attribute is stored, then the test only checks for the existance of the metadata value and any value to compare it to is ignored. ## scope Optional to store. Set to 'mt' if doing a MediaTrace test, otherwise omit the attribute. ## value Mandatory to store. Set to the name of the MediaInfo metadata value. Or is scope='mt' then set to a slash delimited list of the name attributes of the block and data elements, such as `Segment/Cluster/SimpleBlock/Data/keyframe` or `EBML/EBMLVersion/Data`. Note that `EBML/EBMLVersion` would not give the expected results. For advanced use, the `size` of a MediaTrace block could be tested like `EBML/EBMLVersion/Header/Size` as long as the "block[@name]{*}/data[@name]" pattern is followed. ## tracktype Mandatory to store. Must be set to a MediaInfo tracktype: General, Video, Audio, etc. MediaConch/Tools/Policies/sample_policy_1_output.xml0000644000000000000000000001255213216666133021653 0ustar rootroot NTSC is nice, so is PAL, also 320x240 cuz its my sample file MediaConch/Source/0000755000000000000000000000000013216666133013015 5ustar rootrootMediaConch/Source/Daemon/0000755000000000000000000000000013216666135014222 5ustar rootrootMediaConch/Source/Daemon/Daemon.h0000644000000000000000000002643513216666133015606 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef DaemonH #define DaemonH //--------------------------------------------------------------------------- #include #include #include #include "MediaInfo/MediaInfo.h" #include "Common/MediaConchLib.h" #include "Common/REST_API.h" //*************************************************************************** // Daemon //*************************************************************************** namespace MediaConch { class Httpd; //-------------------------------------------------------------------------- class Daemon { public: Daemon(); ~Daemon(); static std::string version; int parse_args(int ac, char** av); int init(std::string& err); int run(std::string& err); int run_plugins_list(std::string& err); int finish(); private: Daemon(const Daemon&); Daemon& operator=(const Daemon&); MediaConchLib *MCL; bool is_daemon; Httpd *httpd; std::string last_argument; std::ofstream *logger; std::streambuf *clog_buffer; std::string watch_folder; std::string watch_folder_reports; long *watch_folder_user; bool watch_folder_recursive; std::vector plugins; std::vector policies; std::vector > options; //Mode enum daemon_mode { DAEMON_MODE_DAEMON, DAEMON_MODE_PLUGINS_LIST, }; daemon_mode mode; // Helper int daemonize(); // Parse option helper int parse(std::string& argument); int parse_help(const std::string& argument); int parse_version(const std::string& argument); int parse_fork(const std::string& argument); int parse_configuration(const std::string& argument); int parse_plugins_configuration(const std::string& argument); int parse_plugins_list(const std::string& argument); int parse_plugin(const std::string& argument); int parse_policy(const std::string& argument); int parse_compression(const std::string& argument); int parse_implementationschema(const std::string& argument); int parse_implementationverbosity(const std::string& argument); int parse_outputlog(const std::string& argument); int parse_watchfolder(const std::string& argument); int parse_watchfolder_reports(const std::string& argument); int parse_watchfolder_not_recursive(const std::string& argument); int parse_watchfolder_user(const std::string& argument); int parse_other(const std::string& argument); // Request received callbacks // MediaConch static int on_mediaconch_get_plugins_command(const RESTAPI::MediaConch_Get_Plugins_Req* req, RESTAPI::MediaConch_Get_Plugins_Res& res, void *arg); static int on_mediaconch_watch_folder_command(const RESTAPI::MediaConch_Watch_Folder_Req* req, RESTAPI::MediaConch_Watch_Folder_Res& res, void *arg); static int on_mediaconch_list_watch_folders_command(const RESTAPI::MediaConch_List_Watch_Folders_Req* req, RESTAPI::MediaConch_List_Watch_Folders_Res& res, void *arg); static int on_mediaconch_edit_watch_folder_command(const RESTAPI::MediaConch_Edit_Watch_Folder_Req* req, RESTAPI::MediaConch_Edit_Watch_Folder_Res& res, void *arg); static int on_mediaconch_remove_watch_folder_command(const RESTAPI::MediaConch_Remove_Watch_Folder_Req* req, RESTAPI::MediaConch_Remove_Watch_Folder_Res& res, void *arg); // Checker static int on_checker_analyze_command(const RESTAPI::Checker_Analyze_Req* req, RESTAPI::Checker_Analyze_Res& res, void *arg); static int on_checker_status_command(const RESTAPI::Checker_Status_Req* req, RESTAPI::Checker_Status_Res& res, void *arg); static int on_checker_report_command(const RESTAPI::Checker_Report_Req* req, RESTAPI::Checker_Report_Res& res, void *arg); static int on_checker_clear_command(const RESTAPI::Checker_Clear_Req* req, RESTAPI::Checker_Clear_Res& res, void *arg); static int on_checker_stop_command(const RESTAPI::Checker_Stop_Req* req, RESTAPI::Checker_Stop_Res& res, void *arg); static int on_checker_list_command(const RESTAPI::Checker_List_Req* req, RESTAPI::Checker_List_Res& res, void *arg); static int on_checker_validate_command(const RESTAPI::Checker_Validate_Req* req, RESTAPI::Checker_Validate_Res& res, void *arg); static int on_checker_file_from_id_command(const RESTAPI::Checker_File_From_Id_Req* req, RESTAPI::Checker_File_From_Id_Res& res, void *arg); static int on_checker_id_from_filename_command(const RESTAPI::Checker_Id_From_Filename_Req* req, RESTAPI::Checker_Id_From_Filename_Res& res, void *arg); static int on_checker_file_information_command(const RESTAPI::Checker_File_Information_Req* req, RESTAPI::Checker_File_Information_Res& res, void *arg); static int on_checker_list_mediainfo_outputs_command(const RESTAPI::Checker_List_MediaInfo_Outputs_Req* req, RESTAPI::Checker_List_MediaInfo_Outputs_Res& res, void *arg); static int on_default_values_for_type_command(const RESTAPI::Default_Values_For_Type_Req* req, RESTAPI::Default_Values_For_Type_Res& res, void *arg); // Policy static int on_xslt_policy_create_command(const RESTAPI::XSLT_Policy_Create_Req* req, RESTAPI::XSLT_Policy_Create_Res& res, void *arg); static int on_policy_import_command(const RESTAPI::Policy_Import_Req* req, RESTAPI::Policy_Import_Res& res, void *arg); static int on_policy_remove_command(const RESTAPI::Policy_Remove_Req* req, RESTAPI::Policy_Remove_Res& res, void *arg); static int on_policy_dump_command(const RESTAPI::Policy_Dump_Req* req, RESTAPI::Policy_Dump_Res& res, void *arg); static int on_policy_save_command(const RESTAPI::Policy_Save_Req* req, RESTAPI::Policy_Save_Res& res, void *arg); static int on_policy_duplicate_command(const RESTAPI::Policy_Duplicate_Req* req, RESTAPI::Policy_Duplicate_Res& res, void *arg); static int on_policy_move_command(const RESTAPI::Policy_Move_Req* req, RESTAPI::Policy_Move_Res& res, void *arg); static int on_policy_change_info_command(const RESTAPI::Policy_Change_Info_Req* req, RESTAPI::Policy_Change_Info_Res& res, void *arg); static int on_policy_change_type_command(const RESTAPI::Policy_Change_Type_Req* req, RESTAPI::Policy_Change_Type_Res& res, void *arg); static int on_policy_change_is_public_command(const RESTAPI::Policy_Change_Is_Public_Req* req, RESTAPI::Policy_Change_Is_Public_Res& res, void *arg); static int on_policy_get_command(const RESTAPI::Policy_Get_Req* req, RESTAPI::Policy_Get_Res& res, void *arg); static int on_policy_get_name_command(const RESTAPI::Policy_Get_Name_Req* req, RESTAPI::Policy_Get_Name_Res& res, void *arg); static int on_policy_get_policies_count_command(const RESTAPI::Policy_Get_Policies_Count_Req* req, RESTAPI::Policy_Get_Policies_Count_Res& res, void *arg); static int on_policy_clear_policies_command(const RESTAPI::Policy_Clear_Policies_Req* req, RESTAPI::Policy_Clear_Policies_Res& res, void *arg); static int on_policy_get_policies_command(const RESTAPI::Policy_Get_Policies_Req* req, RESTAPI::Policy_Get_Policies_Res& res, void *arg); static int on_policy_get_public_policies_command(const RESTAPI::Policy_Get_Public_Policies_Req* req, RESTAPI::Policy_Get_Public_Policies_Res& res, void *arg); static int on_policy_get_policies_names_list_command(const RESTAPI::Policy_Get_Policies_Names_List_Req* req, RESTAPI::Policy_Get_Policies_Names_List_Res& res, void *arg); static int on_xslt_policy_create_from_file_command(const RESTAPI::XSLT_Policy_Create_From_File_Req* req, RESTAPI::XSLT_Policy_Create_From_File_Res& res, void *arg); static int on_xslt_policy_rule_create_command(const RESTAPI::XSLT_Policy_Rule_Create_Req* req, RESTAPI::XSLT_Policy_Rule_Create_Res& res, void *arg); static int on_xslt_policy_rule_get_command(const RESTAPI::XSLT_Policy_Rule_Get_Req* req, RESTAPI::XSLT_Policy_Rule_Get_Res& res, void *arg); static int on_xslt_policy_rule_edit_command(const RESTAPI::XSLT_Policy_Rule_Edit_Req* req, RESTAPI::XSLT_Policy_Rule_Edit_Res& res, void *arg); static int on_xslt_policy_rule_duplicate_command(const RESTAPI::XSLT_Policy_Rule_Duplicate_Req* req, RESTAPI::XSLT_Policy_Rule_Duplicate_Res& res, void *arg); static int on_xslt_policy_rule_move_command(const RESTAPI::XSLT_Policy_Rule_Move_Req* req, RESTAPI::XSLT_Policy_Rule_Move_Res& res, void *arg); static int on_xslt_policy_rule_delete_command(const RESTAPI::XSLT_Policy_Rule_Delete_Req* req, RESTAPI::XSLT_Policy_Rule_Delete_Res& res, void *arg); std::string get_date() const; }; } #endif MediaConch/Source/Daemon/Help.cpp0000644000000000000000000000760013216666133015617 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include "Help.h" #include "Config.h" #include "Daemon.h" //--------------------------------------------------------------------------- //*************************************************************************** // //*************************************************************************** //--------------------------------------------------------------------------- int Help() { Version(); Help_Usage(); TEXTOUT(""); TEXTOUT("Options:"); TEXTOUT("Help:"); TEXTOUT(" --Help, -h"); TEXTOUT(" Display this help and exit"); TEXTOUT(" --Version, -v"); TEXTOUT(" Display the version and exit"); TEXTOUT(""); TEXTOUT("Configuration Element:"); TEXTOUT(" --Configuration=ConfigurationFile, -c ConfigurationFile"); TEXTOUT(" Use ConfigurationFile as configuration file"); TEXTOUT(" Default, it uses the one in the user data application file"); TEXTOUT(" --PluginsConfiguration=PluginsConfigurationFile, -pc PluginsConfigurationFile"); TEXTOUT(" Use PluginsConfigurationFile as plugins configuration file"); TEXTOUT(" Default, it uses the struct in the configuration file or"); TEXTOUT(" no plugins configured if not inside."); TEXTOUT(""); TEXTOUT("Implementation Checker:"); TEXTOUT(" --ImplementationSchema=File, -i File"); TEXTOUT(" Use the specified File for implementation validation"); TEXTOUT(" --ImplementationVerbosity=V, -iv V"); TEXTOUT(" Select verbosity (V) of the implementation check, default 5"); TEXTOUT(" <= 4, show only fails and N/A"); TEXTOUT(" >= 5, show fails, N/A and pass"); TEXTOUT(""); TEXTOUT("Daemon fork:"); TEXTOUT(" --Fork=[Yes/No]"); TEXTOUT(" If No, MediaConchd will not fork, default it forks"); TEXTOUT(" -n"); TEXTOUT(" Same as --Fork=No"); TEXTOUT(""); TEXTOUT("Daemon Debug:"); TEXTOUT(" --OutputLog=File, -o File"); TEXTOUT(" Log debug information to File"); TEXTOUT(""); TEXTOUT("Watch folder:"); TEXTOUT(" --WatchFolder=folder, -wf folder"); TEXTOUT(" Send to the server a folder to watch"); TEXTOUT(" --WatchFolder-Reports=folder, -wfr folder"); TEXTOUT(" Create reports of the selected watch folder to this folder"); TEXTOUT(" --WatchFolder-Not-Recursive"); TEXTOUT(" If watch folder is enabled, do not check recursively the folder"); TEXTOUT(" --Plugin=PluginID"); TEXTOUT(" By default, only format plugin are used."); TEXTOUT(" With this command, you can give the plugin ID you want to use."); TEXTOUT(" Plugin ID can be get using the --pluginslist."); TEXTOUT(" --PluginsList"); TEXTOUT(" Output the plugins information ID"); TEXTOUT(" --Policy=PolicyFile, -p PolicyFile"); TEXTOUT(" Policy used by the watch folder manager."); TEXTOUT(""); return DAEMON_RETURN_FINISH; } //--------------------------------------------------------------------------- int Help_Usage() { TEXTOUT("Usage: \"MediaConchD [-Options...]\""); return DAEMON_RETURN_ERROR; } //--------------------------------------------------------------------------- int Version() { TEXTOUT(std::string("MediaConch Daemon " + MediaConch::Daemon::version).c_str()); return DAEMON_RETURN_FINISH; } MediaConch/Source/Daemon/Daemon_Main.h0000644000000000000000000000144513216666133016544 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef CLI_MainH #define CLI_MainH //--------------------------------------------------------------------------- //*************************************************************************** // //*************************************************************************** //--------------------------------------------------------------------------- // Platform independance... #include "Config.h" //*************************************************************************** // //*************************************************************************** #endif MediaConch/Source/Daemon/Daemon_Main.cpp0000644000000000000000000000430413216666133017074 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include "Daemon_Main.h" #include "Common/MediaConchLib.h" #include "Help.h" #include "Daemon.h" #if defined(_MSC_VER) && defined(UNICODE) #include "io.h" #include "fcntl.h" #endif //*************************************************************************** // Main //*************************************************************************** //--------------------------------------------------------------------------- int main(int argc, char* argv_ansi[]) { //Localisation setlocale(LC_ALL, ""); MediaInfoLib::MediaInfo::Option_Static(__T("CharSet"), __T("")); //Initialize terminal (to fix Unicode output on Win32) #if defined(_MSC_VER) && defined(UNICODE) //_setmode(_fileno(stdout), _O_U8TEXT); //_setmode(_fileno(stderr), _O_U8TEXT); #endif MediaInfoLib::MediaInfo::Option_Static(__T("LineSeparator"), __T("\n")); //Using sdtout #ifdef _WIN32 //Initialize sockets (needed before using sockets on Windows) WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData)) { printf("WSAStartup failed\n"); return 1; } #endif //_WIN32 // TODO: Retrieve command line (mainly for Unicode) // GETCOMMANDLINE(); MediaConch::Daemon daemon; std::string error; //Parse command line int ret = daemon.parse_args(argc, argv_ansi); if (ret == DAEMON_RETURN_ERROR) ret = 1; else if (ret == DAEMON_RETURN_FINISH) ret = 0; else if (daemon.init(error) < 0) ret = 2; else if (daemon.run(error) < 0) ret = 2; if (ret == 2) STRINGERR(ZenLib::Ztring().From_UTF8(error)); #ifdef _WIN32 WSACleanup(); #endif //_WIN32 return ret; } MediaConch/Source/Daemon/.gitignore0000644000000000000000000000004513216666133016207 0ustar rootroot# make generated *.o .deps .dirstamp MediaConch/Source/Daemon/Help.h0000644000000000000000000000155213216666133015264 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifndef HelpH #define HelpH //--------------------------------------------------------------------------- //*************************************************************************** // //*************************************************************************** //--------------------------------------------------------------------------- int Help(); int Help_Usage(); int Version(); //*************************************************************************** // //*************************************************************************** #endif MediaConch/Source/Daemon/Config.h0000644000000000000000000000551613216666133015605 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #if defined(STREAM_MISSING) #else #include #endif #include #include "ZenLib/Ztring.h" #ifdef __WINDOWS__ #undef __TEXT #include #endif //--------------------------------------------------------------------------- #ifndef ConfigH #define ConfigH //--------------------------------------------------------------------------- // Return value for parsing enum DaemonReturnValue { DAEMON_RETURN_ERROR = -1, DAEMON_RETURN_NONE = 0, DAEMON_RETURN_FINISH = 1, }; //--------------------------------------------------------------------------- //Get command line args in main() #ifdef UNICODE #ifdef _WIN32 #define GETCOMMANDLINE() \ MediaInfoNameSpace::Char** argv=CommandLineToArgvW(GetCommandLineW(), &argc); \ #else //WIN32 #define GETCOMMANDLINE() \ std::vector argv; \ for (int Pos=0; Pos #include #include #include #include "Common/Httpd.h" #include "Common/Core.h" #include "Common/LibEventHttpd.h" #include "Common/Policy.h" #include "Common/XsltPolicy.h" #include "Daemon.h" #include "Help.h" #include "Config.h" #ifndef _WIN32 #include #endif //_WIN32 #include #include //**************************************************************************** // Extern //**************************************************************************** extern ZenLib::Ztring LogFile_FileName; //--------------------------------------------------------------------------- namespace MediaConch { //************************************************************************** // Daemon //************************************************************************** std::string Daemon::version = "17.12.0"; //-------------------------------------------------------------------------- Daemon::Daemon() : is_daemon(true), httpd(NULL), logger(NULL), watch_folder_user(NULL), watch_folder_recursive(true), mode(DAEMON_MODE_DAEMON) { MCL = new MediaConchLib(true); clog_buffer = std::clog.rdbuf(); } //-------------------------------------------------------------------------- Daemon::~Daemon() { delete MCL; if (logger) { std::clog.rdbuf(clog_buffer); delete logger; } if (watch_folder_user) delete watch_folder_user; } //-------------------------------------------------------------------------- int Daemon::init(std::string& err) { if (MCL->init(err) < 0) return -1; // If no Implementation Schema registered, use one by default if (!MCL->get_implementation_schema_file().length()) MCL->create_default_implementation_schema(); // Load policy MCL->load_system_policy(); MCL->load_existing_policy(); httpd = new LibEventHttpd(this); int port = -1; std::string address; MCL->get_daemon_address(address, port); if (address.length()) httpd->set_address(address); if (port != -1) httpd->set_port(port); if (httpd->init(err) < 0) { std::clog << err << std::endl; return -1; } httpd->commands.mediaconch_get_plugins_cb = on_mediaconch_get_plugins_command; httpd->commands.mediaconch_watch_folder_cb = on_mediaconch_watch_folder_command; httpd->commands.mediaconch_list_watch_folders_cb = on_mediaconch_list_watch_folders_command; httpd->commands.mediaconch_edit_watch_folder_cb = on_mediaconch_edit_watch_folder_command; httpd->commands.mediaconch_remove_watch_folder_cb = on_mediaconch_remove_watch_folder_command; httpd->commands.checker_analyze_cb = on_checker_analyze_command; httpd->commands.checker_status_cb = on_checker_status_command; httpd->commands.checker_report_cb = on_checker_report_command; httpd->commands.checker_clear_cb = on_checker_clear_command; httpd->commands.checker_stop_cb = on_checker_stop_command; httpd->commands.checker_list_cb = on_checker_list_command; httpd->commands.checker_validate_cb = on_checker_validate_command; httpd->commands.checker_file_from_id_cb = on_checker_file_from_id_command; httpd->commands.checker_id_from_filename_cb = on_checker_id_from_filename_command; httpd->commands.checker_file_information_cb = on_checker_file_information_command; httpd->commands.checker_list_mediainfo_outputs_cb = on_checker_list_mediainfo_outputs_command; httpd->commands.default_values_for_type_cb = on_default_values_for_type_command; httpd->commands.xslt_policy_create_cb = on_xslt_policy_create_command; httpd->commands.policy_import_cb = on_policy_import_command; httpd->commands.policy_save_cb = on_policy_save_command; httpd->commands.policy_dump_cb = on_policy_dump_command; httpd->commands.policy_remove_cb = on_policy_remove_command; httpd->commands.policy_duplicate_cb = on_policy_duplicate_command; httpd->commands.policy_move_cb = on_policy_move_command; httpd->commands.policy_change_info_cb = on_policy_change_info_command; httpd->commands.policy_change_type_cb = on_policy_change_type_command; httpd->commands.policy_change_is_public_cb = on_policy_change_is_public_command; httpd->commands.policy_get_cb = on_policy_get_command; httpd->commands.policy_get_name_cb = on_policy_get_name_command; httpd->commands.policy_get_policies_count_cb = on_policy_get_policies_count_command; httpd->commands.policy_clear_policies_cb = on_policy_clear_policies_command; httpd->commands.policy_get_policies_cb = on_policy_get_policies_command; httpd->commands.policy_get_public_policies_cb = on_policy_get_public_policies_command; httpd->commands.policy_get_policies_names_list_cb = on_policy_get_policies_names_list_command; httpd->commands.xslt_policy_create_from_file_cb = on_xslt_policy_create_from_file_command; httpd->commands.xslt_policy_rule_create_cb = on_xslt_policy_rule_create_command; httpd->commands.xslt_policy_rule_get_cb = on_xslt_policy_rule_get_command; httpd->commands.xslt_policy_rule_edit_cb = on_xslt_policy_rule_edit_command; httpd->commands.xslt_policy_rule_duplicate_cb = on_xslt_policy_rule_duplicate_command; httpd->commands.xslt_policy_rule_move_cb = on_xslt_policy_rule_move_command; httpd->commands.xslt_policy_rule_delete_cb = on_xslt_policy_rule_delete_command; return 0; } //-------------------------------------------------------------------------- int Daemon::parse_args(int argc, char **argv) { //Parse command line for (int pos = 1; pos < argc; ++pos) { //First part of argument (before "=") should be case insensitive std::string argument(argv[pos]); if (!argument.compare(0, 1, "-")) { size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) egal_pos = argument.size(); transform(argument.begin(), argument.begin() + egal_pos, argument.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix } int ret = parse(argument); if (ret == DAEMON_RETURN_ERROR || ret == DAEMON_RETURN_FINISH) return ret; } return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::run(std::string& err) { switch (mode) { case DAEMON_MODE_PLUGINS_LIST: return run_plugins_list(err); case DAEMON_MODE_DAEMON: //default, continue break; } if (is_daemon) daemonize(); if (MCL && watch_folder.size()) { long user_id = -1; int ret = MCL->mediaconch_watch_folder(watch_folder, watch_folder_reports, plugins, policies, watch_folder_user, watch_folder_recursive, options, user_id, err); if (ret < 0) std::clog << "Cannot watch folder:" << watch_folder << ":" << err << std::endl; else std::clog << "Watching folder:" << watch_folder << ", user:" << user_id << std::endl; } if (!httpd) { err = "HTTP library not initialized."; return -1; } if (httpd->bind(err) < 0) { std::clog << httpd->get_error() << std::endl; return -1; } std::clog << get_date() << "Daemon is running on " << httpd->get_address() << ":" << httpd->get_port() << std::endl; if (httpd->start(err) < 0) { std::clog << err << std::endl; return -1; } return 0; } //-------------------------------------------------------------------------- int Daemon::run_plugins_list(std::string& err) { std::stringstream out; std::vector list; if (MCL->mediaconch_get_plugins(list, err) < 0) return DAEMON_RETURN_ERROR; out << "plugins:["; for (size_t i = 0; i < list.size(); ++i) { if (i) out << ", "; out << "\"" << list[i] << "\""; } out << "]" << std::endl; TEXTOUT(out.str().c_str()); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::finish() { if (httpd) httpd->finish(); MCL->close(); std::clog << get_date() << "Daemon is stopped" << std::endl; return 0; } //-------------------------------------------------------------------------- int Daemon::parse(std::string& argument) { #define LAUNCH(_METHOD) \ { \ int ret = parse_##_METHOD(argument); \ if (ret == DAEMON_RETURN_ERROR || ret == DAEMON_RETURN_FINISH) \ return ret; \ } #define OPTION(_TEXT, _TOLAUNCH) \ else if (argument.find(_TEXT)==0) LAUNCH(_TOLAUNCH) if (last_argument.length()) { argument = last_argument + argument; last_argument = std::string(); } if (argument=="-h") argument="--help"; else if (argument=="-v") argument="--version"; else if (argument=="-n") argument="--fork=No"; if (argument=="-c") { last_argument="--configuration="; return DAEMON_RETURN_NONE; } else if (argument=="-pc") { last_argument="--pluginsconfiguration="; return DAEMON_RETURN_NONE; } else if (argument=="-i") { last_argument = "--implementationschema="; return DAEMON_RETURN_NONE; } else if (argument=="-iv") { last_argument = "--implementationverbosity="; return DAEMON_RETURN_NONE; } else if (argument=="-o") { last_argument = "--outputlog="; return DAEMON_RETURN_NONE; } else if (argument=="-wf") { last_argument = "--watchfolder="; return DAEMON_RETURN_NONE; } else if (argument=="-wfr") { last_argument = "--watchfolder-reports="; return DAEMON_RETURN_NONE; } else if (argument=="-p") { last_argument = "--policy="; return DAEMON_RETURN_NONE; } // Compression short option if (argument=="-cz") argument = "--compression=zlib"; if (0); OPTION("--help", help) OPTION("--version", version) OPTION("--fork", fork) OPTION("--configuration", configuration) OPTION("--pluginsconfiguration", plugins_configuration) OPTION("--pluginslist", plugins_list) OPTION("--plugin", plugin) OPTION("--policy", policy) OPTION("--compression", compression) OPTION("--implementationschema", implementationschema) OPTION("--implementationverbosity", implementationverbosity) OPTION("--outputlog", outputlog) OPTION("--watchfolder-reports", watchfolder_reports) OPTION("--watchfolder-not-recursive", watchfolder_not_recursive) OPTION("--watchfolder-user", watchfolder_user) OPTION("--watchfolder", watchfolder) OPTION("--", other) else { Help(); return DAEMON_RETURN_ERROR; } return DAEMON_RETURN_NONE; #undef OPTION #undef LAUNCH } //-------------------------------------------------------------------------- int Daemon::parse_fork(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) return DAEMON_RETURN_NONE; std::string not_daemon = argument.substr(equal_pos + 1); if (not_daemon == "no" || not_daemon == "No") is_daemon = false; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_help(const std::string& argument) { (void)argument; return Help(); } //-------------------------------------------------------------------------- int Daemon::parse_version(const std::string& argument) { (void)argument; return Version(); } //-------------------------------------------------------------------------- int Daemon::parse_configuration(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) return DAEMON_RETURN_NONE; std::string file = argument.substr(equal_pos + 1); MCL->set_configuration_file(file); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_plugins_configuration(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string file = argument.substr(equal_pos + 1); MCL->set_plugins_configuration_file(file); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_compression(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string mode_str; mode_str.assign(argument, equal_pos + 1 , std::string::npos); transform(mode_str.begin(), mode_str.end(), mode_str.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix MediaConchLib::compression mode; if (mode_str == "none") mode = MediaConchLib::compression_None; else if (mode_str == "zlib") mode = MediaConchLib::compression_ZLib; else { Help(); return DAEMON_RETURN_ERROR; } MCL->set_compression_mode(mode); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_implementationschema(const std::string& argument) { //Form : --ImplemnetationSchema=File size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string schema; schema.assign(argument, egal_pos + 1 , std::string::npos); MCL->set_implementation_schema_file(schema); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_implementationverbosity(const std::string& argument) { //Form : --ImplemnetationSchema=File size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string verbosity; verbosity.assign(argument, egal_pos + 1 , std::string::npos); MCL->set_implementation_verbosity(verbosity); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_outputlog(const std::string& argument) { size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string log_file; log_file.assign(argument, egal_pos + 1 , std::string::npos); logger = new std::ofstream(log_file.c_str()); std::clog.rdbuf(logger->rdbuf()); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_plugin(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string plugin = argument.substr(equal_pos + 1); plugins.push_back(plugin); return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_plugins_list(const std::string& argument) { (void)argument; mode = DAEMON_MODE_PLUGINS_LIST; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_policy(const std::string& argument) { size_t equal_pos = argument.find('='); if (equal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string filename = argument.substr(equal_pos + 1); ZenLib::Ztring z_filename = ZenLib::Ztring().From_UTF8(filename); if (!ZenLib::File::Exists(z_filename)) { TEXTOUT("Policiy file does not exists"); return DAEMON_RETURN_ERROR; } ZenLib::File file(z_filename); ZenLib::int64u size = file.Size_Get(); if (size == (ZenLib::int64u)-1) { TEXTOUT("Cannot read the policiy file"); return DAEMON_RETURN_ERROR; } ZenLib::int8u* Buffer = new ZenLib::int8u[size + 1]; size_t len = file.Read(Buffer, size); Buffer[len] = '\0'; ZenLib::Ztring FromFile; FromFile.From_UTF8((char*)Buffer); if (FromFile.empty()) FromFile.From_Local((char*)Buffer); file.Close(); policies.push_back(FromFile.To_UTF8()); delete [] Buffer; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_watchfolder(const std::string& argument) { size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string folder; folder.assign(argument, egal_pos + 1 , std::string::npos); watch_folder = folder; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_watchfolder_reports(const std::string& argument) { size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string dir; dir.assign(argument, egal_pos + 1 , std::string::npos); watch_folder_reports = dir; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_watchfolder_user(const std::string& argument) { size_t egal_pos = argument.find('='); if (egal_pos == std::string::npos) { Help(); return DAEMON_RETURN_ERROR; } std::string user; user.assign(argument, egal_pos + 1 , std::string::npos); if (user.size()) { char *end = NULL; watch_folder_user = new long; *watch_folder_user = strtol(user.c_str(), &end, 10); } return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_watchfolder_not_recursive(const std::string& argument) { (void)argument; watch_folder_recursive = false; return DAEMON_RETURN_NONE; } //-------------------------------------------------------------------------- int Daemon::parse_other(const std::string& argument) { if (argument.size() < 2) return DAEMON_RETURN_NONE; std::string key; std::string value; size_t egal_pos = argument.find('='); if (egal_pos != std::string::npos) { key.assign(argument, 2 , egal_pos - 2); value.assign(argument, egal_pos + 1, std::string::npos); } else key.assign(argument, 2, std::string::npos); std::string report; if (MCL->test_mil_option(key, value, report) < 0) { ZenLib::Ztring str; str.From_UTF8(report); STRINGOUT(str); if (report == "Option not known") return DAEMON_RETURN_ERROR; return DAEMON_RETURN_FINISH; } options.push_back(std::make_pair(key, value)); return DAEMON_RETURN_NONE; } #if defined(_WIN32) || defined(WIN32) //--------------------------------------------------------------------------- int Daemon::daemonize() { return 0; } #else //--------------------------------------------------------------------------- int Daemon::daemonize() { // Fork pid_t pid = fork(); if (pid < 0) return -1; // close the parent if (pid > 0) exit(EXIT_SUCCESS); umask(0); pid_t sid = setsid(); if (sid < 0) return -1; if ((chdir("/")) < 0) return -1; close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); return 0; } #endif #define FUN_CMD_PROTO(NAME, STRUCT) \ int Daemon::on_##NAME##_command(const RESTAPI::STRUCT##_Req* req, \ RESTAPI::STRUCT##_Res& res, void *arg) #define FUN_CMD_START(CMD) \ Daemon *d = (Daemon*)arg; \ if (!d || !req) \ return -1; \ \ std::clog << d->get_date() << "Daemon received "#CMD" command:"; \ std::clog << req->to_str() << std::endl; #define FUN_CMD_NOK(OBJ, ERR, ID) \ { \ OBJ.nok = new RESTAPI::MediaConch_Nok; \ if ((long)ID != -1) \ { \ OBJ.nok->id = new long; \ *OBJ.nok->id = ID; \ } \ OBJ.nok->error = ERR; \ } #define FUN_CMD_NOK_ARR(OBJ, ERR, ID) \ { \ RESTAPI::MediaConch_Nok *nok = new RESTAPI::MediaConch_Nok; \ if ((long)ID != -1) \ { \ nok->id = new long; \ *nok->id = ID; \ } \ nok->error = ERR; \ OBJ.nok.push_back(nok); \ continue; \ } #define FUN_CMD_END(CMD) \ std::clog << d->get_date() << "Daemon send "#CMD" result: " << res.to_str() << std::endl; \ return 0; //-------------------------------------------------------------------------- FUN_CMD_PROTO(mediaconch_get_plugins, MediaConch_Get_Plugins) { FUN_CMD_START(MediaConch_Get_Plugins) std::vector vec; std::string err; if (d->MCL->mediaconch_get_plugins(vec, err) < 0) FUN_CMD_NOK(res, err, -1) else { for (size_t i = 0; i < vec.size(); ++i) res.plugins.push_back(vec[i]); } FUN_CMD_END(MediaConch_Get_Plugins) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(mediaconch_watch_folder, MediaConch_Watch_Folder) { FUN_CMD_START(MediaConch_Watch_Folder) std::string err; long user_id = -1; if (d->MCL->mediaconch_watch_folder(req->folder, req->folder_reports, req->plugins, req->policies, req->user, req->recursive, req->options, user_id, err) < 0) FUN_CMD_NOK(res, err, -1) else res.user = user_id; FUN_CMD_END(MediaConch_Watch_Folder) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(mediaconch_list_watch_folders, MediaConch_List_Watch_Folders) { FUN_CMD_START(MediaConch_List_Watch_Folders) std::string err; std::vector list; if (d->MCL->mediaconch_list_watch_folders(list, err) < 0) FUN_CMD_NOK(res, err, -1) else for (size_t i = 0; i < list.size(); ++i) res.folders.push_back(list[i]); FUN_CMD_END(MediaConch_List_Watch_Folders) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(mediaconch_edit_watch_folder, MediaConch_Edit_Watch_Folder) { FUN_CMD_START(MediaConch_Edit_Watch_Folder) std::string err; if (d->MCL->mediaconch_edit_watch_folder(req->folder, req->folder_reports, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(MediaConch_Edit_Watch_Folder) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(mediaconch_remove_watch_folder, MediaConch_Remove_Watch_Folder) { FUN_CMD_START(MediaConch_Remove_Watch_Folder) std::string err; if (d->MCL->mediaconch_remove_watch_folder(req->folder, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(MediaConch_Remove_Watch_Folder) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_analyze, Checker_Analyze) { FUN_CMD_START(Checker_Analyze) for (size_t i = 0; i < req->args.size(); ++i) { bool force = false; if (req->args[i].has_force_analyze) force = req->args[i].force_analyze; std::vector plugins; for (size_t j = 0; j < req->args[i].plugins.size(); ++j) plugins.push_back(req->args[i].plugins[j]); std::vector > options; for (size_t j = 0; j < req->args[i].options.size(); ++j) options.push_back(std::make_pair(req->args[i].options[j].first, req->args[i].options[j].second)); bool registered = false; long out_id = -1; std::string err; int ret = d->MCL->checker_analyze(req->args[i].user, req->args[i].file, plugins, options, registered, out_id, err, force, req->args[i].mil_analyze); if (ret < 0) FUN_CMD_NOK_ARR(res, err, req->args[i].id) RESTAPI::Checker_Analyze_Ok *ok = new RESTAPI::Checker_Analyze_Ok; ok->inId = req->args[i].id; ok->outId = out_id; ok->create = !registered; res.ok.push_back(ok); } FUN_CMD_END(Checker_Analyze) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_status, Checker_Status) { FUN_CMD_START(Checker_Status) for (size_t i = 0; i < req->ids.size(); ++i) { long id = req->ids[i]; if (id < 0) FUN_CMD_NOK_ARR(res, "ID not existing", id) MediaConchLib::Checker_StatusRes st_res; std::string err; int ret = d->MCL->checker_status(req->user, id, st_res, err); if (ret < 0) FUN_CMD_NOK_ARR(res, err, id) RESTAPI::Checker_Status_Ok *ok = new RESTAPI::Checker_Status_Ok; ok->id = id; ok->finished = st_res.finished; ok->has_error = st_res.has_error; if (ok->has_error) ok->error_log = st_res.error_log; if (st_res.tool) { if (*st_res.tool == (int)MediaConchLib::report_MediaVeraPdf) { ok->tool = new RESTAPI::Report; *ok->tool = RESTAPI::VERAPDF; } else if (*st_res.tool == (int)MediaConchLib::report_MediaDpfManager) { ok->tool = new RESTAPI::Report; *ok->tool = RESTAPI::DPFMANAGER; } } if (st_res.percent) { ok->percent = new double; *ok->percent = *st_res.percent; } for (size_t j = 0; j < st_res.generated_id.size(); ++j) ok->generated_id.push_back(st_res.generated_id[j]); if (st_res.source_id >= 0) ok->source_id = st_res.source_id; res.ok.push_back(ok); } FUN_CMD_END(Checker_Status) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_report, Checker_Report) { FUN_CMD_START(Checker_Report) CheckerReport cr; cr.user = req->user; cr.format = MediaConchLib::format_Xml; if (req->display_name == MediaConchLib::display_text_name) cr.format = MediaConchLib::format_Text; else if (req->display_name == MediaConchLib::display_maxml_name) cr.format = MediaConchLib::format_MaXml; else if (req->display_name == MediaConchLib::display_html_name) cr.format = MediaConchLib::format_Html; else if (req->display_name == MediaConchLib::display_jstree_name) cr.format = MediaConchLib::format_JsTree; else if (req->display_name == MediaConchLib::display_simple_name) cr.format = MediaConchLib::format_Simple; else if (req->display_name == MediaConchLib::display_csv_name) cr.format = MediaConchLib::format_CSV; std::string d_name = req->display_name; std::string d_content = req->display_content; std::string m_inform = req->mi_inform; cr.display_name = d_name.size() ? &d_name : NULL; cr.display_content = d_content.size() ? &d_content : NULL; cr.mi_inform = m_inform.size() ? &m_inform : NULL; if (cr.format != MediaConchLib::format_Xml) cr.display_name = NULL; for (size_t j = 0; j < req->reports.size(); ++j) { if (req->reports[j] == RESTAPI::MEDIAINFO) cr.report_set.set(MediaConchLib::report_MediaInfo); if (req->reports[j] == RESTAPI::MEDIATRACE) cr.report_set.set(MediaConchLib::report_MediaTrace); if (req->reports[j] == RESTAPI::IMPLEMENTATION) cr.report_set.set(MediaConchLib::report_MediaConch); if (req->reports[j] == RESTAPI::VERAPDF) cr.report_set.set(MediaConchLib::report_MediaVeraPdf); if (req->reports[j] == RESTAPI::DPFMANAGER) cr.report_set.set(MediaConchLib::report_MediaDpfManager); } if (!cr.report_set.count() && !req->policies_ids.size() && !req->policies_contents.size()) cr.report_set.set(MediaConchLib::report_MediaConch); for (size_t i = 0; i < req->ids.size(); ++i) { long id = req->ids[i]; if (id < 0) { FUN_CMD_NOK(res, "ID not existing", -1) FUN_CMD_END(Checker_Report) } MediaConchLib::Checker_StatusRes cs_res; std::string err; if (d->MCL->checker_status(req->user, id, cs_res, err) < 0) { FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Checker_Report) } if (!cs_res.finished) { FUN_CMD_NOK(res, "Some files are still analyzing", id) FUN_CMD_END(Checker_Report) } cr.files.push_back(id); } for (size_t i = 0; i < req->policies_ids.size(); ++i) cr.policies_ids.push_back(req->policies_ids[i]); for (size_t i = 0; i < req->policies_contents.size(); ++i) cr.policies_contents.push_back(req->policies_contents[i]); std::map::const_iterator it = req->options.begin(); for (; it != req->options.end(); ++it) { if (!it->first.size()) continue; cr.options[it->first.c_str()] = it->second; } // Output MediaConchLib::Checker_ReportRes result; std::string err; if (d->MCL->checker_get_report(cr, &result, err) < 0) FUN_CMD_NOK(res, err, -1) else { res.ok = new RESTAPI::Checker_Report_Ok; res.ok->report = result.report; res.ok->has_valid = result.has_valid; res.ok->valid = result.valid; } FUN_CMD_END(Checker_Report) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_clear, Checker_Clear) { FUN_CMD_START(Checker_Clear) for (size_t i = 0; i < req->ids.size(); ++i) { int id = req->ids[i]; if (id < 0) FUN_CMD_NOK_ARR(res, "ID not existing", id) std::vector files; files.push_back(id); std::string err; if (d->MCL->checker_clear(req->user, files, err) < 0) FUN_CMD_NOK_ARR(res, err, id) res.ok.push_back(id); } FUN_CMD_END(Checker_Clear) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_stop, Checker_Stop) { FUN_CMD_START(Checker_Stop) for (size_t i = 0; i < req->ids.size(); ++i) { int id = req->ids[i]; if (id < 0) FUN_CMD_NOK_ARR(res, "ID not existing", id) std::vector files; files.push_back(id); std::string err; if (d->MCL->checker_stop(req->user, files, err) < 0) FUN_CMD_NOK_ARR(res, err, id) res.ok.push_back(id); } FUN_CMD_END(Checker_Stop) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_list, Checker_List) { FUN_CMD_START(Checker_List) std::vector vec; std::string err; if (d->MCL->checker_list(req->user, vec, err) < 0) FUN_CMD_NOK(res, err, -1) for (size_t i = 0; i < vec.size(); ++i) { RESTAPI::Checker_List_File *file = new RESTAPI::Checker_List_File; file->id = vec[i]; d->MCL->checker_file_from_id(req->user, vec[i], file->file, err); res.files.push_back(file); } FUN_CMD_END(Checker_List) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_validate, Checker_Validate) { FUN_CMD_START(Checker_Validate) MediaConchLib::report report; if (req->report == RESTAPI::IMPLEMENTATION) report = MediaConchLib::report_MediaConch; else if (req->report == RESTAPI::VERAPDF) report = MediaConchLib::report_MediaVeraPdf; else if (req->report == RESTAPI::DPFMANAGER) report = MediaConchLib::report_MediaDpfManager; else if (req->report != RESTAPI::POLICY) return -1; else report = MediaConchLib::report_Max; std::vector files; for (size_t i = 0; i < req->ids.size(); ++i) { int id = req->ids[i]; if (id < 0) { FUN_CMD_NOK(res, "ID not existing", id) FUN_CMD_END(Checker_Validate) } MediaConchLib::Checker_StatusRes st_res; std::string err; if (d->MCL->checker_status(req->user, id, st_res, err) < 0) { FUN_CMD_NOK(res, err, id) FUN_CMD_END(Checker_Validate) } if (!st_res.finished) { FUN_CMD_NOK(res, "File still analyzing", id) FUN_CMD_END(Checker_Validate) } // Output files.push_back(id); } std::map options; std::map::const_iterator it = req->options.begin(); for (; it != req->options.end(); ++it) { if (!it->first.size()) continue; options[it->first.c_str()] = it->second; } std::vector result; std::string err; if (d->MCL->checker_validate(req->user, report, files, req->policies_ids, req->policies_contents, options, result, err) < 0) { FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Checker_Validate) } for (size_t i = 0; i < result.size(); ++i) { RESTAPI::Checker_Validate_Ok* ok = new RESTAPI::Checker_Validate_Ok; ok->id = result[i]->id; ok->valid = result[i]->valid; res.ok.push_back(ok); } FUN_CMD_END(Checker_Validate) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_file_from_id, Checker_File_From_Id) { FUN_CMD_START(Checker_File_From_Id) std::string err; if (d->MCL->checker_file_from_id(req->user, req->id, res.file, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Checker_File_From_Id) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_id_from_filename, Checker_Id_From_Filename) { FUN_CMD_START(Checker_Id_From_Filename) std::string err; if ((res.id = d->MCL->checker_id_from_filename(req->user, req->filename, req->options, err)) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Checker_Id_From_Filename) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_file_information, Checker_File_Information) { FUN_CMD_START(Checker_File_Information) MediaConchLib::Checker_FileInfo info; std::string err; if (d->MCL->checker_file_information(req->user, req->id, info, err) < 0) FUN_CMD_NOK(res, err, -1) else { res.filename = info.filename; res.file_last_modification = info.file_last_modification; res.analyzed = info.analyzed; for (size_t j = 0; j < info.generated_id.size(); ++j) res.generated_id.push_back(info.generated_id[j]); res.source_id = info.source_id; res.generated_time = info.generated_time; res.generated_log = info.generated_log; res.generated_error_log = info.generated_error_log; for (size_t i = 0; i < info.options.size(); ++i) res.options.push_back(std::make_pair(info.options[i].first, info.options[i].second)); res.has_error = info.has_error; res.error_log = info.error_log; } FUN_CMD_END(Checker_File_Information) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(checker_list_mediainfo_outputs, Checker_List_MediaInfo_Outputs) { FUN_CMD_START(Checker_List_MediaInfo_Outputs) std::string outputs; std::string err; if (d->MCL->mil_get_output_list(outputs, err) < 0) FUN_CMD_NOK(res, err, -1) else res.outputs = outputs; FUN_CMD_END(Checker_List_MediaInfo_Outputs) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(default_values_for_type, Default_Values_For_Type) { FUN_CMD_START(Default_Values_For_Type) std::vector values; std::string err; if (d->MCL->policy_get_values_for_type_field(req->type, req->field, values, err) < 0) FUN_CMD_NOK(res, err, -1) else { for (size_t i = 0; i < values.size(); ++i) res.values.push_back(values[i]); } FUN_CMD_END(Default_Values_For_Type) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_create, XSLT_Policy_Create) { FUN_CMD_START(XSLT_Policy_Create) std::string err; res.id = d->MCL->xslt_policy_create(req->user, err, req->type, req->parent_id); if (res.id == -1) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Create) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_import, Policy_Import) { FUN_CMD_START(Policy_Import) std::string err; res.id = d->MCL->policy_import(req->user, req->xml, err); if (res.id == -1) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Import) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_remove, Policy_Remove) { FUN_CMD_START(Policy_Remove) std::string err; if (d->MCL->policy_remove(req->user, req->id, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Remove) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_dump, Policy_Dump) { FUN_CMD_START(Policy_Dump) std::string err; if (d->MCL->policy_dump(req->user, req->id, req->must_be_public, res.xml, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Dump) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_save, Policy_Save) { FUN_CMD_START(Policy_Save) std::string err; if (d->MCL->policy_save(req->user, req->id, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Save) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_duplicate, Policy_Duplicate) { FUN_CMD_START(Policy_Duplicate) std::string err; res.id = d->MCL->policy_duplicate(req->user, req->id, req->dst_policy_id, req->dst_user, req->must_be_public, err); if (res.id == -1) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Duplicate) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_move, Policy_Move) { FUN_CMD_START(Policy_Move) std::string err; res.id = d->MCL->policy_move(req->user, req->id, req->dst_policy_id, err); if (res.id == -1) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Move) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_change_info, Policy_Change_Info) { FUN_CMD_START(Policy_Change_Info) std::string err; if (d->MCL->policy_change_info(req->user, req->id, req->name, req->description, req->license, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Change_Info) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_change_type, Policy_Change_Type) { FUN_CMD_START(Policy_Change_Type) std::string err; if (d->MCL->policy_change_type(req->user, req->id, req->type, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Change_Type) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_change_is_public, Policy_Change_Is_Public) { FUN_CMD_START(Policy_Change_Is_Public) std::string err; if (d->MCL->policy_change_is_public(req->user, req->id, req->is_public, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Change_Is_Public) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get, Policy_Get) { FUN_CMD_START(Policy_Get) std::string err; MediaConchLib::Get_Policy p; if (d->MCL->policy_get(req->user, req->id, req->format, req->must_be_public, p, err) < 0) FUN_CMD_NOK(res, err, -1) else if (p.format == "JSTREE" && p.jstree) res.policyTree = *p.jstree; else if (p.policy) res.policy = new MediaConchLib::Policy_Policy(p.policy); FUN_CMD_END(Policy_Get) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get_name, Policy_Get_Name) { FUN_CMD_START(Policy_Get_Name) std::string err; if (d->MCL->policy_get_name(req->user, req->id, res.name, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Get_Name) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get_policies_count, Policy_Get_Policies_Count) { FUN_CMD_START(Policy_Get_Policies_Count) std::string err; if ((int)(res.size = d->MCL->policy_get_policies_count(req->user, err)) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Get_Policies_Count) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_clear_policies, Policy_Clear_Policies) { FUN_CMD_START(Policy_Clear_Policies) std::string err; if (d->MCL->policy_clear_policies(req->user, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(Policy_Clear_Policies) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get_policies, Policy_Get_Policies) { FUN_CMD_START(Policy_Get_Policies) MediaConchLib::Get_Policies policies; std::string err; if (d->MCL->policy_get_policies(req->user, req->ids, req->format, policies, err) < 0) FUN_CMD_NOK(res, err, -1) else if (req->format == "JSTREE" && policies.jstree) res.policiesTree = *policies.jstree; else if (policies.policies) { for (size_t i = 0; i < policies.policies->size(); ++i) { MediaConchLib::Policy_Policy *ok = new MediaConchLib::Policy_Policy(policies.policies->at(i)); res.policies.push_back(ok); } } FUN_CMD_END(Policy_Get_Policies) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get_public_policies, Policy_Get_Public_Policies) { FUN_CMD_START(Policy_Get_Public_Policies) std::vector policies; std::string err; if (d->MCL->policy_get_public_policies(policies, err) < 0) FUN_CMD_NOK(res, err, -1) else { for (size_t i = 0; i < policies.size(); ++i) { if (!policies[i]) continue; RESTAPI::Policy_Public_Policy *policy = new RESTAPI::Policy_Public_Policy; policy->id = policies[i]->id; policy->user = policies[i]->user; policy->name = policies[i]->name; policy->description = policies[i]->description; policy->license = policies[i]->license; res.policies.push_back(policy); } } FUN_CMD_END(Policy_Get_Public_Policies) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(policy_get_policies_names_list, Policy_Get_Policies_Names_List) { FUN_CMD_START(Policy_Get_Policies_Names_List) std::vector > policies; std::string err; if (d->MCL->policy_get_policies_names_list(req->user, policies, err) < 0) FUN_CMD_NOK(res, err, -1) else res.policies = policies; FUN_CMD_END(Policy_Get_Policies_Names_List) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_create_from_file, XSLT_Policy_Create_From_File) { FUN_CMD_START(XSLT_Policy_Create_From_File) if (req->id < 0) FUN_CMD_NOK(res, "ID not existing", -1) else { std::string err; res.policy_id = d->MCL->xslt_policy_create_from_file(req->user, req->id, err); if (res.policy_id < 0) FUN_CMD_NOK(res, err, req->id) } FUN_CMD_END(XSLT_Policy_Create_From_File) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_create, XSLT_Policy_Rule_Create) { FUN_CMD_START(XSLT_Policy_Rule_Create) std::string err; res.id = d->MCL->xslt_policy_rule_create(req->user, req->policy_id, err); if (res.id == -1) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Rule_Create) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_get, XSLT_Policy_Rule_Get) { FUN_CMD_START(XSLT_Policy_Rule_Get) std::string err; XsltPolicyRule *rule = d->MCL->xslt_policy_rule_get(req->user, req->policy_id, req->id, err); if (!rule) FUN_CMD_NOK(res, err, -1) else { res.rule.id = rule->id; res.rule.name = rule->node_name; res.rule.tracktype = rule->track_type; res.rule.field = rule->field; res.rule.scope = rule->scope; res.rule.occurrence = rule->occurrence; res.rule.ope = rule->ope; res.rule.value = rule->value; } FUN_CMD_END(XSLT_Policy_Rule_Get) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_edit, XSLT_Policy_Rule_Edit) { FUN_CMD_START(XSLT_Policy_Rule_Edit) std::string err; XsltPolicyRule rule; rule.id = req->rule.id; rule.node_name = req->rule.name; rule.track_type = req->rule.tracktype; rule.field = req->rule.field; rule.scope = req->rule.scope; rule.occurrence = req->rule.occurrence; rule.ope = req->rule.ope; rule.value = req->rule.value; if (d->MCL->xslt_policy_rule_edit(req->user, req->policy_id, req->rule.id, &rule, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Rule_Edit) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_duplicate, XSLT_Policy_Rule_Duplicate) { FUN_CMD_START(XSLT_Policy_Rule_Duplicate) std::string err; if ((res.id = d->MCL->xslt_policy_rule_duplicate(req->user, req->policy_id, req->id, req->dst_policy_id, err)) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Rule_Duplicate) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_move, XSLT_Policy_Rule_Move) { FUN_CMD_START(XSLT_Policy_Rule_Move) std::string err; if ((res.id = d->MCL->xslt_policy_rule_move(req->user, req->policy_id, req->id, req->dst_policy_id, err)) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Rule_Move) } //-------------------------------------------------------------------------- FUN_CMD_PROTO(xslt_policy_rule_delete, XSLT_Policy_Rule_Delete) { FUN_CMD_START(XSLT_Policy_Rule_Delete) std::string err; if (d->MCL->xslt_policy_rule_delete(req->user, req->policy_id, req->id, err) < 0) FUN_CMD_NOK(res, err, -1) FUN_CMD_END(XSLT_Policy_Rule_Delete) } #undef FUN_CMD_PROTO #undef FUN_CMD_START #undef FUN_CMD_END #undef FUN_CMD_NOK #undef FUN_CMD_NOK_ARR //-------------------------------------------------------------------------- std::string Daemon::get_date() const { std::stringstream out; std::string time = Core::get_date(); out << "[" << time << "]"; return out.str(); } } MediaConch/Source/GUI/0000755000000000000000000000000013216666133013441 5ustar rootrootMediaConch/Source/GUI/Qt/0000755000000000000000000000000013216666135014027 5ustar rootrootMediaConch/Source/GUI/Qt/WebEngineView.cpp0000644000000000000000000000235013216666133017227 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "WebChoose.h" #if defined(WEB_MACHINE_ENGINE) #include #include #include #include "WebView.h" #include "WebPage.h" #include "mainwindow.h" namespace MediaConch { WebView::WebView(QWidget *parent) : QWebEngineView(parent), mainwindow((MainWindow*)parent) { setAcceptDrops(true); setContextMenuPolicy(Qt::CustomContextMenu); } WebView::~WebView() { stop(); } void WebView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) event->acceptProposedAction(); } void WebView::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { QList urls=event->mimeData()->urls(); QStringList files; for (int i = 0; i < urls.size(); ++i) files << urls[i].toLocalFile(); mainwindow->drag_and_drop_files_action(files); } } } #endif MediaConch/Source/GUI/Qt/policieswindow.cpp0000644000000000000000000001323513216666133017574 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "policieswindow.h" #include "mainwindow.h" #include "WebPage.h" #include "WebView.h" #include "progressbar.h" namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** PoliciesWindow::PoliciesWindow(MainWindow *parent) : CommonWebWindow(parent) { } PoliciesWindow::~PoliciesWindow() { } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- void PoliciesWindow::display_policies() { display_html(); } int PoliciesWindow::add_new_policies(const QStringList& files) { WebPage* page = (WebPage*)main_window->web_view->page(); if (!page) return -1; return page->import_policy(files); } //*************************************************************************** // WEB //*************************************************************************** //--------------------------------------------------------------------------- void PoliciesWindow::change_qt_scripts_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script += " \n" " \n"; #elif defined(WEB_MACHINE_ENGINE) script += " \n" " \n" " \n" " \n"; #endif script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void PoliciesWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void PoliciesWindow::remove_result_in_template(QString& html) { QRegExp reg("\\{% block result %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } //--------------------------------------------------------------------------- void PoliciesWindow::change_checker_in_template(const QString& policy, QString& html) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), policy); } //--------------------------------------------------------------------------- void PoliciesWindow::create_html_policy(QString& policy) { QFile template_html(":/xsltPolicy.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); policy = QString(html); } //--------------------------------------------------------------------------- void PoliciesWindow::create_html_base(const QString& policy, QString& base) { set_webmachine_script_in_template(base); change_qt_scripts_in_template(base); change_checker_in_template(policy, base); remove_result_in_template(base); } //--------------------------------------------------------------------------- void PoliciesWindow::create_html(QString &html) { QString policy; create_html_policy(policy); create_html_base(policy, html); } } MediaConch/Source/GUI/Qt/settingswindow.cpp0000644000000000000000000003700313216666133017624 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "settingswindow.h" #include "mainwindow.h" #include "WebView.h" #include "WebPage.h" #include "progressbar.h" #include #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** SettingsWindow::SettingsWindow(MainWindow *p) : CommonWebWindow(p) { } SettingsWindow::~SettingsWindow() { } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- void SettingsWindow::create_web_view_finished() { add_logged_to_js_input((WebPage *)main_window->web_view->page()); add_save_report_path_to_js_input((WebPage *)main_window->web_view->page()); add_load_files_path_to_js_input((WebPage *)main_window->web_view->page()); add_save_policy_path_to_js_input((WebPage *)main_window->web_view->page()); add_load_policy_path_to_js_input((WebPage *)main_window->web_view->page()); add_save_display_path_to_js_input((WebPage *)main_window->web_view->page()); add_load_display_path_to_js_input((WebPage *)main_window->web_view->page()); } //--------------------------------------------------------------------------- void SettingsWindow::display_settings() { display_html(); } //--------------------------------------------------------------------------- void SettingsWindow::create_html(QString& html) { QString settings; create_html_settings(settings); create_html_base(html, settings); } //--------------------------------------------------------------------------- void SettingsWindow::create_html_settings(QString& settings) { QFile settings_file(":/settings.html"); settings_file.open(QIODevice::ReadOnly | QIODevice::Text); settings = QString(settings_file.readAll()); settings_file.close(); fill_settings_html(settings); } //--------------------------------------------------------------------------- void SettingsWindow::create_html_base(QString& base, const QString& settings) { set_webmachine_script_in_template(base); change_qt_scripts_in_template(base); change_checker_in_template(base, settings); remove_result_in_template(base); } //*************************************************************************** // HELPER //*************************************************************************** //--------------------------------------------------------------------------- void SettingsWindow::fill_settings_html(QString& html) { QString policies; create_policy_options(policies); add_policy_to_html_selection(policies, html, "settings_policy"); QString displays; create_displays_options(displays); add_display_to_html_selection(displays, html, "settings_display_selector"); QString verbosity; create_verbosity_options(verbosity); add_verbosity_to_html_selection(verbosity, html, "settings_verbosity_selector"); } //--------------------------------------------------------------------------- void SettingsWindow::create_policy_options(QString& policies) { MediaConchLib::Get_Policies p; QString err; main_window->get_policies("JSON", p, err); QString system_policy; QString user_policy; std::string policy_str = main_window->get_settings().get_default_policy(); int selected_policy; if (policy_str == "last") selected_policy = -2; else selected_policy = QString().fromUtf8(policy_str.c_str(), policy_str.length()).toInt(); for (size_t i = 0; p.policies && i < p.policies->size(); ++i) { if (!p.policies->at(i)) continue; if (p.policies->at(i)->is_system) { system_policy += QString("") .arg(p.policies->at(i)->id).arg(QString().fromUtf8(p.policies->at(i)->name.c_str(), p.policies->at(i)->name.length())); } else { user_policy += QString("") .arg(p.policies->at(i)->id).arg(QString().fromUtf8(p.policies->at(i)->name.c_str(), p.policies->at(i)->name.length())); } } if (selected_policy == -2) policies += QString(""); else policies += QString(""); if (selected_policy == -1) policies += QString(""); else policies += QString(""); // Create default policy opt-group if (user_policy.length()) policies += QString("%1").arg(user_policy); else policies += QString("%1"); // Create default policy opt-group if (system_policy.length()) policies += QString("%1").arg(system_policy); else policies += QString("%1"); } //--------------------------------------------------------------------------- void SettingsWindow::create_displays_options(QString& displays) { QString system_display; QString user_display; std::string display_str = main_window->get_settings().get_default_display(); int selected_display; if (display_str == "last") selected_display = -1; else selected_display = main_window->get_display_index_by_filename(display_str); const std::vector& displays_list = main_window->get_displays(); for (size_t i = 0; i < displays_list.size(); ++i) { QFileInfo file(displays_list[i]); if (displays_list[i].startsWith(":/")) { system_display += QString("") .arg((int)i).arg(file.baseName()); } else { user_display += QString("") .arg((int)i).arg(file.baseName()); } } if (selected_display == -1) displays += QString(""); else displays += QString(""); // Create user display opt-group if (user_display.length()) displays += QString("%1").arg(user_display); // Create default display opt-group if (system_display.length()) displays += QString("%1").arg(system_display); } //--------------------------------------------------------------------------- void SettingsWindow::create_verbosity_options(QString& verbosity) { int selected_verbosity = main_window->get_settings().get_default_verbosity(); if (selected_verbosity == -1) verbosity += QString(""); else verbosity += QString(""); for (int i = 0; i < 6; ++i) { verbosity += QString("").arg(i); } } //--------------------------------------------------------------------------- void SettingsWindow::add_policy_to_html_selection(QString& policies, QString& html, const QString& selector) { QRegExp reg("class=\"policyList form-control\">"); int pos = html.indexOf(selector); reg.setMinimal(true); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, policies); } } //--------------------------------------------------------------------------- void SettingsWindow::add_display_to_html_selection(QString& displays, QString& html, const QString& selector) { QRegExp reg("class=\"displayList form-control\">"); reg.setMinimal(true); int pos = html.indexOf(selector); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, displays); } } //--------------------------------------------------------------------------- void SettingsWindow::add_verbosity_to_html_selection(QString& verbosity, QString& html, const QString& selector) { QRegExp reg("class=\"verbosityList form-control\">"); reg.setMinimal(true); int pos = html.indexOf(selector); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, verbosity); } } //--------------------------------------------------------------------------- void SettingsWindow::change_checker_in_template(QString& html, const QString& settings) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), settings); } //--------------------------------------------------------------------------- void SettingsWindow::remove_result_in_template(QString& html) { QRegExp reg("\\{% block result %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } //--------------------------------------------------------------------------- void SettingsWindow::change_qt_scripts_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script = " \n"; #elif defined(WEB_MACHINE_ENGINE) script = " \n" " \n" " \n"; #endif script += " \n"; script += " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void SettingsWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void SettingsWindow::add_logged_to_js_input(WebPage *page) { std::string token_str = main_window->get_settings().get_mco_token(); QString token = QString().fromUtf8(token_str.c_str(), token_str.length()); page->use_javascript(QString("set_logged_status('%1');").arg(token)); } //--------------------------------------------------------------------------- void SettingsWindow::add_save_report_path_to_js_input(WebPage *page) { std::string selected_save_report_str = main_window->get_settings().get_default_save_report_path(); QString selected_save_report = QString().fromUtf8(selected_save_report_str.c_str(), selected_save_report_str.length()); page->use_javascript(QString("set_save_report_selected('%1');").arg(selected_save_report)); } //--------------------------------------------------------------------------- void SettingsWindow::add_load_files_path_to_js_input(WebPage *page) { std::string selected_load_files_str = main_window->get_settings().get_default_load_files_path(); QString selected_load_files = QString().fromUtf8(selected_load_files_str.c_str(), selected_load_files_str.length()); page->use_javascript(QString("set_load_files_selected('%1');").arg(selected_load_files)); } //--------------------------------------------------------------------------- void SettingsWindow::add_save_policy_path_to_js_input(WebPage *page) { std::string selected_save_policy_str = main_window->get_settings().get_default_save_policy_path(); QString selected_save_policy = QString().fromUtf8(selected_save_policy_str.c_str(), selected_save_policy_str.length()); page->use_javascript(QString("set_save_policy_selected('%1');").arg(selected_save_policy)); } //--------------------------------------------------------------------------- void SettingsWindow::add_load_policy_path_to_js_input(WebPage *page) { std::string selected_load_policy_str = main_window->get_settings().get_default_load_policy_path(); QString selected_load_policy = QString().fromUtf8(selected_load_policy_str.c_str(), selected_load_policy_str.length()); page->use_javascript(QString("set_load_policy_selected('%1');").arg(selected_load_policy)); } //--------------------------------------------------------------------------- void SettingsWindow::add_save_display_path_to_js_input(WebPage *page) { std::string selected_save_display_str = main_window->get_settings().get_default_save_display_path(); QString selected_save_display = QString().fromUtf8(selected_save_display_str.c_str(), selected_save_display_str.length()); page->use_javascript(QString("set_save_display_selected('%1');").arg(selected_save_display)); } //--------------------------------------------------------------------------- void SettingsWindow::add_load_display_path_to_js_input(WebPage *page) { std::string selected_load_display_str = main_window->get_settings().get_default_load_display_path(); QString selected_load_display = QString().fromUtf8(selected_load_display_str.c_str(), selected_load_display_str.length()); page->use_javascript(QString("set_load_display_selected('%1');").arg(selected_load_display)); } } MediaConch/Source/GUI/Qt/uisettings.cpp0000644000000000000000000003141113216666133016727 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "uisettings.h" #include "DatabaseUi.h" namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** UiSettings::UiSettings() { } UiSettings::~UiSettings() { } //*************************************************************************** // Functions //*************************************************************************** // General //--------------------------------------------------------------------------- int UiSettings::init() { default_policy = "last"; default_display = "last"; default_verbosity = 5; last_verbosity = 5; if (!database) return -1; if (database->ui_settings_get_default_policy(default_policy)) return -1; if (database->ui_settings_get_default_display(default_display)) return -1; if (database->ui_settings_get_default_verbosity(default_verbosity)) return -1; if (database->ui_settings_get_default_save_report_path(default_save_report_path)) return -1; if (database->ui_settings_get_default_save_policy_path(default_save_policy_path)) return -1; if (database->ui_settings_get_default_save_display_path(default_save_display_path)) return -1; if (database->ui_settings_get_default_load_files_path(default_load_files_path)) return -1; if (database->ui_settings_get_default_load_policy_path(default_load_policy_path)) return -1; if (database->ui_settings_get_default_load_display_path(default_load_display_path)) return -1; if (database->ui_settings_get_last_policy(last_policy)) return -1; if (database->ui_settings_get_last_display(last_display)) return -1; if (database->ui_settings_get_last_verbosity(last_verbosity)) return -1; if (database->ui_settings_get_last_save_report_path(last_save_report_path)) return -1; if (database->ui_settings_get_last_save_policy_path(last_save_policy_path)) return -1; if (database->ui_settings_get_last_save_display_path(last_save_display_path)) return -1; if (database->ui_settings_get_last_load_files_path(last_load_files_path)) return -1; if (database->ui_settings_get_last_load_policy_path(last_load_policy_path)) return -1; if (database->ui_settings_get_last_load_display_path(last_load_display_path)) return -1; if (database->ui_settings_get_mco_token(mco_token)) return -1; return 0; } //--------------------------------------------------------------------------- void UiSettings::set_database(DatabaseUi* db) { database = db; } // Default //--------------------------------------------------------------------------- std::string UiSettings::get_default_policy() const { return default_policy; } //--------------------------------------------------------------------------- void UiSettings::change_default_policy(const std::string& policy) { if (!database || default_policy == policy) return; if (database->ui_settings_save_default_policy(policy) < 0) return; default_policy = policy; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_display() const { return default_display; } //--------------------------------------------------------------------------- void UiSettings::change_default_display(const std::string& display) { if (!database || default_display == display) return; if (database->ui_settings_save_default_display(display) < 0) return; default_display = display; } //--------------------------------------------------------------------------- int UiSettings::get_default_verbosity() const { return default_verbosity; } //--------------------------------------------------------------------------- void UiSettings::change_default_verbosity(int verbosity) { if (!database || default_verbosity == verbosity) return; if (database->ui_settings_save_default_verbosity(verbosity) < 0) return; default_verbosity = verbosity; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_save_report_path() const { return default_save_report_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_save_report_path(const std::string& path) { if (!database || default_save_report_path == path) return; if (database->ui_settings_save_default_save_report_path(path) < 0) return; default_save_report_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_save_policy_path() const { return default_save_policy_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_save_policy_path(const std::string& path) { if (!database || default_save_policy_path == path) return; if (database->ui_settings_save_default_save_policy_path(path) < 0) return; default_save_policy_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_save_display_path() const { return default_save_display_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_save_display_path(const std::string& path) { if (!database || default_save_display_path == path) return; if (database->ui_settings_save_default_save_display_path(path) < 0) return; default_save_display_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_load_files_path() const { return default_load_files_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_load_files_path(const std::string& path) { if (!database || default_load_files_path == path) return; if (database->ui_settings_save_default_load_files_path(path) < 0) return; default_load_files_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_load_policy_path() const { return default_load_policy_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_load_policy_path(const std::string& path) { if (!database || default_load_policy_path == path) return; if (database->ui_settings_save_default_load_policy_path(path) < 0) return; default_load_policy_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_default_load_display_path() const { return default_load_display_path; } //--------------------------------------------------------------------------- void UiSettings::change_default_load_display_path(const std::string& path) { if (!database || default_load_display_path == path) return; if (database->ui_settings_save_default_load_display_path(path) < 0) return; default_load_display_path = path; } // Last used //--------------------------------------------------------------------------- std::string UiSettings::get_last_policy() const { return last_policy; } //--------------------------------------------------------------------------- void UiSettings::change_last_policy(const std::string& policy) { if (!database || last_policy == policy) return; if (database->ui_settings_save_last_policy(policy) < 0) return; last_policy = policy; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_display() const { return last_display; } //--------------------------------------------------------------------------- void UiSettings::change_last_display(const std::string& display) { if (!database || last_display == display) return; if (database->ui_settings_save_last_display(display) < 0) return; last_display = display; } //--------------------------------------------------------------------------- int UiSettings::get_last_verbosity() const { return last_verbosity; } //--------------------------------------------------------------------------- void UiSettings::change_last_verbosity(int verbosity) { if (!database || last_verbosity == verbosity) return; if (database->ui_settings_save_last_verbosity(verbosity) < 0) return; last_verbosity = verbosity; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_save_report_path() const { return last_save_report_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_save_report_path(const std::string& path) { if (!database || last_save_report_path == path) return; if (database->ui_settings_save_last_save_report_path(path) < 0) return; last_save_report_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_save_policy_path() const { return last_save_policy_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_save_policy_path(const std::string& path) { if (!database || last_save_policy_path == path) return; if (database->ui_settings_save_last_save_policy_path(path) < 0) return; last_save_policy_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_save_display_path() const { return last_save_display_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_save_display_path(const std::string& path) { if (!database || last_save_display_path == path) return; if (database->ui_settings_save_last_save_display_path(path) < 0) return; last_save_display_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_load_files_path() const { return last_load_files_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_load_files_path(const std::string& path) { if (!database || last_load_files_path == path) return; if (database->ui_settings_save_last_load_files_path(path) < 0) return; last_load_files_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_load_policy_path() const { return last_load_policy_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_load_policy_path(const std::string& path) { if (!database || last_load_policy_path == path) return; if (database->ui_settings_save_last_load_policy_path(path) < 0) return; last_load_policy_path = path; } //--------------------------------------------------------------------------- std::string UiSettings::get_last_load_display_path() const { return last_load_display_path; } //--------------------------------------------------------------------------- void UiSettings::change_last_load_display_path(const std::string& path) { if (!database || last_load_display_path == path) return; if (database->ui_settings_save_last_load_display_path(path) < 0) return; last_load_display_path = path; } // Last used //--------------------------------------------------------------------------- std::string UiSettings::get_mco_token() const { return mco_token; } //--------------------------------------------------------------------------- void UiSettings::change_mco_token(const std::string& token) { if (!database || mco_token == token) return; if (database->ui_settings_save_mco_token(token) < 0) return; mco_token = token; } } MediaConch/Source/GUI/Qt/databasewindow.cpp0000644000000000000000000001102713216666133017526 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "databasewindow.h" #include "mainwindow.h" #include "progressbar.h" #include "WebView.h" #include "WebPage.h" #include #include #include #if QT_VERSION >= 0x050000 #include #else #include #endif #if defined(WEB_MACHINE_ENGINE) #include #endif namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** DatabaseWindow::DatabaseWindow(MainWindow* m) : CommonWebWindow(m) { } DatabaseWindow::~DatabaseWindow() { } void DatabaseWindow::display_database() { display_html(); } //--------------------------------------------------------------------------- void DatabaseWindow::create_web_view_finished() { } //--------------------------------------------------------------------------- void DatabaseWindow::create_html(QString& html) { QString database; create_html_database(database); create_html_base(html, database); } //--------------------------------------------------------------------------- void DatabaseWindow::create_html_database(QString& database) { QFile database_file(":/database.html"); database_file.open(QIODevice::ReadOnly | QIODevice::Text); database = QString(database_file.readAll()); database_file.close(); } //--------------------------------------------------------------------------- void DatabaseWindow::create_html_base(QString& base, const QString& database) { set_webmachine_script_in_template(base); change_qt_scripts_in_template(base); change_checker_in_template(base, database); remove_result_in_template(base); } //*************************************************************************** // HELPER //*************************************************************************** //--------------------------------------------------------------------------- void DatabaseWindow::change_qt_scripts_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script += " \n" " \n"; #elif defined(WEB_MACHINE_ENGINE) script += " \n" " \n" " \n" " \n"; #endif script += " \n"; script += " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void DatabaseWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void DatabaseWindow::change_checker_in_template(QString& html, const QString& database) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), database); } //--------------------------------------------------------------------------- void DatabaseWindow::remove_result_in_template(QString& html) { QRegExp reg("\\{% block result %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } } MediaConch/Source/GUI/Qt/displaywindow.h0000644000000000000000000000237713216666133017104 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef DISPLAYWINDOW_H #define DISPLAYWINDOW_H #include #include #include #include "commonwebwindow.h" namespace MediaConch { class DisplayWindow : public CommonWebWindow { public: explicit DisplayWindow(MainWindow* m); ~DisplayWindow(); void display_display(); void create_web_view_finished(); int add_new_file(const QString& name, const QString& filename); int add_new_files(const QStringList& files); void export_file(const QString& name); void delete_file(const QString& name); private: void create_html(QString& html); void create_html_display(QString& display); void create_html_base(QString& base, const QString& display); void set_webmachine_script_in_template(QString& base); void change_qt_scripts_in_template(QString& base); void change_checker_in_template(QString& base, const QString& display); void remove_result_in_template(QString& base); void fill_table(); }; } #endif // DISPLAYWINDOW_H MediaConch/Source/GUI/Qt/WebEngineView.h0000644000000000000000000000121513216666133016673 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBENGINEVIEW_H #define WEBENGINEVIEW_H #include namespace MediaConch { class MainWindow; class WebView : public QWebEngineView { Q_OBJECT public: explicit WebView(QWidget *parent = 0); virtual ~WebView(); protected: virtual void dropEvent(QDropEvent *event); virtual void dragEnterEvent(QDragEnterEvent *event); MainWindow *mainwindow; }; } #endif MediaConch/Source/GUI/Qt/WebPage.h0000644000000000000000000000067013216666133015513 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBPAGE_H #define WEBPAGE_H #include "WebChoose.h" #if defined(WEB_MACHINE_ENGINE) #include "WebEnginePage.h" #endif #if defined(WEB_MACHINE_KIT) #include "WebKitPage.h" #endif #endif // WEBPAGE_H MediaConch/Source/GUI/Qt/databasewindow.h0000644000000000000000000000176513216666133017203 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef DATABASEWINDOW_H #define DATABASEWINDOW_H #include #include #include #include "commonwebwindow.h" namespace MediaConch { class DatabaseWindow : public CommonWebWindow { public: explicit DatabaseWindow(MainWindow* m); ~DatabaseWindow(); void display_database(); void create_web_view_finished(); private: void create_html(QString& html); void create_html_database(QString& database); void create_html_base(QString& base, const QString& database); void set_webmachine_script_in_template(QString& base); void change_qt_scripts_in_template(QString& base); void change_checker_in_template(QString& base, const QString& database); void remove_result_in_template(QString& base); }; } #endif // DATABASEWINDOW_H MediaConch/Source/GUI/Qt/WebEnginePage.h0000644000000000000000000000201013216666133016627 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBENGINEPAGE_H #define WEBENGINEPAGE_H #include "mainwindow.h" #include "WebCommonPage.h" #include #include #include #include #include #include namespace MediaConch { class WebPage : public WebCommonPage { Q_OBJECT public: explicit WebPage(MainWindow *m, QWidget *parent = 0); virtual ~WebPage() {} virtual void use_javascript(const QString& js); protected: virtual bool acceptNavigationRequest(const QUrl& url, QWebEnginePage::NavigationType type, bool isMainFrame); QStringList chooseFiles(FileSelectionMode mode, const QStringList &oldFiles, const QStringList &acceptedMimeTypes); private Q_SLOTS: void on_load_finished(bool ok); }; } #endif MediaConch/Source/GUI/Qt/WebView.h0000644000000000000000000000067213216666133015553 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBVIEW_H #define WEBVIEW_H #include "WebChoose.h" #if defined(WEB_MACHINE_ENGINE) #include "WebEngineView.h" #endif #if defined(WEB_MACHINE_KIT) #include "WebKitView.h" #endif #endif // WEBVIEW_H MediaConch/Source/GUI/Qt/uisettings.h0000644000000000000000000000763013216666133016402 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef UISETTINGS_H #define UISETTINGS_H #include //--------------------------------------------------------------------------- namespace MediaConch { class DatabaseUi; class UiSettings { public: UiSettings(); ~UiSettings(); //*************************************************************************** // Functions //*************************************************************************** //General int init(); void set_database(DatabaseUi* db); // Default std::string get_default_policy() const; void change_default_policy(const std::string& policy); std::string get_default_display() const; void change_default_display(const std::string& display); int get_default_verbosity() const; void change_default_verbosity(int verbosity); std::string get_default_save_report_path() const; void change_default_save_report_path(const std::string& path); std::string get_default_save_policy_path() const; void change_default_save_policy_path(const std::string& path); std::string get_default_save_display_path() const; void change_default_save_display_path(const std::string& path); std::string get_default_load_files_path() const; void change_default_load_files_path(const std::string& path); std::string get_default_load_policy_path() const; void change_default_load_policy_path(const std::string& path); std::string get_default_load_display_path() const; void change_default_load_display_path(const std::string& path); // Last used std::string get_last_policy() const; void change_last_policy(const std::string& policy); std::string get_last_display() const; void change_last_display(const std::string& display); int get_last_verbosity() const; void change_last_verbosity(int verbosity); std::string get_last_load_files_path() const; void change_last_load_files_path(const std::string& path); std::string get_last_load_policy_path() const; void change_last_load_policy_path(const std::string& path); std::string get_last_load_display_path() const; void change_last_load_display_path(const std::string& path); std::string get_last_save_report_path() const; void change_last_save_report_path(const std::string& path); std::string get_last_save_policy_path() const; void change_last_save_policy_path(const std::string& path); std::string get_last_save_display_path() const; void change_last_save_display_path(const std::string& path); // MCO Token std::string get_mco_token() const; void change_mco_token(const std::string& token); private: // default std::string default_policy; std::string default_display; int default_verbosity; std::string default_load_files_path; std::string default_load_policy_path; std::string default_load_display_path; std::string default_save_report_path; std::string default_save_policy_path; std::string default_save_display_path; //Last used std::string last_policy; std::string last_display; int last_verbosity; std::string last_load_files_path; std::string last_load_policy_path; std::string last_load_display_path; std::string last_save_report_path; std::string last_save_policy_path; std::string last_save_display_path; //MCO Token std::string mco_token; DatabaseUi *database; }; } #endif // UISETTINGS_H MediaConch/Source/GUI/Qt/policieswindow.h0000644000000000000000000000277713216666133017252 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef POLICIESWINDOW_H #define POLICIESWINDOW_H #include #include #include "commonwebwindow.h" class QVBoxLayout; class QLabel; class QTreeWidgetItem; class QFile; class QStringList; class QFrame; namespace MediaConch { class PoliciesWindow : public CommonWebWindow { public: explicit PoliciesWindow(MainWindow *parent = 0); ~PoliciesWindow(); //*************************************************************************** // HELPER //*************************************************************************** void display_policies(); int add_new_policies(const QStringList& files); private: //*************************************************************************** // WEB //*************************************************************************** void change_qt_scripts_in_template(QString& html); void set_webmachine_script_in_template(QString& html); void remove_result_in_template(QString& html); void change_checker_in_template(const QString& policy, QString& html); void create_html_base(const QString& policy, QString& base); void create_html_policy(QString& policy); void create_html(QString &html); }; } #endif // POLICIESWINDOW_H MediaConch/Source/GUI/Qt/WebEnginePage.cpp0000644000000000000000000001035013216666133017170 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "WebChoose.h" #if defined(WEB_MACHINE_ENGINE) #include #include #include #include #include #include #include #include "Common/FileRegistered.h" #include "Common/XsltPolicy.h" #include "mainwindow.h" #include "WebPage.h" namespace MediaConch { WebPage::WebPage(MainWindow *m, QWidget *parent) : WebCommonPage(m, parent) { connect(this, SIGNAL(loadFinished(bool)), this, SLOT(on_load_finished(bool))); } void WebPage::on_load_finished(bool) { } bool WebPage::acceptNavigationRequest(const QUrl&, QWebEnginePage::NavigationType, bool) { return false; } QStringList WebPage::chooseFiles(FileSelectionMode mode, const QStringList &, const QStringList&) { if (select_file_name.startsWith("settings_")) { QString file = choose_file_settings(); if (!file.size()) return QStringList(); return QStringList(file); } else if (select_file_name.startsWith("xslPolicyImport")) { QString file = choose_file_import_policy(); if (!file.size()) return QStringList(); return QStringList(file); } else if (select_file_name.startsWith("xslPolicyCreateFromFile")) { QString file = choose_file_policy_from_file(); if (!file.size()) return QStringList(); return QStringList(file); } QStringList list; std::string suggested_str; if (select_file_name == "displayImport_displayFile") suggested_str = mainwindow->select_correct_load_display_path(); else suggested_str = mainwindow->select_correct_load_files_path(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); if (mode == QWebEnginePage::FileSelectOpen) { QString value_input; if (select_file_name == "checkerRepository_directory") value_input = QFileDialog::getExistingDirectory(view(), NULL, suggested); else value_input = QFileDialog::getOpenFileName(view(), NULL, suggested); QMap::iterator it = file_selector.find(select_file_name); if (!value_input.length()) { if (it != file_selector.end()) file_selector.erase(it); return QStringList(); } QDir info(QFileInfo(value_input).absoluteDir()); if (select_file_name == "displayImport_displayFile") mainwindow->set_last_load_display_path(info.absolutePath().toUtf8().data()); else mainwindow->set_last_load_files_path(info.absolutePath().toUtf8().data()); if (it != file_selector.end()) file_selector[select_file_name] << value_input; else file_selector.insert(select_file_name, QStringList(value_input)); list = QStringList(value_input); } else { QStringList names = QFileDialog::getOpenFileNames(view(), QString::null, suggested); if (names.size()) { QDir info(QFileInfo(names[0]).absoluteDir()); mainwindow->set_last_load_files_path(info.absolutePath().toUtf8().data()); } list = names; QMap::iterator it = file_selector.find(select_file_name); if (it != file_selector.end()) file_selector[select_file_name] = names; else file_selector.insert(select_file_name, names); } return list; } void WebPage::use_javascript(const QString& js) { runJavaScript(js); } } #endif MediaConch/Source/GUI/Qt/displaywindow.cpp0000644000000000000000000002235213216666133017432 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "displaywindow.h" #include "mainwindow.h" #include "progressbar.h" #include "WebView.h" #include "WebPage.h" #include #include #include #if QT_VERSION >= 0x050000 #include #else #include #endif #if defined(WEB_MACHINE_ENGINE) #include #endif namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** DisplayWindow::DisplayWindow(MainWindow* m) : CommonWebWindow(m) { } DisplayWindow::~DisplayWindow() { } void DisplayWindow::display_display() { display_html(); } //--------------------------------------------------------------------------- void DisplayWindow::create_web_view_finished() { fill_table(); } void DisplayWindow::fill_table() { std::vector& displays = main_window->get_displays(); for (size_t i = 0; i < displays.size(); ++i) { QFileInfo file(displays[i]); QString script; QString fullPath = file.absoluteFilePath(); if (fullPath.startsWith(":/displays")) script = "addSystemDisplay"; else script = "addUserDisplay"; script += QString("('%2');") .arg(file.completeBaseName()); ((WebPage*)main_window->web_view->page())->use_javascript(script); } } int DisplayWindow::add_new_file(const QString& name, const QString& filename) { #if QT_VERSION >= 0x050400 QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); #elif QT_VERSION >= 0x050000 QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); #else QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); #endif path += ("/displays"); QDir dir(path); if (!dir.exists()) if (!dir.mkpath(dir.absolutePath())) return -1; QString display_name = name; if (!display_name.length()) { QFileInfo file_info(filename); display_name = file_info.completeBaseName(); } std::vector& displays = main_window->get_displays(); int pos = (int)displays.size(); for (int j = 0; 1; ++j) { QString str; if (!j) str = QString("%1/%2.xsl").arg(dir.absolutePath()).arg(display_name); else str = QString("%1/%2_%3.xsl").arg(dir.absolutePath()).arg(display_name).arg(j); QFile info(str); if (info.exists()) continue; QFile::copy(filename, str); displays.push_back(str); break; } return pos; } int DisplayWindow::add_new_files(const QStringList& files) { #if QT_VERSION >= 0x050400 QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); #elif QT_VERSION >= 0x050000 QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); #else QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); #endif path += ("/displays"); QDir dir(path); if (!dir.exists()) if (!dir.mkpath(dir.absolutePath())) return -1; std::vector& displays = main_window->get_displays(); int pos = (int)displays.size(); for (int i = 0; i < files.size(); ++i) { QFileInfo file_info(files[i]); QString name = file_info.completeBaseName(); for (int j = 0; 1; ++j) { QString str; if (!j) str = QString("%1/%2.xsl").arg(dir.absolutePath()).arg(name); else str = QString("%1/%2_%3.xsl").arg(dir.absolutePath()).arg(name).arg(j); QFile info(str); if (info.exists()) continue; QFile::copy(files[i], str); displays.push_back(str); QString script = QString("addUserDisplay('%2');").arg(file_info.completeBaseName()); ((WebPage*)main_window->web_view->page())->use_javascript(script); break; } if (i + 1 == files.size()) main_window->set_last_load_display_path(file_info.absolutePath().toUtf8().data()); } return pos; } void DisplayWindow::export_file(const QString& name) { std::vector& displays = main_window->get_displays(); size_t i = 0; for (; i < displays.size(); ++i) { QFileInfo f(displays[i]); if (f.completeBaseName() == name) break; } if (i == displays.size()) return; QString suggested = QString().fromUtf8(main_window->select_correct_save_display_path().c_str()); QString file = QFileDialog::getSaveFileName(main_window, tr("Save display file"), suggested, tr("Display file (*.xsl)")); if (!file.length()) return; QFile f(displays[i]); if (QFile::exists(file)) QFile::remove(file); f.copy(file); QDir info(QFileInfo(file).absoluteDir()); main_window->set_last_save_display_path(info.absolutePath().toUtf8().data()); } void DisplayWindow::delete_file(const QString& name) { std::vector& displays = main_window->get_displays(); size_t i = 0; for (; i < displays.size(); ++i) { if (displays[i].startsWith(":/displays")) continue; QFileInfo f(displays[i]); if (f.completeBaseName() == name) break; } if (i == displays.size()) return; QFile file(displays[i]); file.remove(); main_window->get_displays().erase(main_window->get_displays().begin() + i); } //--------------------------------------------------------------------------- void DisplayWindow::create_html(QString& html) { QString display; create_html_display(display); create_html_base(html, display); } //--------------------------------------------------------------------------- void DisplayWindow::create_html_display(QString& display) { QFile display_file(":/display.html"); display_file.open(QIODevice::ReadOnly | QIODevice::Text); display = QString(display_file.readAll()); display_file.close(); } //--------------------------------------------------------------------------- void DisplayWindow::create_html_base(QString& base, const QString& display) { set_webmachine_script_in_template(base); change_qt_scripts_in_template(base); change_checker_in_template(base, display); remove_result_in_template(base); } //*************************************************************************** // HELPER //*************************************************************************** //--------------------------------------------------------------------------- void DisplayWindow::change_qt_scripts_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script = " \n"; #elif defined(WEB_MACHINE_ENGINE) script = " \n" " \n" " \n"; #endif script += " \n"; script += " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void DisplayWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void DisplayWindow::change_checker_in_template(QString& html, const QString& display) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), display); } //--------------------------------------------------------------------------- void DisplayWindow::remove_result_in_template(QString& html) { QRegExp reg("\\{% block result %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } } MediaConch/Source/GUI/Qt/WebChoose.h0000644000000000000000000000124113216666133016052 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBCHOOSE_H #define WEBCHOOSE_H #include #if defined(WEB_MACHINE_ENGINE) && defined(WEB_MACHINE_KIT) #pragma message ("WEB_MACHINE_ENGINE and WEB_MACHINE_KIT defined, you must choose one of them") #undef WEB_MACHINE_ENGINE #undef WEB_MACHINE_KIT #endif #if !defined(WEB_MACHINE_ENGINE) && !defined(WEB_MACHINE_KIT) #if (QT_VERSION >= 0x050600) #define WEB_MACHINE_ENGINE #else #define WEB_MACHINE_KIT #endif #endif #endif // WEBCHOOSE_H MediaConch/Source/GUI/Qt/WebKitPage.cpp0000644000000000000000000001263513216666133016522 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "WebChoose.h" #if defined(WEB_MACHINE_KIT) #include #include #include #include #include #include #include #include "Common/FileRegistered.h" #include "Common/XsltPolicy.h" #include "mainwindow.h" #include "WebPage.h" #include #include namespace MediaConch { WebPage::WebPage(MainWindow *m, QWidget *parent) : WebCommonPage(m, parent) { connect(this, SIGNAL(loadFinished(bool)), this, SLOT(on_load_finished(bool))); QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true); #if defined(QT_DEBUG) settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); inspector = new QWebInspector; inspector->setPage(this); inspector->setVisible(true); #endif } WebPage::~WebPage() { #if defined(QT_DEBUG) if (inspector) { delete inspector; inspector = NULL; } #endif disconnect(this, SLOT(on_load_finished(bool))); QWebFrame* frame = mainFrame(); if (frame) disconnect(frame, SLOT(loadFinished(bool))); triggerAction(QWebPage::Stop); } void WebPage::on_load_finished(bool ok) { if (!ok) return; QWebFrame* frame = mainFrame(); if (frame) frame->addToJavaScriptWindowObject("webpage", this); } bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest& request, QWebPage::NavigationType type) { if (type == QWebPage::NavigationTypeFormSubmitted || type == QWebPage::NavigationTypeFormResubmitted) return false; return QWebPage::acceptNavigationRequest(frame, request, type); } QString WebPage::chooseFile(QWebFrame *, const QString&) { if (select_file_name.startsWith("settings_")) return choose_file_settings(); else if (select_file_name.startsWith("xslPolicyImport")) return choose_file_import_policy(); else if (select_file_name.startsWith("xslPolicyCreateFromFile")) return choose_file_policy_from_file(); QString value_input; std::string suggested_str; if (select_file_name == "displayImport_displayFile") suggested_str = mainwindow->select_correct_load_display_path(); else suggested_str = mainwindow->select_correct_load_files_path(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); if (select_file_name == "checkerRepository_directory") value_input = QFileDialog::getExistingDirectory(view(), NULL, suggested); else value_input = QFileDialog::getOpenFileName(view(), NULL, suggested); QMap::iterator it = file_selector.find(select_file_name); if (!value_input.length()) { if (it != file_selector.end()) file_selector.erase(it); return QString(); } QDir info(QFileInfo(value_input).absoluteDir()); if (select_file_name == "displayImport_displayFile") mainwindow->set_last_load_display_path(info.absolutePath().toUtf8().data()); else mainwindow->set_last_load_files_path(info.absolutePath().toUtf8().data()); if (it != file_selector.end()) file_selector[select_file_name] << value_input; else file_selector.insert(select_file_name, QStringList(value_input)); return value_input; } bool WebPage::extension(Extension extension, const ExtensionOption *, ExtensionReturn *output) { if (extension == QWebPage::ChooseMultipleFilesExtension) { std::string suggested_str; suggested_str = mainwindow->select_correct_load_files_path(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); QStringList names = QFileDialog::getOpenFileNames(view(), QString::null, suggested); ((ChooseMultipleFilesExtensionReturn*)output)->fileNames = names; if (names.size() > 0) { QDir info(QFileInfo(names[0]).absoluteDir()); mainwindow->set_last_load_files_path(info.absolutePath().toUtf8().data()); } QMap::iterator it = file_selector.find(select_file_name); if (it != file_selector.end()) file_selector[select_file_name] << names; else file_selector.insert(select_file_name, names); return true; } return false; } bool WebPage::supportsExtension(Extension extension) const { if (extension == ChooseMultipleFilesExtension) return true; return false; } void WebPage::use_javascript(const QString& js) { mainFrame()->evaluateJavaScript(js); } } #endif MediaConch/Source/GUI/Qt/helpwindow.h0000644000000000000000000000162113216666133016356 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef HELPWINDOW_H #define HELPWINDOW_H //--------------------------------------------------------------------------- #include class QPushButton; class QTabWidget; namespace MediaConch { class Help : public QDialog { Q_OBJECT public: explicit Help(QWidget *parent = 0); ~Help(); //*************************************************************************** // Functions //*************************************************************************** void About(); void GettingStarted(); void HowToUse(); void DataFormat(); private: QTabWidget* Central; QPushButton* Close; }; } #endif // HELPWINDOW_H MediaConch/Source/GUI/Qt/WebCommonPage.h0000644000000000000000000001667113216666133016674 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBCOMMONPAGE_H #define WEBCOMMONPAGE_H #include "WebChoose.h" #include #include #include #include #include #if defined(WEB_MACHINE_KIT) #include #include #elif defined(WEB_MACHINE_ENGINE) #include #include #endif class QDir; namespace MediaConch { class MainWindow; class FileRegistered; class XsltPolicy; class XsltPolicyRule; #if defined(WEB_MACHINE_KIT) class WebCommonPage : public QWebPage #elif defined(WEB_MACHINE_ENGINE) class WebCommonPage : public QWebEnginePage #endif { Q_OBJECT public: #if defined(WEB_MACHINE_KIT) explicit WebCommonPage(MainWindow *m, QWidget *parent) : QWebPage(parent), mainwindow(m), checker_full_parse(false) {} #elif defined(WEB_MACHINE_ENGINE) explicit WebCommonPage(MainWindow *m, QWidget *parent) : QWebEnginePage(parent), mainwindow(m), checker_full_parse(false) {} #endif virtual ~WebCommonPage() {} void change_local_files(const QStringList& files); virtual void use_javascript(const QString& js) = 0; protected: void clean_forms(); void add_sub_directory_files_to_list(const QDir dir, QFileInfoList& list); void charge_local_dir(const QString& directory, QStringList& tmp); QString choose_file_settings(); QString choose_file_import_policy(); QString choose_file_policy_from_file(); void string_to_json(QString& str); private Q_SLOTS: void timer_menu_link(); public Q_SLOTS: void on_file_selected(const QString& filename, const QString& path, const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList&, QString& ret, std::string& err_str); void on_file_selected_end(const std::string& err_str, QString& ret); void on_file_selected_formValues(const FileRegistered* fr, QString& formValues); QString on_file_upload_selected(const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList&); QString on_file_online_selected(const QString& url, const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList&); QString on_file_repository_selected(const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList&); QString on_file_from_db_selected(); QString status_reports_multi(const QStringList& ids, const QStringList& policy_ids); void on_save_settings_selected(const QString& policy, const QString& display, const QString& verbosity, const QString& save_report, const QString& load_files, const QString& save_policy, const QString& load_policy, const QString& save_display, const QString& load_display); void menu_link_checker(const QString& name); void on_input_changed(const QString& inputName); QString on_fill_output_list(); void on_download_report(const QString& report, long file_id, const QString& report_name); QString on_fill_implementation_report(long file_id, const QString& display, const QString& verbosity); void on_save_implementation_report(long file_id, const QString& display = "-1", const QString& verbosity=""); QString on_fill_policy_report(long file_id, const QString& policy, const QString& display); void on_save_policy_report(long file_id, const QString& policy = "-1", const QString& display = "-1"); QString on_fill_mediainfo_report(long file_id); void on_save_mediainfo_report(long file_id, const QString& output); QString on_fill_mediatrace_report(long file_id); void on_save_mediatrace_report(long file_id); QString on_create_policy_from_file(long file_id); QString checker_force_analyze(long id); void set_full_parse(bool fp); void close_all(); void close_element(long file_id); bool report_is_html(const QString& report); bool report_is_xml(const QString& report); bool report_is_json(const QString& report); QString get_file_tool(const QString& file); QString get_file_policy_id(const QString& file); QString get_file_display_id(const QString& file); QString get_file_verbosity_id(const QString& file); QString policy_is_valid(long file_id, long policy_id); QString implementation_is_valid(long file_id); QString file_is_analyzed(const QStringList& ids); QString display_add_file(const QString& name); void display_export_id(const QString& name); void display_delete_id(const QString& name); QString get_policies_tree(); QString policy_get_xml(int id); QString policy_get_jstree(int id); void create_rule_tree(XsltPolicyRule *r, QString& rule_data); QString import_policy(); QString import_policy(const QString& file); int import_policy(const QStringList& files); QString policy_from_file(); QString policy_import_data(const QString& data); QString xslt_policy_create(int parent_id); QString policy_duplicate(int id, int dst_policy_id); QString policy_move(int id, int dst_policy_id); QString policy_export(int id); QString policy_export_data(const QString& report); QString policy_remove(int id); QString policy_edit(int id, const QString& name, const QString& description, const QString& license, const QString& type, const QString& visibility); QString xslt_policy_rule_create(int policy_id); QString xslt_policy_rule_edit(int rule_id, int policy_id, const QString& title, const QString& type, const QString& field, int occurrence, const QString& ope, const QString& value, const QString& scope); QString xslt_policy_rule_duplicate(int policy_id, int rule_id, int dst_policy_id); QString xslt_policy_rule_move(int policy_id, int rule_id, int dst_policy_id); QString xslt_policy_rule_delete(int policy_id, int rule_id); QString get_values_list(const QString& type, const QString& field, const QString& value); QString get_fields_list(const QString& type, const QString& field); void call_tooltip(const QString&); QString checker_list(); QString add_file_to_checker_again(long id); QString remove_file_from_db(long id); QString remove_all_files_from_db(); QString get_version(); QString get_mco_token(); QString save_mco_token(const QString& token); protected: MainWindow *mainwindow; QMap file_selector; QString select_file_name; QString menu_name; bool checker_full_parse; }; } #endif MediaConch/Source/GUI/Qt/SQLLiteUi.cpp0000644000000000000000000017467513216666133016330 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifdef HAVE_SQLITE //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include "SQLLiteUi.h" #include "Common/FileRegistered.h" #include #include #include //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- namespace MediaConch { //*************************************************************************** // SQLLiteUi //*************************************************************************** int SQLLiteUi::ui_current_version = 11; //*************************************************************************** // Constructor/Destructor //*************************************************************************** //--------------------------------------------------------------------------- SQLLiteUi::SQLLiteUi() : DatabaseUi(), SQLLite() { } //--------------------------------------------------------------------------- SQLLiteUi::~SQLLiteUi() { } //--------------------------------------------------------------------------- int SQLLiteUi::init() { return SQLLite::init(db_dirname, db_filename); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_create_table() { get_sql_query_for_create_ui_table(query); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = execute(); if (ret < 0) return -1; return ui_update_table(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_update_table() { const char* end = NULL; int ret = 0; #define UPDATE_UI_TABLE_FOR_VERSION(version) \ do \ { \ if (ui_version > version) \ continue; \ \ get_sql_query_for_update_ui_table_v##version(query); \ if (!query.length()) \ continue; \ \ const char* q = query.c_str(); \ end = NULL; \ while (1) \ { \ ret = sqlite3_prepare_v2(db, q, -1, &stmt, &end); \ if (version != 0 && (ret != SQLITE_OK || !stmt)) \ return -1; \ ret = execute(); \ \ if (version != 0 && ret < 0) \ return ret; \ if (!end || !*end) \ break; \ \ q = end; \ } \ } while(0); UPDATE_UI_TABLE_FOR_VERSION(0); // UPDATE_UI_TABLE_FOR_VERSION(1); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(2); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(3); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(4); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(5); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(6); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(7); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(8); nothing to do // UPDATE_UI_TABLE_FOR_VERSION(9); nothing to do UPDATE_UI_TABLE_FOR_VERSION(10); #undef UPDATE_UI_TABLE_FOR_VERSION return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::init_ui() { if (init() < 0) return -1; if (get_db_version(ui_version) < 0) return -1; if (ui_settings_create_table() < 0) return -1; if (ui_create_table() < 0) return -1; set_db_version(ui_current_version); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_add_file(const FileRegistered* file) { std::stringstream create; reports.clear(); create << "INSERT INTO UI "; create << "(FILENAME, FILEPATH, POLICY, DISPLAY, ANALYZED, IMPLEMENTATION_VALID, POLICY_VALID, VERBOSITY, OPTIONS)"; create << " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 3, file->policy); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 4, file->display); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 5, file->analyzed); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 6, file->implementation_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 7, file->policy_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 8, file->verbosity); if (ret != SQLITE_OK) return -1; std::string options; options_vec_to_string(file->options, options); ret = sqlite3_bind_blob(stmt, 9, options.c_str(), options.length(), SQLITE_TRANSIENT); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_add_files(const std::vector& files) { std::vector create_files, update_files; int ret = 0; for (size_t i = 0; i < files.size(); ++i) { if (ui_file_exists(files[i])) update_files.push_back(files[i]); else create_files.push_back(files[i]); } if (ui_create_files(create_files) < 0) ret = -1; if (ui_update_files(update_files) < 0) ret = -1; return ret; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_create_files(const std::vector& files) { std::stringstream create; reports.clear(); create << "INSERT INTO UI "; create << "(FILENAME, FILEPATH, POLICY, DISPLAY, ANALYZED, IMPLEMENTATION_VALID, POLICY_VALID, VERBOSITY, OPTIONS) VALUES"; for (size_t i = 0; i < files.size(); ++i) { if (i) create << ","; create << " (?, ?, ?, ?, ?, ?, ?, ?, ?)"; } create << ";"; query = create.str(); std::string err; if (prepare_v2(query, err) < 0) return -1; int nb_column = 9; int ret = SQLITE_OK; for (size_t i = 0; i < files.size(); ++i) { FileRegistered* file = files[i]; ret = sqlite3_bind_blob(stmt, i * nb_column + 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, i * nb_column + 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 3, file->policy); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 4, file->display); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 5, file->analyzed); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 6, file->implementation_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 7, file->policy_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 8, file->verbosity); if (ret != SQLITE_OK) return -1; std::string options; options_vec_to_string(file->options, options); ret = sqlite3_bind_blob(stmt, i * nb_column + 9, options.c_str(), options.length(), SQLITE_TRANSIENT); if (ret != SQLITE_OK) return -1; } return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_update_file(const FileRegistered* file) { std::stringstream create; reports.clear(); create << "UPDATE UI "; create << "SET POLICY = ?, "; create << "DISPLAY = ?, "; create << "ANALYZED = ?, "; create << "IMPLEMENTATION_VALID = ?, "; create << "POLICY_VALID = ?, "; create << "VERBOSITY = ?, "; create << "OPTIONS = ? "; create << "WHERE FILENAME = ? "; create << "AND FILEPATH = ? ;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, file->policy); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, file->display); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 3, file->analyzed); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 4, file->implementation_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 5, file->policy_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 6, file->verbosity); if (ret != SQLITE_OK) return -1; std::string options; options_vec_to_string(file->options, options); ret = sqlite3_bind_blob(stmt, 7, options.c_str(), options.length(), SQLITE_TRANSIENT); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 8, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 9, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_update_files(const std::vector& files) { std::stringstream create; reports.clear(); create << "WITH Tmp(FILENAME, FILEPATH, POLICY, DISPLAY, ANALYZED, IMPLEMENTATION_VALID, POLICY_VALID, VERBOSITY, OPTIONS)"; create << "AS (VALUES"; for (size_t i = 0; i < files.size(); ++i) { if (i) create << ", "; create << "(?, ?, ?, ?, ?, ?, ?, ?, ?)"; } create << ") "; create << "UPDATE UI SET "; create << "POLICY = (SELECT POLICY FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH), "; create << "DISPLAY = (SELECT DISPLAY FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH), "; create << "ANALYZED = (SELECT ANALYZED FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH), "; create << "IMPLEMENTATION_VALID = (SELECT IMPLEMENTATION_VALID FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH), "; create << "POLICY_VALID = (SELECT POLICY_VALID FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH), "; create << "VERBOSITY = (SELECT VERBOSITY FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH) "; create << "OPTIONS = (SELECT OPTIONS FROM Tmp WHERE UI.FILENAME = Tmp.FILENAME AND UI.FILEPATH = Tmp.FILEPATH) "; create << " WHERE FILENAME IN (SELECT FILENAME FROM Tmp) AND FILEPATH IN (SELECT FILEPATH FROM Tmp)"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; int nb_column = 9; for (size_t i = 0; i < files.size(); ++i) { FileRegistered* file = files[i]; ret = sqlite3_bind_blob(stmt, i * nb_column + 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, i * nb_column + 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 3, file->policy); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 4, file->display); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 5, file->analyzed); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 6, file->implementation_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 7, file->policy_valid); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, i * nb_column + 8, file->verbosity); if (ret != SQLITE_OK) return -1; std::string options; options_vec_to_string(file->options, options); ret = sqlite3_bind_blob(stmt, i * nb_column + 9, options.c_str(), options.length(), SQLITE_TRANSIENT); if (ret != SQLITE_OK) return -1; } return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_get_file(FileRegistered* file) { std::stringstream create; std::string p("POLICY"); std::string d("DISPLAY"); std::string a("ANALYZED"); std::string i_v("IMPLEMENTATION_VALID"); std::string p_v("POLICY_VALID"); std::string v("VERBOSITY"); std::string o("OPTIONS"); reports.clear(); create << "SELECT " << p << ", " << d << ", " << a << ", " << i_v << ", " << p_v << ", " << v << ", " << o << " FROM UI "; create << "WHERE FILENAME = ? AND FILEPATH = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; if (execute() || !reports.size()) return -1; std::map r = reports[0]; if (r.find(p) != r.end()) file->policy = std_string_to_int(r[p]); if (r.find(d) != r.end()) file->display = std_string_to_int(r[d]); if (r.find(a) != r.end()) file->analyzed = std_string_to_int(r[a]); if (r.find(i_v) != r.end()) file->implementation_valid = std_string_to_int(r[i_v]); if (r.find(p_v) != r.end()) file->policy_valid = std_string_to_int(r[p_v]); if (r.find(v) != r.end()) file->verbosity = std_string_to_int(r[v]); if (r.find(o) != r.end()) options_string_to_vec(r[o], file->options); return 0; } //--------------------------------------------------------------------------- bool SQLLiteUi::ui_file_exists(FileRegistered* file) { std::stringstream create; reports.clear(); create << "SELECT COUNT(FILENAME) FROM UI "; create << "WHERE FILENAME = ? AND FILEPATH = ? AND OPTIONS = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return false; ret = sqlite3_bind_blob(stmt, 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return false; ret = sqlite3_bind_blob(stmt, 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return false; std::string options; options_vec_to_string(file->options, options); ret = sqlite3_bind_blob(stmt, 3, options.c_str(), options.length(), SQLITE_TRANSIENT); if (ret != SQLITE_OK) return false; if (execute()) return false; if (!reports.size() || reports[0]["COUNT(FILENAME)"] == "0") return false; return true; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_remove_file(const FileRegistered* file) { std::stringstream create; reports.clear(); create << "DELETE FROM UI "; create << "WHERE FILENAME = ? AND FILEPATH = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_remove_files(const std::vector& files) { std::stringstream create; reports.clear(); create << "DELETE FROM UI WHERE"; for (size_t i = 0; i < files.size(); ++i) { if (i) create << " OR "; create << " FILENAME = ? AND FILEPATH = ?"; } create << ";"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; for (size_t i = 0; i < files.size(); ++i) { FileRegistered* file = files[i]; ret = sqlite3_bind_blob(stmt, i * 2 + 1, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, i * 2 + 2, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; } return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_remove_all_files() { std::stringstream create; reports.clear(); create << "DELETE FROM UI "; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; return execute(); } //--------------------------------------------------------------------------- void SQLLiteUi::ui_get_elements(std::vector& vec) { std::stringstream create; std::string name("FILENAME"); std::string path("FILEPATH"); std::string p("POLICY"); std::string d("DISPLAY"); std::string a("ANALYZED"); std::string i_v("IMPLEMENTATION_VALID"); std::string p_v("POLICY_VALID"); std::string v("VERBOSITY"); std::string o("OPTIONS"); reports.clear(); create << "SELECT " << name << ", " << path << ", " << p << ", " << d; create << ", " << a << ", " << i_v << ", " << p_v << ", " << v << ", " << o; create << " FROM UI;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return; if (execute() || !reports.size()) return; for (size_t i = 0; i < reports.size(); ++i) { if (reports[i].find(name) != reports[i].end()) { FileRegistered* file = new FileRegistered; file->filename = reports[i][name]; if (reports[i].find(path) != reports[i].end()) file->filepath = reports[i][path]; if (reports[i].find(p) != reports[i].end()) file->policy = std_string_to_int(reports[i][p]); if (reports[i].find(d) != reports[i].end()) file->display = std_string_to_int(reports[i][d]); if (reports[i].find(a) != reports[i].end()) file->analyzed = std_string_to_int(reports[i][a]); if (reports[i].find(i_v) != reports[i].end()) file->implementation_valid = std_string_to_int(reports[i][i_v]); if (reports[i].find(p_v) != reports[i].end()) file->policy_valid = std_string_to_int(reports[i][p_v]); if (reports[i].find(v) != reports[i].end()) file->verbosity = std_string_to_int(reports[i][v]); if (reports[i].find(o) != reports[i].end()) options_string_to_vec(reports[i][o], file->options); if (file->analyzed) file->need_update = false; vec.push_back(file); } } } //--------------------------------------------------------------------------- int SQLLiteUi::ui_reset_file_for_reload(FileRegistered* file) { std::stringstream create; reports.clear(); create << "UPDATE UI "; create << "SET ANALYZED = ?, "; create << "IMPLEMENTATION_VALID = ?, "; create << "POLICY_VALID = ?, "; create << "WHERE FILENAME = ? "; create << "AND FILEPATH = ? ;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, false); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, false); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 3, false); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 4, file->filename.c_str(), file->filename.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_blob(stmt, 5, file->filepath.c_str(), file->filepath.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_create_table() { get_sql_query_for_create_ui_settings_table(query); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = execute(); if (ret < 0) return -1; return ui_settings_update_table(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_update_table() { const char* end = NULL; int ret = 0; #define UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(version) \ do \ { \ if (ui_version > version) \ continue; \ get_sql_query_for_update_ui_settings_table_v##version(query); \ if (!query.length()) \ continue; \ \ end = NULL; \ const char* q = query.c_str(); \ while (1) \ { \ ret = sqlite3_prepare_v2(db, q, -1, &stmt, &end); \ if (version != 0 && (ret != SQLITE_OK || !stmt)) \ return -1; \ ret = execute(); \ \ if (version != 0 && ret < 0) \ return ret; \ \ if (!*end) \ break; \ q = end; \ } \ } while(0); // UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(0); nothing to do UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(1); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(2); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(3); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(4); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(5); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(6); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(7); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(8); UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(9); // UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(10); nothing to do #undef UPDATE_UI_SETTINGS_TABLE_FOR_VERSION return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_add_default_values_for_user(int user_id) { reports.clear(); std::stringstream create; create << "INSERT INTO UI_SETTINGS "; create << "(USER_ID, DEFAULT_POLICY, DEFAULT_DISPLAY, DEFAULT_VERBOSITY) VALUES"; create << " (?, 'last', 'last', -1);"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; ret = execute(); return ret; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_has_user_id(int user_id, bool& has_row) { reports.clear(); query = "SELECT USER_ID FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() < 0) return -1; if (reports.size() != 1 || reports[0].find("USER_ID") == reports[0].end()) has_row = false; else has_row = true; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_check_user_id(int user_id) { bool has_row = false; if (ui_settings_has_user_id(user_id, has_row)) return -1; if (!has_row) ui_settings_add_default_values_for_user(user_id); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_policy(const std::string& policy, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_POLICY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, policy.c_str(), policy.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_policy(std::string& policy, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_POLICY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_POLICY") != reports[0].end()) policy = reports[0]["DEFAULT_POLICY"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_display(const std::string& display, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_DISPLAY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, display.c_str(), display.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_display(std::string& display, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_DISPLAY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_DISPLAY") != reports[0].end()) display = reports[0]["DEFAULT_DISPLAY"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_verbosity(int verbosity, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_VERBOSITY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, verbosity); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_verbosity(int& verbosity, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_VERBOSITY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_VERBOSITY") != reports[0].end()) verbosity = std_string_to_int(reports[0]["DEFAULT_VERBOSITY"]); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_policy(const std::string& policy, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_POLICY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, policy.c_str(), policy.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_policy(std::string& policy, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_POLICY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_POLICY") != reports[0].end()) policy = reports[0]["LAST_POLICY"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_display(const std::string& display, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_DISPLAY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, display.c_str(), display.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_display(std::string& display, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_DISPLAY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_DISPLAY") != reports[0].end()) display = reports[0]["LAST_DISPLAY"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_verbosity(int verbosity, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_VERBOSITY = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, verbosity); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_verbosity(int& verbosity, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_VERBOSITY FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_VERBOSITY") != reports[0].end()) verbosity = std_string_to_int(reports[0]["LAST_VERBOSITY"]); return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_load_files_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_LOAD_FILES_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_load_files_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_LOAD_FILES_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_LOAD_FILES_PATH") != reports[0].end()) load_path = reports[0]["DEFAULT_LOAD_FILES_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_load_files_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_LOAD_FILES_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_load_files_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_LOAD_FILES_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_LOAD_FILES_PATH") != reports[0].end()) load_path = reports[0]["LAST_LOAD_FILES_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_load_policy_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_LOAD_POLICY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_load_policy_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_LOAD_POLICY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_LOAD_POLICY_PATH") != reports[0].end()) load_path = reports[0]["DEFAULT_LOAD_POLICY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_load_policy_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_LOAD_POLICY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_load_policy_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_LOAD_POLICY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_LOAD_POLICY_PATH") != reports[0].end()) load_path = reports[0]["LAST_LOAD_POLICY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_load_display_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_LOAD_DISPLAY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_load_display_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_LOAD_DISPLAY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_LOAD_DISPLAY_PATH") != reports[0].end()) load_path = reports[0]["DEFAULT_LOAD_DISPLAY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_load_display_path(const std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_LOAD_DISPLAY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, load_path.c_str(), load_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_load_display_path(std::string& load_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_LOAD_DISPLAY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_LOAD_DISPLAY_PATH") != reports[0].end()) load_path = reports[0]["LAST_LOAD_DISPLAY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_save_report_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_SAVE_REPORT_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_save_report_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_SAVE_REPORT_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_SAVE_REPORT_PATH") != reports[0].end()) save_path = reports[0]["DEFAULT_SAVE_REPORT_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_save_report_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_SAVE_REPORT_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_save_report_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_SAVE_REPORT_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_SAVE_REPORT_PATH") != reports[0].end()) save_path = reports[0]["LAST_SAVE_REPORT_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_save_policy_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_SAVE_POLICY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_save_policy_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_SAVE_POLICY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_SAVE_POLICY_PATH") != reports[0].end()) save_path = reports[0]["DEFAULT_SAVE_POLICY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_save_policy_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_SAVE_POLICY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_save_policy_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_SAVE_POLICY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_SAVE_POLICY_PATH") != reports[0].end()) save_path = reports[0]["LAST_SAVE_POLICY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_default_save_display_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET DEFAULT_SAVE_DISPLAY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_default_save_display_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT DEFAULT_SAVE_DISPLAY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("DEFAULT_SAVE_DISPLAY_PATH") != reports[0].end()) save_path = reports[0]["DEFAULT_SAVE_DISPLAY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_last_save_display_path(const std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET LAST_SAVE_DISPLAY_PATH = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, save_path.c_str(), save_path.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_last_save_display_path(std::string& save_path, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT LAST_SAVE_DISPLAY_PATH FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("LAST_SAVE_DISPLAY_PATH") != reports[0].end()) save_path = reports[0]["LAST_SAVE_DISPLAY_PATH"]; return 0; } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_save_mco_token(const std::string& token, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; std::stringstream create; reports.clear(); create << "UPDATE UI_SETTINGS "; create << "SET MCO_TOKEN = ? "; create << "WHERE USER_ID = ?;"; query = create.str(); const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_blob(stmt, 1, token.c_str(), token.length(), SQLITE_STATIC); if (ret != SQLITE_OK) return -1; ret = sqlite3_bind_int(stmt, 2, user_id); if (ret != SQLITE_OK) return -1; return execute(); } //--------------------------------------------------------------------------- int SQLLiteUi::ui_settings_get_mco_token(std::string& token, int user_id) { if (ui_settings_check_user_id(user_id)) return -1; reports.clear(); query = "SELECT MCO_TOKEN FROM UI_SETTINGS WHERE USER_ID = ?;"; const char* end = NULL; int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end); if (ret != SQLITE_OK || !stmt || (end && *end)) return -1; ret = sqlite3_bind_int(stmt, 1, user_id); if (ret != SQLITE_OK) return -1; if (execute() || reports.size() != 1) return -1; if (reports[0].find("MCO_TOKEN") != reports[0].end()) token = reports[0]["MCO_TOKEN"]; return 0; } //--------------------------------------------------------------------------- void SQLLiteUi::options_vec_to_string(const std::vector& vec, std::string& str) { std::stringstream options; for (size_t x = 0; x < vec.size(); ++x) options << vec[x].size() << "," << vec[x].c_str(); str = options.str(); } //--------------------------------------------------------------------------- void SQLLiteUi::options_string_to_vec(const std::string& str, std::vector& vec) { size_t pos = 0; size_t start; while (pos != std::string::npos) { start = pos; pos = str.find(",", start); if (pos == std::string::npos) continue; std::string size = str.substr(start, pos - start); pos += 1; char *end = NULL; long len = strtol(size.c_str(), &end, 10); if (len < 0 || pos + len > str.size()) { pos = std::string::npos; continue; } vec.push_back(str.substr(pos, len)); pos += len; } } } #endif MediaConch/Source/GUI/Qt/mainwindow.h0000644000000000000000000003661313216666133016363 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "Common/Core.h" #include "workerfiles.h" #include "uisettings.h" #include "DatabaseUi.h" namespace Ui { class MainWindow; } class QVBoxLayout; class QLabel; class QFile; class QStringList; class QLineEdit; namespace MediaConch { class SettingsWindow; class CheckerWindow; class PoliciesWindow; class PublicPoliciesWindow; class DisplayWindow; class DatabaseWindow; class VerbositySpinbox; class PolicyCombobox; class DisplayCombobox; class FileRegistered; class WebView; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); // View selected enum Run_View { RUN_CHECKER_VIEW, RUN_POLICIES_VIEW, RUN_DISPLAY_VIEW, RUN_DATABASE_VIEW, RUN_SETTINGS_VIEW, RUN_PUBLIC_POLICIES_VIEW, }; void Run(); // Functions int add_file_to_list(const QString& file, const QString& path, const QString& policy, const QString& display, const QString& verbosity, bool fixer, bool, const QStringList& options, std::string& err); int add_file_to_list(long id, std::string& err); int add_attachment_to_list(const QString& file, int policy, int display, int verbosity, const QStringList& options, std::string& err); void remove_file_to_list(long file_id); void remove_all_files_to_list(); int update_policy_of_file_in_list(long file_id, long policy, std::string& error); int analyze_force_file_to_list(long id, std::string& err); void clear_file_list(); // UI void Ui_Init(); void set_msg_to_status_bar(const QString& message); void set_str_msg_to_status_bar(const std::string& message); void clear_msg_in_status_bar(); void drag_and_drop_files_action(const QStringList& files); bool mil_has_curl_enabled(); // Helpers void set_widget_to_layout(QWidget* w); void remove_widget_from_layout(QWidget* w); int analyze(const std::vector& files, bool with_fixer, bool force, const std::vector& options, std::vector& files_id, std::string& err); int is_analyze_finished(const std::vector& files, std::vector& res,std::string& err); int is_analyze_finished(const std::string& file, MediaConchLib::Checker_StatusRes& res, std::string& err); int validate(MediaConchLib::report report, const std::vector& files, const std::vector& policies_ids, const std::vector& policies_contents, const std::map& options, std::vector& result, std::string& err); int validate(MediaConchLib::report report, const std::string& file, const std::vector& policies_ids, const std::vector& policies_contents, const std::map& options, std::vector& result, std::string& err); int validate_policy(long file_id, size_t policy_id, std::vector& result, std::string& err); void checker_stop(const std::vector& ids); int get_mediainfo_output_list(std::string& output, std::string& err); QString get_mediainfo_and_mediatrace_xml(long file_id, const std::string& display_name, const std::string& display_content, std::string& err); QString get_mediainfo_report(long file_id, const std::string& display_name, const std::string& display_content, const std::string& mi_inform, std::string& err); QString get_mediainfo_jstree(long file_id, std::string& err); QString get_mediatrace_xml(long file_id, const std::string& display_name, const std::string& display_content, std::string& err); QString get_mediatrace_jstree(long file_id, std::string& err); QString ask_for_schema_file(); void checker_selected(); void policies_selected(); void public_policies_selected(); void display_selected(); void database_selected(); void settings_selected(); void add_default_displays(); void get_implementation_report(long file_id, QString& report, std::string& err, int *display=NULL, int *verbosity=NULL); int validate_policy(long file_id, QString& report, std::string& err, int policy=-1, int *display=NULL); int checker_clear(long id, QString& err); int checker_clear(QString& err); int checker_file_from_id(long id, std::string& file, std::string& err); int checker_file_information(long id, MediaConchLib::Checker_FileInfo& file, std::string& err); void add_policy_to_list(const QString& policy); void clear_policy_list(); void add_xslt_display(const QString& display_xslt); void remove_xslt_display(); int policy_import(const QString& file, QString& err); int policy_import_data(const QString& data, QString& err); int xslt_policy_create(int parent_id, QString& err); int policy_duplicate(int id, int dst_policy_id, QString& err); int policy_move(int id, int dst_policy_id, QString& err); int policy_change_info(int id, const std::string& name, const std::string& description, const std::string& license, QString& err); int policy_change_type(int id, const std::string& type, QString& err); int policy_change_is_public(int id, bool is_public, QString& err); int policy_get(int pos, const std::string& format, MediaConchLib::Get_Policy& p, QString& err); int policy_save(int pos, QString& err); int policy_get_name(int pos, std::string& name, QString& err); int policy_dump(int pos, std::string& memory, QString& err); int policy_remove(int pos, QString& err); int policy_export(int pos, QString& err); int policy_export_data(const QString& policy, const QString& p_name, QString& err); int clear_policies(QString& err); size_t get_policies_count(QString& err) const; long xslt_policy_create_from_file(long file_id, QString& err); int xslt_policy_rule_create(int policy_id, QString& err); XsltPolicyRule *xslt_policy_rule_get(int policy_id, int rule_id, QString& err); int xslt_policy_rule_edit(int policy_id, int rule_id, const XsltPolicyRule *rule, QString& err); int xslt_policy_rule_duplicate(int policy_id, int rule_id, int dst_policy_id, QString& err); int xslt_policy_rule_move(int policy_id, int rule_id, int dst_policy_id, QString& err); int xslt_policy_rule_delete(int policy_id, int rule_id, QString& err); int get_values_for_type_field(const std::string& type, const std::string& field, std::vector& values); int get_fields_for_type(const std::string& type, std::vector& fields); int select_correct_policy(); int select_correct_display(); int select_correct_verbosity(); std::string select_correct_save_report_path(); std::string select_correct_save_policy_path(); std::string select_correct_save_display_path(); std::string select_correct_load_files_path(); std::string select_correct_load_policy_path(); std::string select_correct_load_display_path(); void set_last_save_report_path(const std::string& path); void set_last_save_policy_path(const std::string& path); void set_last_save_display_path(const std::string& path); void set_last_load_files_path(const std::string& path); void set_last_load_policy_path(const std::string& path); void set_last_load_display_path(const std::string& path); FileRegistered* get_file_registered_from_file(const std::string& file); FileRegistered* get_file_registered_from_id(long file_id); std::string get_filename_from_registered_file_id(long file_id); void create_policy_from_file(const FileRegistered* file); int get_ui_database_path(std::string& path); void get_version(std::string& version); int get_policies(const std::string&, MediaConchLib::Get_Policies&, QString& err); QString get_local_folder() const; void get_registered_files(std::map& files); void checker_list(std::vector& files, QString& error); // Display related std::vector& get_displays(); int display_add_file(const QString& name, const QString& filename); void display_export_id(const QString& name); void display_delete_id(const QString& name); int get_display_index_by_filename(const std::string& filename); UiSettings& get_settings(); const std::map >* providePolicyExistingType() const { return &Policies::existing_type; } const std::list* providePolicyExistingValidator() const { return &Policies::existing_validator; } const std::list* providePolicyExistingXsltOperator() const { return &Policies::existing_xsltOperator; } WebView* web_view; private: Ui::MainWindow *ui; // Internal DatabaseUi *db; static const std::string database_filename; static const std::string version; MediaConchLib MCL; std::vector displays_list; WorkerFiles workerfiles; UiSettings uisettings; Run_View current_view; long user; // Visual elements QVBoxLayout* Layout; CheckerWindow* checkerView; PoliciesWindow* policiesView; PublicPoliciesWindow* publicPoliciesView; DisplayWindow* displayView; DatabaseWindow* databaseView; SettingsWindow* settingsView; void create_and_configure_ui_database(); int clearVisualElements(); void clearPoliciesElements(); void clearPublicPoliciesElements(); void createCheckerView(); void createPoliciesView(); void createPublicPoliciesView(); void createDisplayView(); void createDatabaseView(); void createSettingsView(); void fill_display_used(int *policy_i, std::string& display_name, std::string& display_content, std::string*& dname, std::string*& dcontent, FileRegistered* fr); void fill_options_for_report(std::map& opts, int *verbosity_p); protected: void closeEvent(QCloseEvent *event); //*************************************************************************** // SIGNAL //*************************************************************************** Q_SIGNALS: void status_bar_clear_message(); void status_bar_show_message(const QString& message, int timeout); void execute_javascript(const QString& script); private Q_SLOTS: void on_actionOpen_triggered(); void on_actionChooseSchema_triggered(); public Q_SLOTS: // View void on_actionChecker_triggered(); void on_actionPolicies_triggered(); void on_actionPublicPolicies_triggered(); void on_actionDisplay_triggered(); void on_actionDatabase_triggered(); void on_actionSettings_triggered(); //Help void on_actionAbout_triggered(); void on_actionGettingStarted_triggered(); void on_actionHowToUse_triggered(); void on_actionDataFormat_triggered(); bool close(); void loadFinished_Custom(bool ok); void loadProgress_Custom(int progress); }; } #endif // MAINWINDOW_H MediaConch/Source/GUI/Qt/progressbar.h0000644000000000000000000000173313216666133016533 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef PROGRESSBAR_H #define PROGRESSBAR_H #include namespace Ui { class ProgressBar; } class QProgressBar; namespace MediaConch { class ProgressBar : public QFrame { Q_OBJECT public: explicit ProgressBar(QWidget *parent = 0); ~ProgressBar(); //*************************************************************************** // Functions //*************************************************************************** QProgressBar *get_progress_bar(); //*************************************************************************** // Visual element //*************************************************************************** private: Ui::ProgressBar *ui; }; } #endif // PROGRESSBAR_H MediaConch/Source/GUI/Qt/mainwindow.ui0000644000000000000000000001544413216666133016550 0ustar rootroot MainWindow 0 0 884 635 0 0 MediaConch 0 QLayout::SetDefaultConstraint 0 0 QLayout::SetDefaultConstraint 0 0 0 884 19 Fi&le &Tool Help &Open &Quit Ctrl+Q &Import policy set... Save policies to file true true &Checker true &Policies true P&ublic Policies true &Display true Data&base true &Settings &Close all &FAQ &How To Use &Data Format &About Default verbosity Default policy Default display Default path to save report Default path to open files Default path to save policy Default path to save display Default path to load policy Default path to load display actionQuit triggered() MainWindow close() -1 -1 445 325 MediaConch/Source/GUI/Qt/mainwindow.cpp0000644000000000000000000016250413216666135016717 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "mainwindow.h" #include "ui_mainwindow.h" #include "settingswindow.h" #include "checkerwindow.h" #include "policieswindow.h" #include "publicpolicieswindow.h" #include "displaywindow.h" #include "databasewindow.h" #include "helpwindow.h" #include "WebView.h" #include "WebPage.h" #include "Common/Reports.h" #include "Common/generated/ImplementationReportDisplayHtmlXsl.h" #include "Common/FileRegistered.h" #include "DatabaseUi.h" #include "SQLLiteUi.h" #include "NoDatabaseUi.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION >= 0x050000 #include #else #include #endif #if QT_VERSION >= 0x050200 #include #endif #include namespace MediaConch { //*************************************************************************** // Constant //*************************************************************************** const std::string MainWindow::database_filename = std::string("MediaConchUi.db"); const std::string MainWindow::version = "16.10"; //*************************************************************************** // Constructor / Desructor //*************************************************************************** MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), web_view(NULL), ui(new Ui::MainWindow), db(NULL), workerfiles(this), user(-1) { ui->setupUi(this); std::string err; MCL.init(err); // GUI database create_and_configure_ui_database(); workerfiles.set_database(db); uisettings.set_database(db); uisettings.init(); // Core configuration if (!MCL.get_implementation_schema_file().length()) MCL.create_default_implementation_schema(); int nb_threads=QThread::idealThreadCount(); if (nb_threads!=-1) MCL.set_default_scheduler_max_threads(nb_threads); // Load policy if (!MCL.get_use_daemon()) { MCL.load_system_policy(); MCL.load_existing_policy(); } // Groups QActionGroup* ToolGroup = new QActionGroup(this); ToolGroup->addAction(ui->actionChecker); ToolGroup->addAction(ui->actionPolicies); ToolGroup->addAction(ui->actionPublicPolicies); ToolGroup->addAction(ui->actionDisplay); ToolGroup->addAction(ui->actionDatabase); ToolGroup->addAction(ui->actionSettings); // Visual elements Layout=(QVBoxLayout*)ui->centralWidget->layout(); Layout->setContentsMargins(0, 0, 0, 0); Layout->setAlignment(Qt::AlignTop | Qt::AlignLeft); checkerView=NULL; policiesView = NULL; publicPoliciesView = NULL; displayView = NULL; databaseView = NULL; settingsView = NULL; // Window setWindowIcon(QIcon(":/icon/icon.png")); int left=70; int width=QApplication::desktop()->screenGeometry().width(); if (width>1366) { left+=(width-1366)/2; width=1366; } move(left, 70); resize(width-140, QApplication::desktop()->screenGeometry().height()-140); setAcceptDrops(false); // Status bar statusBar()->show(); clear_msg_in_status_bar(); connect(this, SIGNAL(status_bar_show_message(const QString&, int)), statusBar(), SLOT(showMessage(const QString&, int))); connect(this, SIGNAL(status_bar_clear_message()), statusBar(), SLOT(clearMessage())); // worker load existing files workerfiles.fill_registered_files_from_db(); workerfiles.start(); // WebView web_view = new WebView(this); WebPage* page = new WebPage(this, web_view); web_view->setPage(page); #if defined(WEB_MACHINE_ENGINE) QWebChannel *channel = new QWebChannel(page); page->setWebChannel(channel); channel->registerObject("webpage", page); #endif connect(web_view, SIGNAL(loadProgress(int)), this, SLOT(loadProgress_Custom(int))); connect(web_view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished_Custom(bool))); web_view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); set_widget_to_layout(web_view); // Default add_default_displays(); on_actionChecker_triggered(); } MainWindow::~MainWindow() { workerfiles.quit(); workerfiles.wait(); delete ui; clearVisualElements(); if (web_view) { remove_widget_from_layout(web_view); #if defined(WEB_MACHINE_ENGINE) WebPage* page = (WebPage*)web_view->page(); QWebChannel *channel = page ? page->webChannel() : NULL; if (channel) channel->deregisterObject(page); #endif delete web_view; web_view = NULL; } } //*************************************************************************** // Functions //*************************************************************************** //--------------------------------------------------------------------------- bool MainWindow::mil_has_curl_enabled() { return MCL.mil_has_curl_enabled(); } //--------------------------------------------------------------------------- bool MainWindow::close() { clearVisualElements(); return QWidget::close(); } //--------------------------------------------------------------------------- void MainWindow::closeEvent(QCloseEvent *event) { clearVisualElements(); QWidget::closeEvent(event); } //--------------------------------------------------------------------------- int MainWindow::add_file_to_list(const QString& file, const QString& path, const QString& policy, const QString& display, const QString& v, bool fixer, bool create_policy, const QStringList& options, std::string& err) { std::string filename = std::string(file.toUtf8().data(), file.toUtf8().length()); std::string filepath = std::string(path.toUtf8().data(), path.toUtf8().length()); int display_i = display.toInt(); int verbosity_i = v.toInt(); // Save configuration used std::string policy_str; uisettings.change_last_policy(policy.toUtf8().data()); uisettings.change_last_display(displays_list[display_i].toUtf8().data()); uisettings.change_last_verbosity(verbosity_i); std::string full_path = filepath; #ifdef WINDOWS if (full_path.length() && full_path[full_path.size() - 1] != '/' && full_path[full_path.size() - 1] != '\\') full_path += "/"; #else if (full_path.length()) full_path += "/"; #endif full_path += filename; bool force = fixer; std::vector opt_vec; for (int i = 0; i < options.size(); ++i) opt_vec.push_back(options[i].toUtf8().data()); if (workerfiles.add_file_to_list(filename, filepath, policy.toInt(), display_i, verbosity_i, fixer, force, create_policy, opt_vec, err) < 0) return -1; return 0; } //--------------------------------------------------------------------------- int MainWindow::add_file_to_list(long id, std::string& err) { std::string full_file; if (checker_file_from_id(id, full_file, err) < 0) return -1; QFileInfo info(QString().fromUtf8(full_file.c_str(), full_file.size())); return workerfiles.add_file_to_list(id, full_file, info.absolutePath().toUtf8().data(), info.fileName().toUtf8().data(), err); } //--------------------------------------------------------------------------- int MainWindow::add_attachment_to_list(const QString& file, int policy, int display, int verbosity, const QStringList& options, std::string& err) { std::vector opt_vec; for (int i = 0; i < options.size(); ++i) opt_vec.push_back(options[i].toUtf8().data()); std::string filename = std::string(file.toUtf8().data(), file.toUtf8().length()); if (workerfiles.add_attachment_to_list(filename, policy, display, verbosity, opt_vec, err) < 0) return -1; return 0; } //--------------------------------------------------------------------------- void MainWindow::remove_file_to_list(long file_id) { workerfiles.remove_file_registered_from_id(file_id); } //--------------------------------------------------------------------------- void MainWindow::remove_all_files_to_list() { workerfiles.remove_all_files_registered(); } //--------------------------------------------------------------------------- int MainWindow::update_policy_of_file_in_list(long file_id, long policy, std::string& error) { return workerfiles.update_policy_of_file_registered_from_file(file_id, policy, error); } //--------------------------------------------------------------------------- int MainWindow::analyze_force_file_to_list(long id, std::string& err) { std::string full_path; if (checker_file_from_id(id, full_path, err) < 0) return -1; FileRegistered *fr = get_file_registered_from_file(full_path); if (!fr) { err = "File ID not registered"; return -1; } if (db) db->ui_reset_file_for_reload(fr); if (workerfiles.add_file_to_list(fr->filename, fr->filepath, fr->policy, fr->display, fr->verbosity, false, true, false, fr->options, err) < 0) return -1; return 0; } //*************************************************************************** // Helpers //*************************************************************************** //--------------------------------------------------------------------------- void MainWindow::Run() { switch (current_view) { case RUN_CHECKER_VIEW: createCheckerView(); break; case RUN_POLICIES_VIEW: createPoliciesView(); break; case RUN_PUBLIC_POLICIES_VIEW: createPublicPoliciesView(); break; case RUN_DISPLAY_VIEW: createDisplayView(); break; case RUN_DATABASE_VIEW: createDatabaseView(); break; case RUN_SETTINGS_VIEW: createSettingsView(); break; default: createCheckerView(); break; } } //--------------------------------------------------------------------------- void MainWindow::get_registered_files(std::map& files) { workerfiles.get_registered_files(files); } //--------------------------------------------------------------------------- QString MainWindow::get_local_folder() const { #if QT_VERSION >= 0x050400 QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); #elif QT_VERSION >= 0x050000 QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); #else QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); #endif return path; } //--------------------------------------------------------------------------- QString MainWindow::ask_for_schema_file() { QString suggested = QString().fromUtf8(select_correct_load_policy_path().c_str()); QString file = QFileDialog::getOpenFileName(this, "Open file", suggested, "XSL file (*.xsl);;All (*.*)", 0, QFileDialog::Option(0)); if (file.length()) { QDir info(QFileInfo(file).absoluteDir()); set_last_load_policy_path(info.absolutePath().toUtf8().data()); } return file; } //--------------------------------------------------------------------------- long MainWindow::xslt_policy_create_from_file(long file_id, QString& err) { long pos = -1; std::string error; if (file_id >= 0) if ((pos = MCL.xslt_policy_create_from_file(user, file_id, error)) < 0) err = QString().fromUtf8(error.c_str(), error.size()); QMessageBox::Icon icon; QString text; if (pos != -1) { icon = QMessageBox::Information; text = QString("Policy from %1 is created, you can find it in the \"Policies\" tab") .arg(QString().fromUtf8(get_filename_from_registered_file_id(file_id).c_str())); } else { icon = QMessageBox::Critical; text = err; } QMessageBox msgBox(icon, tr("Create policy"), text, QMessageBox::NoButton, this); msgBox.exec(); return pos; } //--------------------------------------------------------------------------- void MainWindow::create_policy_from_file(const FileRegistered* file) { if (!file) return; long id = -1; std::string error; if ((id = MCL.xslt_policy_create_from_file(user, file->file_id, error)) < 0) set_str_msg_to_status_bar(error); if (policiesView) { QString script = QString("policyTreeAjax.policyCreateFromFileCallback(%1);").arg(id); Q_EMIT execute_javascript(script); } } //--------------------------------------------------------------------------- void MainWindow::add_default_displays() { QDir displays_dir(":/displays"); displays_dir.setFilter(QDir::Files); QFileInfoList list = displays_dir.entryInfoList(); for (int i = 0; i < list.count(); ++i) displays_list.push_back(list[i].absoluteFilePath()); QString path = QString().fromUtf8(Core::get_local_data_path().c_str()); path += "displays/"; QDir dir(path); if (dir.exists()) { dir.setFilter(QDir::Files); list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) displays_list.push_back(list[i].absoluteFilePath()); } } //--------------------------------------------------------------------------- void MainWindow::add_xslt_display(const QString& display_xslt) { if (checkerView) checkerView->set_display_xslt(display_xslt); } //--------------------------------------------------------------------------- void MainWindow::remove_xslt_display() { if (checkerView) checkerView->reset_display_xslt(); } //--------------------------------------------------------------------------- void MainWindow::clear_file_list() { workerfiles.clear_files(); } //--------------------------------------------------------------------------- std::vector& MainWindow::get_displays() { return displays_list; } //--------------------------------------------------------------------------- int MainWindow::display_add_file(const QString& name, const QString& filename) { if (!displayView) return -1; return displayView->add_new_file(name, filename); } //--------------------------------------------------------------------------- void MainWindow::display_export_id(const QString& name) { if (!displayView) return; displayView->export_file(name); } //--------------------------------------------------------------------------- void MainWindow::display_delete_id(const QString& name) { if (!displayView) return; displayView->delete_file(name); } //--------------------------------------------------------------------------- int MainWindow::get_display_index_by_filename(const std::string& filename) { std::string tmp(filename); if (!tmp.size()) tmp = ":/displays/MediaConchHtml.xsl"; for (size_t i = 0; i < displays_list.size(); ++i) { if (tmp == displays_list[i].toUtf8().data()) return i; } return 0; } //--------------------------------------------------------------------------- UiSettings& MainWindow::get_settings() { return uisettings; } int MainWindow::get_values_for_type_field(const std::string& type, const std::string& field, std::vector& values) { std::string err; return MCL.policy_get_values_for_type_field(type, field, values, err); } int MainWindow::get_fields_for_type(const std::string& type, std::vector& fields) { std::string err; return MCL.policy_get_fields_for_type(type, fields, err); } //*************************************************************************** // Slots //*************************************************************************** //--------------------------------------------------------------------------- void MainWindow::on_actionOpen_triggered() { QStringList list = QFileDialog::getOpenFileNames(this, "Open file", "", "Video files (*.avi *.mkv *.mov *.mxf *.mp4);;All (*.*)", 0, QFileDialog::Option(0)); if (list.empty()) return; current_view = RUN_CHECKER_VIEW; Run(); if (!checkerView) return; checkerView->change_local_files(list); } //--------------------------------------------------------------------------- void MainWindow::on_actionChecker_triggered() { if (!ui->actionChecker->isChecked()) ui->actionChecker->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_CHECKER_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionPolicies_triggered() { if (!ui->actionPolicies->isChecked()) ui->actionPolicies->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_POLICIES_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionPublicPolicies_triggered() { if (!ui->actionPublicPolicies->isChecked()) ui->actionPublicPolicies->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_PUBLIC_POLICIES_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionDisplay_triggered() { if (!ui->actionDisplay->isChecked()) ui->actionDisplay->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_DISPLAY_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionDatabase_triggered() { if (!ui->actionDatabase->isChecked()) ui->actionDatabase->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_DATABASE_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionSettings_triggered() { if (!ui->actionSettings->isChecked()) ui->actionSettings->setChecked(true); if (clearVisualElements() < 0) return; current_view = RUN_SETTINGS_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::on_actionChooseSchema_triggered() { QString file = ask_for_schema_file(); if (!file.length()) return; QString err; if (policy_import(file, err) < 0) set_msg_to_status_bar(err); if (!ui->actionPolicies->isChecked()) ui->actionPolicies->setChecked(true); current_view = RUN_POLICIES_VIEW; Run(); } //--------------------------------------------------------------------------- void MainWindow::loadFinished_Custom(bool ok) { if (!ok) { set_msg_to_status_bar("Problem to load the checker page"); return; } if (checkerView) checkerView->create_web_view_finished(); if (policiesView) policiesView->create_web_view_finished(); if (publicPoliciesView) publicPoliciesView->create_web_view_finished(); if (displayView) displayView->create_web_view_finished(); if (databaseView) databaseView->create_web_view_finished(); if (settingsView) settingsView->create_web_view_finished(); } //--------------------------------------------------------------------------- void MainWindow::loadProgress_Custom(int progress) { if (progress == 100) status_bar_clear_message(); else set_msg_to_status_bar(QString::number(progress) + "%"); } //*************************************************************************** // Help //*************************************************************************** //--------------------------------------------------------------------------- void MainWindow::on_actionAbout_triggered() { Help* Frame=new Help(this); Frame->About(); } //--------------------------------------------------------------------------- void MainWindow::on_actionGettingStarted_triggered() { Help* Frame=new Help(this); Frame->GettingStarted(); } //--------------------------------------------------------------------------- void MainWindow::on_actionHowToUse_triggered() { Help* Frame=new Help(this); Frame->HowToUse(); } //--------------------------------------------------------------------------- void MainWindow::on_actionDataFormat_triggered() { Help* Frame=new Help(this); Frame->DataFormat(); } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- int MainWindow::clearVisualElements() { if (checkerView) { delete checkerView; checkerView = NULL; } if (policiesView) { delete policiesView; policiesView = NULL; } if (publicPoliciesView) { delete publicPoliciesView; publicPoliciesView = NULL; } if (displayView) { delete displayView; displayView = NULL; } if (databaseView) { delete databaseView; databaseView = NULL; } if (settingsView) { delete settingsView; settingsView = NULL; } return 0; } //--------------------------------------------------------------------------- void MainWindow::createCheckerView() { if (clearVisualElements() < 0) return; checkerView = new CheckerWindow(this); checkerView->create_web_view(); } //--------------------------------------------------------------------------- void MainWindow::createPoliciesView() { if (clearVisualElements() < 0) return; MCL.reset_daemon_client(); policiesView = new PoliciesWindow(this); connect(this, SIGNAL(execute_javascript(const QString&)), policiesView, SLOT(use_javascript(const QString&))); policiesView->display_policies(); } //--------------------------------------------------------------------------- void MainWindow::createPublicPoliciesView() { if (clearVisualElements() < 0) return; MCL.reset_daemon_client(); publicPoliciesView = new PublicPoliciesWindow(this); publicPoliciesView->display_public_policies(); } //--------------------------------------------------------------------------- void MainWindow::createDisplayView() { if (clearVisualElements() < 0) return; displayView = new DisplayWindow(this); displayView->display_display(); } //--------------------------------------------------------------------------- void MainWindow::createDatabaseView() { if (clearVisualElements() < 0) return; databaseView = new DatabaseWindow(this); databaseView->display_database(); } //--------------------------------------------------------------------------- void MainWindow::createSettingsView() { if (clearVisualElements() < 0) return; settingsView = new SettingsWindow(this); settingsView->display_settings(); } //--------------------------------------------------------------------------- void MainWindow::set_msg_to_status_bar(const QString& message) { if (message.isEmpty()) clear_msg_in_status_bar(); else Q_EMIT status_bar_show_message(message, 5000); } //--------------------------------------------------------------------------- void MainWindow::set_str_msg_to_status_bar(const std::string& message) { set_msg_to_status_bar(QString::fromStdString(message)); } //--------------------------------------------------------------------------- void MainWindow::clear_msg_in_status_bar() { Q_EMIT status_bar_clear_message(); } //--------------------------------------------------------------------------- void MainWindow::drag_and_drop_files_action(const QStringList& files) { if (checkerView) checkerView->change_local_files(files); if (displayView) displayView->add_new_files(files); if (databaseView) { //nothing to do } if (settingsView) { //nothing to do } if (policiesView) policiesView->add_new_policies(files); if (publicPoliciesView) { //nothing to do } } //*************************************************************************** // HELPER //*************************************************************************** //--------------------------------------------------------------------------- void MainWindow::set_widget_to_layout(QWidget* w) { w->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); Layout->addWidget(w); } //--------------------------------------------------------------------------- void MainWindow::remove_widget_from_layout(QWidget* w) { Layout->removeWidget(w); } //--------------------------------------------------------------------------- void MainWindow::checker_selected() { on_actionChecker_triggered(); } //--------------------------------------------------------------------------- void MainWindow::policies_selected() { on_actionPolicies_triggered(); } //--------------------------------------------------------------------------- void MainWindow::public_policies_selected() { on_actionPublicPolicies_triggered(); } //--------------------------------------------------------------------------- void MainWindow::display_selected() { on_actionDisplay_triggered(); } //--------------------------------------------------------------------------- void MainWindow::database_selected() { on_actionDatabase_triggered(); } //--------------------------------------------------------------------------- void MainWindow::settings_selected() { on_actionSettings_triggered(); } //--------------------------------------------------------------------------- int MainWindow::get_policies(const std::string& format, MediaConchLib::Get_Policies& policies, QString& err) { std::vector ids; std::string error; int ret = MCL.policy_get_policies(user, ids, format, policies, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_import(const QString& filename, QString& err) { QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { err = "Policy cannot be read"; return -1; } QByteArray schema = file.readAll(); file.close(); std::string memory(schema.constData(), schema.length()); std::string error; int ret = MCL.policy_import(user, memory, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_import_data(const QString& data, QString& err) { std::string error; int ret = MCL.policy_import(user, data.toUtf8().data(), error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_create(int parent_id, QString& err) { std::string error; int ret = MCL.xslt_policy_create(user, error, "and", parent_id); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_duplicate(int id, int dst_policy_id, QString& err) { std::string error; int ret = MCL.policy_duplicate(user, id, dst_policy_id, NULL, false, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_move(int id, int dst_policy_id, QString& err) { std::string error; int ret = MCL.policy_move(user, id, dst_policy_id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_change_info(int id, const std::string& name, const std::string& description, const std::string& license, QString& err) { std::string error; int ret = MCL.policy_change_info(user, id, name, description, license, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_change_type(int id, const std::string& type, QString& err) { std::string error; int ret = MCL.policy_change_type(user, id, type, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_change_is_public(int id, bool is_public, QString& err) { std::string error; int ret = MCL.policy_change_is_public(user, id, is_public, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_rule_create(int policy_id, QString& err) { std::string error; int ret = MCL.xslt_policy_rule_create(user, policy_id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- XsltPolicyRule *MainWindow::xslt_policy_rule_get(int policy_id, int rule_id, QString& err) { std::string error; XsltPolicyRule *ret = MCL.xslt_policy_rule_get(user, policy_id, rule_id, error); if (!ret) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_rule_edit(int policy_id, int rule_id, const XsltPolicyRule *rule, QString& err) { std::string error; int ret = MCL.xslt_policy_rule_edit(user, policy_id, rule_id, rule, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_rule_duplicate(int policy_id, int rule_id, int dst_policy_id, QString& err) { std::string error; int ret = MCL.xslt_policy_rule_duplicate(user, policy_id, rule_id, dst_policy_id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_rule_move(int policy_id, int rule_id, int dst_policy_id, QString& err) { std::string error; int ret = MCL.xslt_policy_rule_move(user, policy_id, rule_id, dst_policy_id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::xslt_policy_rule_delete(int policy_id, int rule_id, QString& err) { std::string error; int ret = MCL.xslt_policy_rule_delete(user, policy_id, rule_id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_get(int pos, const std::string& format, MediaConchLib::Get_Policy& p, QString& err) { std::string error; int ret = MCL.policy_get(user, pos, format, false, p, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_remove(int id, QString& err) { std::string error; int ret = MCL.policy_remove(user, id, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_save(int pos, QString& err) { std::string error; int ret = MCL.policy_save(user, pos, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_dump(int pos, std::string& memory, QString& err) { std::string error; int ret = MCL.policy_dump(user, pos, false, memory, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_get_name(int pos, std::string& name, QString& err) { std::string error; int ret = MCL.policy_get_name(user, pos, name, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_export(int pos, QString& err) { std::string error; std::string policy; if (MCL.policy_dump(user, pos, false, policy, error) < 0) { err = QString().fromUtf8(error.c_str(), error.size()); return -1; } std::string p_name; if (MCL.policy_get_name(user, pos, p_name, error) < 0) { err = QString().fromUtf8(error.c_str(), error.size()); return -1; } int ret = policy_export_data(QString().fromUtf8(policy.c_str(), policy.length()), QString().fromUtf8(p_name.c_str(), p_name.length()), err); return ret; } //--------------------------------------------------------------------------- int MainWindow::policy_export_data(const QString& policy, const QString& p_name, QString& err) { QString suggested = QString().fromUtf8(select_correct_save_policy_path().c_str()); suggested += "/" + p_name + ".xml"; QString filename = QFileDialog::getSaveFileName(this, tr("Save Policy"), suggested, tr("XML (*.xml)")); if (!filename.length()) { err = "No file name selected."; return -1; } QDir info(QFileInfo(filename).absoluteDir()); set_last_save_policy_path(info.absolutePath().toUtf8().data()); QFile file(filename); if (file.open(QIODevice::ReadWrite | QIODevice::Truncate)) { QTextStream stream(&file); stream << policy; } else { err = "Cannot write to file."; return -1; } return 0; } //--------------------------------------------------------------------------- int MainWindow::clear_policies(QString& err) { std::string error; int ret = MCL.policy_clear_policies(user, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- size_t MainWindow::get_policies_count(QString& err) const { std::string error; int ret = MCL.policy_get_policies_count(user, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); return ret; } //--------------------------------------------------------------------------- int MainWindow::select_correct_policy() { // Policy std::string policy = uisettings.get_default_policy(); if (policy == "last") policy = uisettings.get_last_policy(); if (!policy.length()) return -1; return QString().fromUtf8(policy.c_str(), policy.length()).toInt(); } //--------------------------------------------------------------------------- int MainWindow::select_correct_display() { // Display std::string display = uisettings.get_default_display(); if (display == "last") display = uisettings.get_last_display(); return get_display_index_by_filename(display); } //--------------------------------------------------------------------------- int MainWindow::select_correct_verbosity() { // Verbosity int verbosity = uisettings.get_default_verbosity(); if (verbosity == -1) verbosity = uisettings.get_last_verbosity(); return verbosity; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_save_report_path() { // Save report path std::string path = uisettings.get_default_save_report_path(); if (!path.length() || path == "last") path = uisettings.get_last_save_report_path(); return path; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_save_policy_path() { // Save policy path std::string path = uisettings.get_default_save_policy_path(); if (!path.length() || path == "last") path = uisettings.get_last_save_policy_path(); return path; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_save_display_path() { // Save display path std::string path = uisettings.get_default_save_display_path(); if (!path.length() || path == "last") path = uisettings.get_last_save_display_path(); return path; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_load_files_path() { // Load files path std::string path = uisettings.get_default_load_files_path(); if (!path.length() || path == "last") path = uisettings.get_last_load_files_path(); return path; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_load_policy_path() { // Load policy path std::string path = uisettings.get_default_load_policy_path(); if (!path.length() || path == "last") path = uisettings.get_last_load_policy_path(); return path; } //--------------------------------------------------------------------------- std::string MainWindow::select_correct_load_display_path() { // Load display path std::string path = uisettings.get_default_load_display_path(); if (!path.length() || path == "last") path = uisettings.get_last_load_display_path(); return path; } //--------------------------------------------------------------------------- void MainWindow::set_last_save_report_path(const std::string& path) { // Save report path uisettings.change_last_save_report_path(path); } //--------------------------------------------------------------------------- void MainWindow::set_last_save_policy_path(const std::string& path) { // Save policy path uisettings.change_last_save_policy_path(path); } //--------------------------------------------------------------------------- void MainWindow::set_last_save_display_path(const std::string& path) { // Save display path uisettings.change_last_save_display_path(path); } //--------------------------------------------------------------------------- void MainWindow::set_last_load_policy_path(const std::string& path) { // Save report path uisettings.change_last_load_policy_path(path); } //--------------------------------------------------------------------------- void MainWindow::set_last_load_files_path(const std::string& path) { // Save report path uisettings.change_last_load_files_path(path); } //--------------------------------------------------------------------------- void MainWindow::set_last_load_display_path(const std::string& path) { // Save report path uisettings.change_last_load_display_path(path); } //--------------------------------------------------------------------------- int MainWindow::analyze(const std::vector& files, bool with_fixer, bool force, const std::vector& opt, std::vector& files_id, std::string& err) { std::vector plugins; std::vector > options; if (with_fixer) { options.push_back(std::make_pair("File_TryToFix", "1")); force = true; } for (size_t i = 0; i + 1 < opt.size();) { if (opt[i] != "File_TryToFix") options.push_back(std::make_pair(opt[i], opt[i + 1])); i += 2; } return MCL.checker_analyze(user, files, plugins, options, files_id, err, force); } //--------------------------------------------------------------------------- int MainWindow::is_analyze_finished(const std::vector& files, std::vector& res, std::string& err) { std::vector files_id; for (size_t i = 0; ; ) { long id = workerfiles.get_id_from_registered_file(files[i]); if (id < 0) return -1; files_id.push_back(id); } return MCL.checker_status(user, files_id, res, err); } //--------------------------------------------------------------------------- int MainWindow::is_analyze_finished(const std::string& file, MediaConchLib::Checker_StatusRes& res, std::string& err) { long id = workerfiles.get_id_from_registered_file(file); if (id < 0) return -1; return MCL.checker_status(user, id, res, err); } //--------------------------------------------------------------------------- int MainWindow::validate(MediaConchLib::report report, const std::vector& files, const std::vector& policies_ids, const std::vector& policies_contents, const std::map& options, std::vector& result, std::string& err) { std::vector files_id; for (size_t i = 0; ; ) { long id = workerfiles.get_id_from_registered_file(files[i]); if (id < 0) return -1; files_id.push_back(id); } return MCL.checker_validate(user, report, files_id, policies_ids, policies_contents, options, result, err); } //--------------------------------------------------------------------------- int MainWindow::validate(MediaConchLib::report report, const std::string& file, const std::vector& policies_ids, const std::vector& policies_contents, const std::map& options, std::vector& result, std::string& err) { std::vector files_id; long id = workerfiles.get_id_from_registered_file(file); if (id < 0) return -1; files_id.push_back(id); return MCL.checker_validate(user, report, files_id, policies_ids, policies_contents, options, result, err); } //--------------------------------------------------------------------------- int MainWindow::validate_policy(long file_id, size_t policy_id, std::vector& result, std::string& err) { std::vector files_id; files_id.push_back(file_id); std::vector policies_ids; policies_ids.push_back(policy_id); std::vector policies_contents; std::map options; return MCL.checker_validate(user, MediaConchLib::report_Max, files_id, policies_ids, policies_contents, options, result, err); } //--------------------------------------------------------------------------- int MainWindow::checker_clear(long id, QString& err) { std::string error; std::vector files; files.push_back(id); int ret = MCL.checker_clear(user, files, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); else remove_file_to_list(id); return ret; } //--------------------------------------------------------------------------- int MainWindow::checker_clear(QString& err) { std::string error; std::vector files; int ret = MCL.checker_clear(user, files, error); if (ret < 0) err = QString().fromUtf8(error.c_str(), error.size()); else remove_all_files_to_list(); return ret; } //--------------------------------------------------------------------------- void MainWindow::checker_stop(const std::vector& ids) { std::string error; MCL.checker_stop(user, ids, error); } //--------------------------------------------------------------------------- int MainWindow::checker_file_from_id(long id, std::string& file, std::string& err) { return MCL.checker_file_from_id(user, id, file, err); } //--------------------------------------------------------------------------- int MainWindow::checker_file_information(long id, MediaConchLib::Checker_FileInfo& file, std::string& err) { return MCL.checker_file_information(user, id, file, err); } //--------------------------------------------------------------------------- int MainWindow::get_mediainfo_output_list(std::string& output, std::string& err) { return MCL.mil_get_output_list(output, err); } //--------------------------------------------------------------------------- QString MainWindow::get_mediainfo_and_mediatrace_xml(long file_id, const std::string& display_name, const std::string& display_content, std::string& err) { CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_Xml; cr.report_set.set(MediaConchLib::report_MediaInfo); cr.report_set.set(MediaConchLib::report_MediaTrace); std::string d_name = display_name; std::string d_content = display_content; cr.display_name = d_name.size() ? &d_name : NULL; cr.display_content = d_content.size() ? &d_content : NULL; MCL.checker_get_report(cr, &result, err); return QString().fromUtf8(result.report.c_str(), result.report.length()); } //--------------------------------------------------------------------------- QString MainWindow::get_mediainfo_report(long file_id, const std::string& display_name, const std::string& display_content, const std::string& mi_inform, std::string& err) { CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_Xml; cr.report_set.set(MediaConchLib::report_MediaInfo); std::string d_name = display_name; std::string d_content = display_content; std::string m_inform = mi_inform; cr.display_name = d_name.size() ? &d_name : NULL; cr.display_content = d_content.size() ? &d_content : NULL; cr.mi_inform = m_inform.size() ? &m_inform : NULL; MCL.checker_get_report(cr, &result, err); return QString().fromUtf8(result.report.c_str(), result.report.length()); } //--------------------------------------------------------------------------- QString MainWindow::get_mediainfo_jstree(long file_id, std::string& err) { CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_JsTree; cr.report_set.set(MediaConchLib::report_MediaInfo); MCL.checker_get_report(cr, &result, err); return QString().fromUtf8(result.report.c_str(), result.report.length()); } //--------------------------------------------------------------------------- QString MainWindow::get_mediatrace_xml(long file_id, const std::string& display_name, const std::string& display_content, std::string& err) { CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_Xml; cr.report_set.set(MediaConchLib::report_MediaTrace); std::string d_name = display_name; std::string d_content = display_content; cr.display_name = d_name.size() ? &d_name : NULL; cr.display_content = d_content.size() ? &d_content : NULL; MCL.checker_get_report(cr, &result, err); return QString().fromUtf8(result.report.c_str(), result.report.length()); } //--------------------------------------------------------------------------- QString MainWindow::get_mediatrace_jstree(long file_id, std::string& err) { CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_JsTree; cr.report_set.set(MediaConchLib::report_MediaTrace); MCL.checker_get_report(cr, &result, err); return QString().fromUtf8(result.report.c_str(), result.report.length()); } //--------------------------------------------------------------------------- void MainWindow::get_implementation_report(long file_id, QString& report, std::string& err, int *display_p, int *verbosity) { FileRegistered *fr = get_file_registered_from_id(file_id); if (!fr) return; if (!fr->analyzed) { delete fr; return; } CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_Xml; cr.report_set.set(fr->report_kind); std::string display_content; std::string display_name; fill_display_used(display_p, display_name, display_content, cr.display_name, cr.display_content, fr); fill_options_for_report(cr.options, verbosity); MCL.checker_get_report(cr, &result, err); report = QString().fromUtf8(result.report.c_str(), result.report.length()); delete fr; } //--------------------------------------------------------------------------- int MainWindow::validate_policy(long file_id, QString& report, std::string& err, int policy, int *display_p) { FileRegistered* fr = get_file_registered_from_id(file_id); if (!fr) return -1; if (!fr->analyzed) { delete fr; return -1; } if (policy == -1) { if (fr->policy == -1) { delete fr; return -1; } policy = fr->policy; } CheckerReport cr; MediaConchLib::Checker_ReportRes result; cr.user = user; cr.files.push_back(file_id); cr.format = MediaConchLib::format_Xml; std::string display_content; std::string display_name; fill_display_used(display_p, display_name, display_content, cr.display_name, cr.display_content, fr); delete fr; cr.policies_ids.push_back(policy); if (MCL.checker_get_report(cr, &result, err) < 0) return 0; report = QString().fromUtf8(result.report.c_str(), result.report.length()); if (!result.has_valid) return 1; if (result.valid) return 1; return 0; } //--------------------------------------------------------------------------- void MainWindow::checker_list(std::vector& files, QString& error) { std::string err; std::vector list; if (MCL.checker_list(user, list, err) < 0) error = QString().fromUtf8(err.c_str(), err.size()); else { for (size_t i = 0; i < list.size(); ++i) files.push_back(list[i]); } } //--------------------------------------------------------------------------- FileRegistered* MainWindow::get_file_registered_from_file(const std::string& file) { return workerfiles.get_file_registered_from_file(file); } //--------------------------------------------------------------------------- FileRegistered* MainWindow::get_file_registered_from_id(long id) { return workerfiles.get_file_registered_from_id(id); } //--------------------------------------------------------------------------- std::string MainWindow::get_filename_from_registered_file_id(long file_id) { return workerfiles.get_filename_from_registered_file_id(file_id); } //--------------------------------------------------------------------------- void MainWindow::fill_display_used(int *display_p, std::string&, std::string& display_content, std::string*& dname, std::string*& dcontent, FileRegistered* fr) { if (display_p) { if (*display_p >= 0 && (size_t)*display_p < displays_list.size()) { QFile display_xsl(displays_list[*display_p]); display_xsl.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray xsl = display_xsl.readAll(); display_xsl.close(); display_content = xsl.data(); } else display_content = std::string(implementation_report_display_html_xsl); } else if (fr && fr->display > 0 && (size_t)fr->display < displays_list.size()) { QFile display_xsl(displays_list[fr->display]); display_xsl.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray xsl = display_xsl.readAll(); display_xsl.close(); display_content = QString(xsl).toUtf8().data(); } else display_content = std::string(implementation_report_display_html_xsl); dcontent = &display_content; dname = NULL; } //--------------------------------------------------------------------------- int MainWindow::get_ui_database_path(std::string& path) { return MCL.get_ui_database_path(path); } //--------------------------------------------------------------------------- void MainWindow::get_version(std::string& v) { v = version; } //--------------------------------------------------------------------------- void MainWindow::create_and_configure_ui_database() { #ifdef HAVE_SQLITE std::string db_path; if (get_ui_database_path(db_path) < 0) { db_path = Core::get_local_data_path(); QDir f(QString().fromUtf8(db_path.c_str(), db_path.length())); if (!f.exists()) db_path = "."; } db = new SQLLiteUi; db->set_database_directory(db_path); db->set_database_filename(database_filename); if (db->init_ui() < 0) { const std::vector& errors = db->get_errors(); std::string error; for (size_t i = 0; i < errors.size(); ++i) { if (i) error += " "; error += errors[i]; } QString msg = QString().fromUtf8(error.c_str(), error.length()); set_msg_to_status_bar(msg); delete db; db = NULL; } #endif if (!db) { db = new NoDatabaseUi; db->init_ui(); } } //--------------------------------------------------------------------------- void MainWindow::fill_options_for_report(std::map& opts, int *verbosity_p) { std::string verbosity = QString().setNum(uisettings.get_default_verbosity()).toUtf8().data(); if (verbosity_p && *verbosity_p != -1) verbosity = QString().setNum(*verbosity_p).toUtf8().data(); if (verbosity.length()) { if (verbosity == "-1") opts["verbosity"] = "5"; else opts["verbosity"] = verbosity; } } } MediaConch/Source/GUI/Qt/NoDatabaseUi.h0000644000000000000000000001242313216666133016477 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // NoDatabase functions // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //--------------------------------------------------------------------------- #ifndef NODATABASEUIH #define NODATABASEUIH //--------------------------------------------------------------------------- #include "DatabaseUi.h" //--------------------------------------------------------------------------- namespace MediaConch { class FileRegistered; //*************************************************************************** // Class NoDatabase //*************************************************************************** class NoDatabaseUi : public DatabaseUi { public: //Constructor/Destructor NoDatabaseUi(); virtual ~NoDatabaseUi(); // General virtual int init(); virtual int init_ui(); // UI Settings virtual int ui_settings_save_default_policy(const std::string&, int user_id = -1); virtual int ui_settings_get_default_policy(std::string&, int user_id = -1); virtual int ui_settings_save_last_policy(const std::string&, int user_id = -1); virtual int ui_settings_get_last_policy(std::string&, int user_id = -1); virtual int ui_settings_save_default_display(const std::string&, int user_id = -1); virtual int ui_settings_get_default_display(std::string&, int user_id = -1); virtual int ui_settings_save_last_display(const std::string&, int user_id = -1); virtual int ui_settings_get_last_display(std::string&, int user_id = -1); virtual int ui_settings_save_default_verbosity(int, int user_id = -1); virtual int ui_settings_get_default_verbosity(int&, int user_id = -1); virtual int ui_settings_save_last_verbosity(int, int user_id = -1); virtual int ui_settings_get_last_verbosity(int&, int user_id = -1); virtual int ui_settings_save_default_load_files_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_files_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_files_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_files_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_load_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_load_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_report_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_report_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_report_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_report_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_mco_token(const std::string&, int user_id=-1); virtual int ui_settings_get_mco_token(std::string&, int user_id = -1); // UI virtual int ui_add_file(const FileRegistered* file); virtual int ui_add_files(const std::vector& files); virtual int ui_update_file(const FileRegistered* file); virtual int ui_update_files(const std::vector& files); virtual int ui_get_file(FileRegistered* file); virtual int ui_remove_file(const FileRegistered* file); virtual int ui_remove_files(const std::vector& files); virtual int ui_remove_all_files(); virtual void ui_get_elements(std::vector& vec); virtual int ui_reset_file_for_reload(FileRegistered* file); protected: virtual int execute(); private: NoDatabaseUi (const NoDatabaseUi&); NoDatabaseUi& operator=(const NoDatabaseUi&); }; } #endif /* !NODATABASEUIH */ MediaConch/Source/GUI/Qt/publicpolicieswindow.h0000644000000000000000000000276113216666133020442 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef PUBLICPOLICIESWINDOW_H #define PUBLICPOLICIESWINDOW_H #include #include #include "WebChoose.h" #include "commonwebwindow.h" class QVBoxLayout; class QLabel; class QTreeWidgetItem; class QFile; class QStringList; class QFrame; namespace MediaConch { class PublicPoliciesWindow : public CommonWebWindow { public: explicit PublicPoliciesWindow(MainWindow *parent = 0); virtual ~PublicPoliciesWindow(); //*************************************************************************** // HELPER //*************************************************************************** void display_public_policies(); //*************************************************************************** // WEB //*************************************************************************** void change_qt_scripts_in_template(QString& html); void set_webmachine_script_in_template(QString& html); void remove_result_in_template(QString& html); void change_checker_in_template(const QString& policy, QString& html); void create_html_base(const QString& policy, QString& base); void create_html_policy(QString& policy); void create_html(QString &html); }; } #endif // PUBLICPOLICIESWINDOW_H MediaConch/Source/GUI/Qt/WebKitView.cpp0000644000000000000000000000425313216666133016555 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "WebChoose.h" #if defined(WEB_MACHINE_KIT) #include #include #include #include "WebView.h" #include "WebPage.h" #include "mainwindow.h" #if defined(__APPLE__) && QT_VERSION < 0x050400 #include #endif namespace MediaConch { WebView::WebView(QWidget *parent) : QWebView(parent), mainwindow((MainWindow*)parent) { setAcceptDrops(true); setContextMenuPolicy(Qt::CustomContextMenu); } WebView::~WebView() { stop(); QWebPage* wpage = page(); if (wpage) { delete wpage; wpage = NULL; } } void WebView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) event->acceptProposedAction(); } void WebView::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { QList urls=event->mimeData()->urls(); QStringList files; for (int i = 0; i < urls.size(); ++i) { QString filename; #if defined(__APPLE__) && QT_VERSION < 0x050400 if (urls[i].url().startsWith("file:///.file/id=")) { CFErrorRef error = 0; CFURLRef cfurl = urls[i].toCFURL(); CFURLRef absurl = CFURLCreateFilePathURL(kCFAllocatorDefault, cfurl, &error); if(error) continue; filename = QUrl::fromCFURL(absurl).toLocalFile(); CFRelease(cfurl); CFRelease(absurl); } else #endif { filename = urls[i].toLocalFile(); } files << filename; } mainwindow->drag_and_drop_files_action(files); } } } #endif MediaConch/Source/GUI/Qt/workerfiles.cpp0000644000000000000000000006452713216666133017103 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "workerfiles.h" #include "mainwindow.h" #include "Common/FileRegistered.h" #include "DatabaseUi.h" #include #include #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** //--------------------------------------------------------------------------- WorkerFiles::WorkerFiles(MainWindow* m) : QThread(), mainwindow(m), db(NULL), timer(NULL), file_index(0) { } //--------------------------------------------------------------------------- WorkerFiles::~WorkerFiles() { if (timer) { timer->stop(); delete timer; timer = NULL; } } //--------------------------------------------------------------------------- void WorkerFiles::set_database(DatabaseUi* database) { db = database; } //--------------------------------------------------------------------------- void WorkerFiles::run() { timer = new QTimer(0); timer->moveToThread(this); timer->setSingleShot(true); connect(timer, SIGNAL(timeout()), this, SLOT(update_files_registered()), Qt::DirectConnection); timer->start(1000); //TODO exec(); if (timer) { timer->stop(); delete timer; timer = NULL; } } //*************************************************************************** // Functions //*************************************************************************** //--------------------------------------------------------------------------- FileRegistered* WorkerFiles::get_file_registered_from_file(const std::string& file) { FileRegistered* fr = NULL; working_files_mutex.lock(); if (working_files.find(file) != working_files.end() && working_files[file]) fr = new FileRegistered(*working_files[file]); working_files_mutex.unlock(); return fr; } //--------------------------------------------------------------------------- FileRegistered* WorkerFiles::get_file_registered_from_id(long id) { FileRegistered* fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; if (it->second->file_id == id) { fr = new FileRegistered(*it->second); break; } } working_files_mutex.unlock(); return fr; } //--------------------------------------------------------------------------- long WorkerFiles::get_id_from_registered_file(const std::string& file) { long id = -1; working_files_mutex.lock(); if (working_files.find(file) != working_files.end() && working_files[file]) id = working_files[file]->file_id; working_files_mutex.unlock(); return id; } //--------------------------------------------------------------------------- std::string WorkerFiles::get_filename_from_registered_file_id(long file_id) { std::string filename; working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; if (it->second->file_id == file_id) { filename = it->second->filename; break; } } working_files_mutex.unlock(); return filename; } //--------------------------------------------------------------------------- void WorkerFiles::get_registered_files(std::map& files) { working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; files[it->first] = new FileRegistered(*it->second); } working_files_mutex.unlock(); } //--------------------------------------------------------------------------- int WorkerFiles::add_file_to_list(const std::string& file, const std::string& path, int policy, int display, int verbosity, bool fixer, bool force, bool create_policy, const std::vector& options, std::string& err) { std::string full_file(path); #ifdef WINDOWS if (full_file.size() && full_file[full_file.size() - 1] != '/' && full_file[full_file.size() - 1] != '\\') full_file += "/"; #else if (full_file.length()) full_file += "/"; #endif full_file += file; bool exists = false; FileRegistered *fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.find(full_file); if (it != working_files.end() && it->second) { exists = true; bool same_options = true; for (size_t i = 0; i < it->second->options.size(); ++i) { size_t j = 0; for (; j < options.size(); ++j) if (options[j] == it->second->options[i]) break; if (j == options.size()) { same_options = false; break; } } // nothing to do if (!force && !create_policy && same_options && policy == it->second->policy && display == it->second->display && verbosity == it->second->verbosity) { working_files_mutex.unlock(); return 0; } else fr = new FileRegistered; if (!force) fr->analyzed = working_files[full_file]->analyzed; } else fr = new FileRegistered; working_files_mutex.unlock(); // Keep the old index for the same file if (exists) { fr->index = working_files[full_file]->index; fr->file_id = working_files[full_file]->file_id; } else fr->index = file_index++; fr->filename = file; fr->filepath = path; fr->policy = policy; fr->display = display; fr->verbosity = verbosity; fr->create_policy = create_policy; for (size_t i = 0; i < options.size(); ++i) fr->options.push_back(options[i]); working_files_mutex.lock(); if (exists) delete working_files[full_file]; working_files[full_file] = fr; working_files_mutex.unlock(); unfinished_files_mutex.lock(); unfinished_files.push_back(full_file); unfinished_files_mutex.unlock(); if (!force && exists) { to_update_files_mutex.lock(); to_update_files[full_file] = new FileRegistered(*fr); to_update_files_mutex.unlock(); return 0; } std::vector vec; vec.push_back(full_file); int ret; std::vector files_id; if ((ret = mainwindow->analyze(vec, fixer, force, options, files_id, err)) < 0) { mainwindow->set_str_msg_to_status_bar(err); return -1; } if (files_id.size() != 1) { err = "Internal error: analyze result is not correct, no id returned."; return -1; } fr->file_id = files_id[0]; to_add_files_mutex.lock(); to_add_files[full_file] = new FileRegistered(*fr); to_add_files_mutex.unlock(); working_files_mutex.lock(); working_files[full_file]->file_id = files_id[0]; working_files_mutex.unlock(); return 0; } //--------------------------------------------------------------------------- int WorkerFiles::add_file_to_list(long id, const std::string& full_file, const std::string& filepath, const std::string& filename, std::string&) { FileRegistered *fr = NULL; working_files_mutex.lock(); if (working_files.find(full_file) != working_files.end() && working_files[full_file]) { working_files_mutex.unlock(); return 1; } else fr = new FileRegistered; working_files_mutex.unlock(); // Keep the old index for the same file fr->file_id = id; fr->index = file_index++; fr->filename = filename; fr->filepath = filepath; fr->policy = -1; fr->display = -1; fr->verbosity = 5; fr->create_policy = false; working_files_mutex.lock(); working_files[full_file] = fr; working_files_mutex.unlock(); unfinished_files_mutex.lock(); unfinished_files.push_back(full_file); unfinished_files_mutex.unlock(); to_add_files_mutex.lock(); to_add_files[full_file] = new FileRegistered(*fr); to_add_files_mutex.unlock(); return 0; } //--------------------------------------------------------------------------- int WorkerFiles::add_attachment_to_list(const std::string& file, int policy, int display, int verbosity, const std::vector& options, std::string& err) { bool exists = false; FileRegistered *fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.find(file); if (it != working_files.end() && it->second) { exists = true; bool same_options = true; for (size_t i = 0; i < it->second->options.size(); ++i) { size_t j = 0; for (; j < options.size(); ++j) if (options[j] == it->second->options[i]) break; if (j == options.size()) { same_options = false; break; } } // nothing to do if (same_options && policy == it->second->policy && display == it->second->display && verbosity == it->second->verbosity) { working_files_mutex.unlock(); return 0; } else fr = new FileRegistered; fr->analyzed = it->second->analyzed; } else fr = new FileRegistered; working_files_mutex.unlock(); // Keep the old index for the same file if (exists) { fr->index = working_files[file]->index; fr->file_id = working_files[file]->file_id; } else fr->index = file_index++; fr->filename = file; fr->filepath = ""; fr->policy = policy; fr->display = display; fr->verbosity = verbosity; fr->create_policy = false; for (size_t i = 0; i < options.size(); ++i) fr->options.push_back(options[i]); working_files_mutex.lock(); if (exists) delete working_files[file]; working_files[file] = fr; working_files_mutex.unlock(); unfinished_files_mutex.lock(); unfinished_files.push_back(file); unfinished_files_mutex.unlock(); if (exists) { to_update_files_mutex.lock(); to_update_files[file] = new FileRegistered(*fr); to_update_files_mutex.unlock(); return 0; } std::vector vec; vec.push_back(file); int ret; std::vector files_id; if ((ret = mainwindow->analyze(vec, false, false, options, files_id, err)) < 0) { mainwindow->set_str_msg_to_status_bar(err); return -1; } if (files_id.size() != 1) { err = "Internal error: analyze result is not correct, no id returned."; return -1; } fr->file_id = files_id[0]; working_files_mutex.lock(); working_files[file]->file_id = files_id[0]; working_files_mutex.unlock(); return 0; } //--------------------------------------------------------------------------- int WorkerFiles::update_policy_of_file_registered_from_file(long file_id, long policy, std::string& error) { std::string file; FileRegistered* fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second || it->second->file_id != file_id) continue; file = it->first; fr = it->second; break; } if (!fr) { // file is not existing error = "File not reachable"; working_files_mutex.unlock(); return -1; } fr->policy = policy; bool policy_valid = false; if (!fr->analyzed) { error = "File not analyzed"; working_files_mutex.unlock(); return -1; } working_files_mutex.unlock(); if (policy >= 0) { std::vector policies_ids; std::vector policies_contents; std::vector res; std::map options; policies_ids.push_back(policy); if (mainwindow->validate(MediaConchLib::report_Max, file, policies_ids, policies_contents, options, res, error) < 0) return -1; if (res.size() == 1) { policy_valid = res[0]->valid; for (size_t j = 0; j < res.size() ; ++j) delete res[j]; res.clear(); } } working_files_mutex.lock(); working_files[file]->policy_valid = policy_valid; FileRegistered tmp = *working_files[file]; working_files_mutex.unlock(); to_update_files_mutex.lock(); to_update_files[file] = new FileRegistered(tmp); to_update_files_mutex.unlock(); return 0; } //--------------------------------------------------------------------------- void WorkerFiles::clear_files() { working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; delete it->second; } working_files.clear(); working_files_mutex.unlock(); remove_all_registered_file_from_db(); } //--------------------------------------------------------------------------- void WorkerFiles::update_files_registered() { if (timer) { delete timer; timer = NULL; } update_unfinished_files(); update_add_files_registered(); update_delete_files_registered(); update_update_files_registered(); timer = new QTimer(0); timer->moveToThread(this); timer->setSingleShot(true); connect(timer, SIGNAL(timeout()), this, SLOT(update_files_registered()), Qt::DirectConnection); timer->start(1000); //TODO } //--------------------------------------------------------------------------- void WorkerFiles::update_add_files_registered() { std::vector vec; to_add_files_mutex.lock(); if (to_add_files.size()) { std::map::iterator it = to_add_files.begin(); for (; it != to_add_files.end(); ++it) vec.push_back(it->second); to_add_files.clear(); } to_add_files_mutex.unlock(); if (!vec.size()) return; add_registered_files_to_db(vec); for (size_t i = 0; i < vec.size(); ++i) delete vec[i]; vec.clear(); } //--------------------------------------------------------------------------- void WorkerFiles::update_update_files_registered() { std::vector vec; to_update_files_mutex.lock(); if (to_update_files.size()) { std::map::iterator it = to_update_files.begin(); for (; it != to_update_files.end(); ++it) { if (!it->second) continue; vec.push_back(it->second); if (it->second->create_policy) mainwindow->create_policy_from_file(it->second); } to_update_files.clear(); } to_update_files_mutex.unlock(); if (!vec.size()) return; update_registered_files_in_db(vec); for (size_t i = 0; i < vec.size(); ++i) delete vec[i]; vec.clear(); } //--------------------------------------------------------------------------- void WorkerFiles::update_delete_files_registered() { std::vector vec; std::vector ids; to_delete_files_mutex.lock(); if (to_delete_files.size()) { std::map::iterator it = to_delete_files.begin(); for (; it != to_delete_files.end(); ++it) { vec.push_back(it->second); if (it->second) ids.push_back(it->second->file_id); } to_delete_files.clear(); } to_delete_files_mutex.unlock(); if (!vec.size()) return; remove_registered_files_from_db(vec); mainwindow->checker_stop(ids); for (size_t i = 0; i < vec.size(); ++i) delete vec[i]; vec.clear(); } //--------------------------------------------------------------------------- void WorkerFiles::update_unfinished_files() { std::string err; unfinished_files_mutex.lock(); std::vector files = unfinished_files; unfinished_files_mutex.unlock(); std::vector vec; for (size_t i = 0; i < files.size(); ++i) { FileRegistered* fr = get_file_registered_from_file(files[i]); if (!fr) { vec.push_back(files[i]); continue; } MediaConchLib::Checker_StatusRes st_res; int ret = mainwindow->is_analyze_finished(files[i], st_res, err); if (ret < 0) { mainwindow->set_str_msg_to_status_bar(err); continue; } fr->analyzed = st_res.finished; if (st_res.finished) { fr->report_kind = MediaConchLib::report_MediaConch; if (st_res.tool) fr->report_kind = *st_res.tool; for (size_t x = 0; x < st_res.generated_id.size(); ++x) fr->generated_id.push_back(st_res.generated_id[x]); std::vector policies_ids; std::vector policies_contents; std::map options; std::vector res; if (mainwindow->validate((MediaConchLib::report)fr->report_kind, files[i], policies_ids, policies_contents, options, res, err) < 0) { mainwindow->set_str_msg_to_status_bar(err); continue; } else if (!res.size()) { mainwindow->set_str_msg_to_status_bar("Internal error: Validate result is not correct."); continue; } fr->implementation_valid = res[0]->valid; for (size_t j = 0; j < res.size(); ++j) delete res[j]; res.clear(); if (fr->policy >= 0) { policies_ids.push_back(fr->policy); if (mainwindow->validate(MediaConchLib::report_Max, files[i], policies_ids, policies_contents, options, res, err) < 0) continue; if (!res.size()) continue; fr->policy_valid = res[0]->valid; for (size_t j = 0; j < res.size(); ++j) delete res[j]; res.clear(); } } else { fr->analyze_percent = 0.0; if (st_res.percent) fr->analyze_percent = *st_res.percent; vec.push_back(files[i]); } to_update_files_mutex.lock(); if (to_update_files.find(files[i]) != to_update_files.end()) { delete to_update_files[files[i]]; to_update_files[files[i]] = new FileRegistered(*fr); } else to_update_files[files[i]] = new FileRegistered(*fr); to_update_files_mutex.unlock(); working_files_mutex.lock(); if (working_files.find(files[i]) != working_files.end()) { delete working_files[files[i]]; working_files[files[i]] = fr; } else delete fr; working_files_mutex.unlock(); } unfinished_files_mutex.lock(); if (files.size() != unfinished_files.size()) { for (size_t i = 0; i < unfinished_files.size(); ++i) { size_t j = 0; for (; j < files.size(); ++j) if (files[j] == unfinished_files[i]) break; if (j == files.size()) vec.push_back(unfinished_files[i]); } } unfinished_files = vec; unfinished_files_mutex.unlock(); } //--------------------------------------------------------------------------- void WorkerFiles::remove_file_registered_from_id(long file_id) { std::string file; FileRegistered *fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; if (it->second->file_id == file_id) { fr = it->second; file = it->first; it->second = NULL; working_files.erase(it); break; } } working_files_mutex.unlock(); if (!fr) return; to_delete_files_mutex.lock(); to_delete_files[file] = fr; to_delete_files_mutex.unlock(); } //--------------------------------------------------------------------------- void WorkerFiles::remove_all_files_registered() { std::string file; FileRegistered *fr = NULL; working_files_mutex.lock(); std::map::iterator it = working_files.begin(); for (; it != working_files.end(); ++it) { if (!it->second) continue; fr = it->second; file = it->first; it->second = NULL; to_delete_files_mutex.lock(); to_delete_files[file] = fr; to_delete_files_mutex.unlock(); } working_files.clear(); working_files_mutex.unlock(); } //--------------------------------------------------------------------------- void WorkerFiles::add_registered_file_to_db(const FileRegistered* file) { if (!db) return; db->ui_add_file(file); } //--------------------------------------------------------------------------- void WorkerFiles::add_registered_files_to_db(const std::vector& files) { if (!db) return; for (size_t i = 0; i < files.size();) { std::vector tmp; size_t j = 0; for (; j < 50 && i + j < files.size(); ++j) tmp.push_back(files[i + j]); db->ui_add_files(tmp); i += j; } } //--------------------------------------------------------------------------- void WorkerFiles::update_registered_file_in_db(const FileRegistered* file) { if (!db) return; db->ui_update_file(file); } //--------------------------------------------------------------------------- void WorkerFiles::update_registered_files_in_db(const std::vector& files) { if (!db) return; db->ui_update_files(files); } //--------------------------------------------------------------------------- void WorkerFiles::remove_registered_file_from_db(const FileRegistered* file) { if (!db) return; db->ui_remove_file(file); } //--------------------------------------------------------------------------- void WorkerFiles::remove_registered_files_from_db(const std::vector& files) { if (!db) return; db->ui_remove_files(files); } //--------------------------------------------------------------------------- void WorkerFiles::remove_all_registered_file_from_db() { if (!db) return; db->ui_remove_all_files(); } //--------------------------------------------------------------------------- void WorkerFiles::get_registered_file_from_db(FileRegistered* file) { if (!db || !file) return; db->ui_get_file(file); } //--------------------------------------------------------------------------- void WorkerFiles::fill_registered_files_from_db() { if (!db) return; std::vector vec; db->ui_get_elements(vec); std::vector files; working_files_mutex.lock(); for (size_t i = 0; i < vec.size(); ++i) { std::string err2; QString err; FileRegistered *fr = vec[i]; std::string full_file(fr->filepath); #ifdef WINDOWS if (full_file.size() && full_file[full_file.size() - 1] != '/' && full_file[full_file.size() - 1] != '\\') full_file += "/"; #else if (full_file.length()) full_file += "/"; #endif full_file += fr->filename; //check if policy still exists MediaConchLib::Get_Policy p; if (fr->policy != -1 && mainwindow->policy_get(fr->policy, "JSON", p, err) < 0) { mainwindow->set_msg_to_status_bar(err); fr->policy = -1; } fr->index = file_index++; fr->analyzed = false; working_files[full_file] = fr; files.push_back(full_file); std::vector tmp; tmp.push_back(full_file); int ret; std::vector files_id; if ((ret = mainwindow->analyze(tmp, false, false, fr->options, files_id, err2)) < 0) mainwindow->set_str_msg_to_status_bar(err2); else if (!files_id.size()) mainwindow->set_str_msg_to_status_bar("Internal error: Analyze result is not correct."); else fr->file_id = files_id[0]; } working_files_mutex.unlock(); unfinished_files_mutex.lock(); for (size_t i = 0; i < files.size(); ++i) unfinished_files.push_back(files[i]); unfinished_files_mutex.unlock(); } } MediaConch/Source/GUI/Qt/commonwebwindow.cpp0000644000000000000000000000406613216666133017755 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "commonwebwindow.h" #include "mainwindow.h" #include "WebView.h" #include "WebPage.h" #include "progressbar.h" #include #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** CommonWebWindow::CommonWebWindow(MainWindow *p) : main_window(p) { } CommonWebWindow::~CommonWebWindow() { } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- void CommonWebWindow::display_html() { QFile template_html(":/base.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QString html(template_html.readAll()); template_html.close(); create_html(html); QUrl url; #if QT_VERSION < 0x050700 url = QUrl("qrc:/html"); //Without it, it works sometimes, depending of engine and version, so let it as before for Qt<5.7 as it is always working for Qt<5.7 and never for Qt>=5.7 if (!url.isValid()) return; #endif main_window->web_view->setHtml(html.toUtf8()); #if defined(WEB_MACHINE_ENGINE) main_window->web_view->setHtml(html.toUtf8(), url); #endif #if defined(WEB_MACHINE_KIT) main_window->web_view->setContent(html.toUtf8(), "text/html", url); //If we use setHtml(), HTML is parsed with local codepage instead of UTF-8 #endif } //--------------------------------------------------------------------------- void CommonWebWindow::use_javascript(const QString& script) { if (main_window->web_view) { WebPage* page = (WebPage*)main_window->web_view->page(); if (page) page->use_javascript(script); } } } MediaConch/Source/GUI/Qt/resulttable.h0000644000000000000000000000143513216666133016527 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef RESULTWINDOW_H #define RESULTWINDOW_H #include #include #include #include "mainwindow.h" class QProgressBar; class QTimer; namespace MediaConch { class WebPage; class ResultTable; class FileRegistered; class ResultTable { public: explicit ResultTable(MainWindow* m, WebPage *p); ~ResultTable(); void add_file_to_result_table(const std::string&); private: // Visual elements MainWindow *mainwindow; WebPage *page; }; } #endif // RESULTWINDOW_H MediaConch/Source/GUI/Qt/WebKitPage.h0000644000000000000000000000212013216666133016153 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WEBKITPAGE_H #define WEBKITPAGE_H #include "mainwindow.h" #include "WebCommonPage.h" #include namespace MediaConch { class WebPage : public WebCommonPage { Q_OBJECT public: explicit WebPage(MainWindow *m, QWidget *parent = 0); virtual ~WebPage(); virtual void use_javascript(const QString& js); protected: virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest& request, QWebPage::NavigationType type); QString chooseFile(QWebFrame *frame, const QString& suggested); bool extension(Extension extension, const ExtensionOption * option = 0, ExtensionReturn *output = 0); bool supportsExtension(Extension extension) const; public Q_SLOTS: void on_load_finished(bool ok); private: QWebInspector *inspector; }; } #endif MediaConch/Source/GUI/Qt/settingswindow.h0000644000000000000000000000361013216666133017266 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef SETTINGSWINDOW_H #define SETTINGSWINDOW_H #include #include "commonwebwindow.h" namespace MediaConch { class SettingsWindow : public CommonWebWindow { public: explicit SettingsWindow(MainWindow* parent); ~SettingsWindow(); void display_settings(); void create_web_view_finished(); private: void create_html(QString& html); void create_html_settings(QString& settings); void fill_settings_html(QString& html); void add_policy_to_html_selection(QString& policies, QString& html, const QString& selector); void create_policy_options(QString& policies); void add_display_to_html_selection(QString& displays, QString& html, const QString& selector); void create_displays_options(QString& displays); void add_verbosity_to_html_selection(QString& verbosity, QString& html, const QString& selector); void create_verbosity_options(QString& verbosity); void create_html_base(QString& base, const QString& settings); void change_qt_scripts_in_template(QString& html); void set_webmachine_script_in_template(QString& html); void remove_result_in_template(QString& html); void change_checker_in_template(QString& html, const QString& settings); void add_logged_to_js_input(WebPage *page); void add_save_report_path_to_js_input(WebPage *page); void add_load_files_path_to_js_input(WebPage *page); void add_save_policy_path_to_js_input(WebPage *page); void add_load_policy_path_to_js_input(WebPage *page); void add_save_display_path_to_js_input(WebPage *page); void add_load_display_path_to_js_input(WebPage *page); }; } #endif // SETTINGSWINDOW_H MediaConch/Source/GUI/Qt/helpwindow.cpp0000644000000000000000000000646313216666133016722 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "helpwindow.h" #include #include #include #include #include #include #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** //--------------------------------------------------------------------------- Help::Help(QWidget *parent) : QDialog(parent) { move(QApplication::desktop()->screenGeometry().width()/5, y()); resize(QApplication::desktop()->screenGeometry().width()-QApplication::desktop()->screenGeometry().width()/5*2, QApplication::desktop()->screenGeometry().height()*3/4); setWindowFlags(windowFlags()&(0xFFFFFFFF-Qt::WindowContextHelpButtonHint)); setWindowTitle("MediaConch help"); Close=new QPushButton("&Close"); Close->setDefault(true); QDialogButtonBox* Dialog=new QDialogButtonBox(); Dialog->addButton(Close, QDialogButtonBox::AcceptRole); connect(Dialog, SIGNAL(accepted()), this, SLOT(close())); QVBoxLayout* L=new QVBoxLayout(); Central=new QTabWidget(this); QTextBrowser* Text1=new QTextBrowser(this); Text1->setReadOnly(true); Text1->setOpenExternalLinks(true); Text1->setSource(QUrl("qrc:/Help/FAQ/FAQ.html")); Central->addTab(Text1, tr("FAQ")); QTextBrowser* Text2=new QTextBrowser(this); Text2->setReadOnly(true); Text2->setOpenExternalLinks(true); Text2->setSource(QUrl("qrc:/Help/How To Use/How To Use.html")); Central->addTab(Text2, tr("How To Use")); QTextBrowser* Text3=new QTextBrowser(this); Text3->setReadOnly(true); Text3->setOpenExternalLinks(true); Text3->setSource(QUrl("qrc:/Help/Data Format/Data Format.html")); Central->addTab(Text3, tr("Data Format")); QTextBrowser* Text4=new QTextBrowser(this); Text4->setReadOnly(true); Text4->setOpenExternalLinks(true); Text4->setSource(QUrl("qrc:/Help/About/About.html")); Central->addTab(Text4, tr("About")); L->addWidget(Central); L->addWidget(Close); setLayout(L); } //--------------------------------------------------------------------------- Help::~Help() { } //*************************************************************************** // Functions //*************************************************************************** //--------------------------------------------------------------------------- void Help::GettingStarted() { Central->setCurrentIndex(0); show(); } //--------------------------------------------------------------------------- void Help::HowToUse() { Central->setCurrentIndex(1); show(); } //--------------------------------------------------------------------------- void Help::DataFormat() { Central->setCurrentIndex(2); show(); } //--------------------------------------------------------------------------- void Help::About() { Central->setCurrentIndex(3); show(); } } MediaConch/Source/GUI/Qt/WebKitView.h0000644000000000000000000000117313216666133016220 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef QWEBKITVIEW_H #define QWEBKITVIEW_H #include namespace MediaConch { class MainWindow; class WebView : public QWebView { Q_OBJECT public: explicit WebView(QWidget *parent = 0); virtual ~WebView(); protected: virtual void dropEvent(QDropEvent *event); virtual void dragEnterEvent(QDragEnterEvent *event); MainWindow *mainwindow; }; } #endif MediaConch/Source/GUI/Qt/DatabaseUi.cpp0000644000000000000000000001645313216666133016544 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include "DatabaseUi.h" #include //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- namespace MediaConch { //*************************************************************************** // Database //*************************************************************************** //*************************************************************************** // Constructor/Destructor //*************************************************************************** //--------------------------------------------------------------------------- DatabaseUi::DatabaseUi() { } //--------------------------------------------------------------------------- DatabaseUi::~DatabaseUi() { } //--------------------------------------------------------------------------- void DatabaseUi::set_database_directory(const std::string& dirname) { Database::set_database_directory(dirname); } //--------------------------------------------------------------------------- void DatabaseUi::set_database_filename(const std::string& filename) { Database::set_database_filename(filename); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_create_ui_table(std::string& q) { std::stringstream create; create << "CREATE TABLE IF NOT EXISTS UI "; // Table name create << "(FILENAME TEXT NOT NULL,"; create << " FILEPATH TEXT NOT NULL,"; create << " POLICY INT NOT NULL,"; create << " DISPLAY INT NOT NULL,"; create << " ANALYZED BOOL NOT NULL,"; create << " IMPLEMENTATION_VALID BOOL ,"; create << " POLICY_VALID BOOL );"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_table_v0(std::string& q) { std::stringstream create; create << "ALTER TABLE UI "; // Table name create << "ADD VERBOSITY INT DEFAULT -1 NOT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_create_ui_settings_table(std::string& q) { std::stringstream create; create << "CREATE TABLE IF NOT EXISTS UI_SETTINGS "; // Table name create << "(USER_ID INT PRIMARY KEY DEFAULT -1,"; create << " DEFAULT_POLICY TEXT NOT NULL,"; create << " DEFAULT_DISPLAY TEXT NOT NULL,"; create << " DEFAULT_VERBOSITY INT NOT NULL);"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v1(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_POLICY TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v2(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_DISPLAY TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v3(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_VERBOSITY INT DEFAULT 5;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v4(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_SAVE_REPORT_PATH TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v5(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_LOAD_FILES_PATH TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v6(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_SAVE_REPORT_PATH TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v7(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_LOAD_FILES_PATH TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v8(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_SAVE_POLICY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_SAVE_DISPLAY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_SAVE_POLICY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_SAVE_DISPLAY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_LOAD_POLICY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD DEFAULT_LOAD_DISPLAY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_LOAD_POLICY_PATH TEXT DEFAULT NULL;"; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD LAST_LOAD_DISPLAY_PATH TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_settings_table_v9(std::string& q) { std::stringstream create; create << "ALTER TABLE UI_SETTINGS"; // Table name create << " ADD MCO_TOKEN TEXT DEFAULT NULL;"; q = create.str(); } //--------------------------------------------------------------------------- void DatabaseUi::get_sql_query_for_update_ui_table_v10(std::string& q) { std::stringstream create; create << "ALTER TABLE UI"; // Table name create << " ADD OPTIONS TEXT DEFAULT NULL;"; q = create.str(); } } MediaConch/Source/GUI/Qt/publicpolicieswindow.cpp0000644000000000000000000001200713216666133020767 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "publicpolicieswindow.h" #include "mainwindow.h" #include "WebPage.h" #include "WebView.h" #include "progressbar.h" #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** PublicPoliciesWindow::PublicPoliciesWindow(MainWindow *parent) : CommonWebWindow(parent) { } PublicPoliciesWindow::~PublicPoliciesWindow() { } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- void PublicPoliciesWindow::display_public_policies() { display_html(); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::change_qt_scripts_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script += " \n" " \n"; #elif defined(WEB_MACHINE_ENGINE) script += " \n" " \n" " \n" " \n"; #endif script += " \n"; script += " \n"; script += " \n"; script += " \n"; script += " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::remove_result_in_template(QString& html) { QRegExp reg("\\{% block result %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::change_checker_in_template(const QString& policy, QString& html) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), policy); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::create_html_policy(QString& policy) { QFile template_html(":/publicPolicies.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); policy = QString(html); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::create_html_base(const QString& policy, QString& base) { set_webmachine_script_in_template(base); change_qt_scripts_in_template(base); change_checker_in_template(policy, base); remove_result_in_template(base); } //--------------------------------------------------------------------------- void PublicPoliciesWindow::create_html(QString &html) { QString policy; create_html_policy(policy); create_html_base(policy, html); } //*************************************************************************** // HELPER //*************************************************************************** } MediaConch/Source/GUI/Qt/workerfiles.h0000644000000000000000000000700313216666133016532 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef WORKERFILES_H #define WORKERFILES_H #include #include #include #include #include class QTimer; namespace MediaConch { class FileRegistered; class MainWindow; class DatabaseUi; class WorkerFiles : public QThread { Q_OBJECT public: explicit WorkerFiles(MainWindow* m); virtual ~WorkerFiles(); // Thread void run(); // Configuration void fill_registered_files_from_db(); void set_database(DatabaseUi* database); // functions int add_file_to_list(const std::string& file, const std::string& path, int policy, int display, int verbosity, bool fixer, bool force, bool, const std::vector&, std::string& err); int add_file_to_list(long id, const std::string& file, const std::string&, const std::string&, std::string& err); int add_attachment_to_list(const std::string& file, int policy, int display, int verbosity, const std::vector& options, std::string& err); void clear_files(); FileRegistered* get_file_registered_from_file(const std::string& file); FileRegistered* get_file_registered_from_id(long id); void remove_file_registered_from_id(long file_id); void remove_all_files_registered(); void get_registered_files(std::map& files); long get_id_from_registered_file(const std::string& file); std::string get_filename_from_registered_file_id(long file_id); int update_policy_of_file_registered_from_file(long file_id, long policy, std::string& error); private: void add_registered_file_to_db(const FileRegistered* file); void add_registered_files_to_db(const std::vector& files); void update_registered_file_in_db(const FileRegistered* file); void update_registered_files_in_db(const std::vector& files); void get_registered_file_from_db(FileRegistered* file); void remove_registered_file_from_db(const FileRegistered* file); void remove_registered_files_from_db(const std::vector& files); void remove_all_registered_file_from_db(); void update_unfinished_files(); void update_add_files_registered(); void update_delete_files_registered(); void update_update_files_registered(); private Q_SLOTS: void update_files_registered(); private: MainWindow *mainwindow; DatabaseUi *db; QTimer *timer; size_t file_index; std::map working_files; QMutex working_files_mutex; std::map to_delete_files; QMutex to_delete_files_mutex; std::map to_add_files; QMutex to_add_files_mutex; std::map to_update_files; QMutex to_update_files_mutex; std::vector unfinished_files; QMutex unfinished_files_mutex; }; } #endif // WORKERFILES_H MediaConch/Source/GUI/Qt/progressbar.ui0000644000000000000000000000201013216666133016706 0ustar rootroot ProgressBar 0 0 884 635 0 0 1 0 0 0 MediaConch/Source/GUI/Qt/DatabaseUi.h0000644000000000000000000001512213216666133016201 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Database functions // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //--------------------------------------------------------------------------- #ifndef DatabaseUiH #define DatabaseUiH //--------------------------------------------------------------------------- #include #include #include "Common/Database.h" #include "Common/MediaConchLib.h" //--------------------------------------------------------------------------- namespace MediaConch { class FileRegistered; //*************************************************************************** // Class Database //*************************************************************************** class DatabaseUi : public Database { public: //Constructor/Destructor DatabaseUi(); virtual ~DatabaseUi(); void set_database_directory(const std::string& dirname); void set_database_filename(const std::string& name); // General virtual int init_ui() = 0; // UI virtual int ui_add_file(const FileRegistered* file) = 0; virtual int ui_add_files(const std::vector& files) = 0; virtual int ui_update_file(const FileRegistered* file) = 0; virtual int ui_update_files(const std::vector& files) = 0; virtual int ui_get_file(FileRegistered* file) = 0; virtual int ui_remove_file(const FileRegistered* file) = 0; virtual int ui_remove_files(const std::vector& files) = 0; virtual int ui_remove_all_files() = 0; virtual void ui_get_elements(std::vector& vec) = 0; virtual int ui_reset_file_for_reload(FileRegistered* file) = 0; // UI Settings virtual int ui_settings_save_default_policy(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_policy(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_policy(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_policy(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_display(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_display(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_display(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_display(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_verbosity(int, int user_id = -1) = 0; virtual int ui_settings_get_default_verbosity(int&, int user_id = -1) = 0; virtual int ui_settings_save_last_verbosity(int, int user_id = -1) = 0; virtual int ui_settings_get_last_verbosity(int&, int user_id = -1) = 0; virtual int ui_settings_save_default_load_files_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_load_files_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_load_files_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_load_files_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_load_policy_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_load_policy_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_load_policy_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_load_policy_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_load_display_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_load_display_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_load_display_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_load_display_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_save_report_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_save_report_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_save_report_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_save_report_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_save_policy_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_save_policy_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_save_policy_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_save_policy_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_default_save_display_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_default_save_display_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1) = 0; virtual int ui_settings_save_mco_token(const std::string&, int user_id = -1) = 0; virtual int ui_settings_get_mco_token(std::string&, int user_id = -1) = 0; protected: //Database dependant void get_sql_query_for_create_ui_table(std::string& q); void get_sql_query_for_update_ui_table_v0(std::string& q); void get_sql_query_for_create_ui_settings_table(std::string& q); void get_sql_query_for_update_ui_settings_table_v1(std::string& q); void get_sql_query_for_update_ui_settings_table_v2(std::string& q); void get_sql_query_for_update_ui_settings_table_v3(std::string& q); void get_sql_query_for_update_ui_settings_table_v4(std::string& q); void get_sql_query_for_update_ui_settings_table_v5(std::string& q); void get_sql_query_for_update_ui_settings_table_v6(std::string& q); void get_sql_query_for_update_ui_settings_table_v7(std::string& q); void get_sql_query_for_update_ui_settings_table_v8(std::string& q); void get_sql_query_for_update_ui_settings_table_v9(std::string& q); void get_sql_query_for_update_ui_table_v10(std::string& q); private: DatabaseUi (const DatabaseUi&); DatabaseUi& operator=(const DatabaseUi&); }; } #endif MediaConch/Source/GUI/Qt/resulttable.cpp0000644000000000000000000000501513216666133017060 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "resulttable.h" #include "mainwindow.h" #include "Common/FileRegistered.h" #include #include #include #include #include "WebView.h" #include "WebPage.h" #include "progressbar.h" namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** //--------------------------------------------------------------------------- ResultTable::ResultTable(MainWindow* m, WebPage *p) : mainwindow(m), page(p) { } //--------------------------------------------------------------------------- ResultTable::~ResultTable() { } //--------------------------------------------------------------------------- void ResultTable::add_file_to_result_table(const std::string& full_path) { FileRegistered* file = mainwindow->get_file_registered_from_file(full_path); if (!file) return; std::string filename = file->filename; QUrl url(QString().fromUtf8(filename.c_str(), filename.length())); QFileInfo info(url.path()); QString policyName; std::string name; QString err; if (file->policy != -1 && mainwindow->policy_get_name(file->policy, name, err) >= 0 && name.size()) policyName = QString().fromUtf8(name.c_str(), name.length()); else policyName = "N/A"; // Make the javascript structure Arghh! QString formValues = QString("{\"policy\":\""); formValues += QString().number(file->policy); // Policy formValues += QString("\",\"policyText\":\""); formValues += policyName; // PolicyName/PolicyText formValues += "\",\"display\":\""; formValues += QString().number(file->display); // Display formValues += "\",\"verbosity\":\""; formValues += QString().number(file->verbosity); // Verbosity formValues += "\"}"; QString script = QString("updateFileOrAddFile('"); script += QString().fromUtf8(full_path.c_str(), full_path.length()); script += "', '"; script += info.fileName(); script += "', '"; script += QString().number(file->file_id); script += "', '"; script += formValues; script += "');"; page->use_javascript(script); } } MediaConch/Source/GUI/Qt/checkerwindow.h0000644000000000000000000000526513216666133017042 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef CHECKERWINDOW_H #define CHECKERWINDOW_H #include "mainwindow.h" #include #include #include "WebChoose.h" #include "commonwebwindow.h" class QFrame; class QFile; class QWebView; namespace MediaConch { class ResultTable; class CheckerWindow : public CommonWebWindow { public: explicit CheckerWindow(MainWindow *parent = 0); ~CheckerWindow(); // Functions void create_web_view(); void create_web_view_finished(); void set_display_xslt(const QString& d) { display_xslt = d; } void reset_display_xslt() { display_xslt.clear(); } void change_local_files(const QStringList& files); void add_file_to_result_table(const std::string& full_path); private: // Visual elements QString display_xslt; ResultTable *result_table; std::vector files; //*************************************************************************** // HELPER //*************************************************************************** void add_policy_to_html_selection(QString& policies, QString& html, const QString& selector); void create_policy_options(QString& policies); void add_display_to_html_selection(QString& displays, QString& html, const QString& selector); void create_displays_options(QString& displays); void add_verbosity_to_html_selection(QString& verbosity, QString& html, const QString& selector); void create_verbosity_options(QString& verbosity); void remove_template_tags(QString& data); void load_include_in_template(QString& html); void remove_element_in_template(QString& html); void load_form_in_template(QString& html); void create_html(QString &html); void create_html_base(const QString& checker, QString& base); void create_html_checker(QString&); QString create_form_upload(); QString create_form_online(); QString create_form_repository(); void remove_form_online(int pos, QString& html); void remove_li_online(int& pos, QString& html); void change_collapse_form(QString& html); void change_checker_in_template(const QString& checker, QString& html); void change_body_script_in_template(QString& html); void set_webmachine_script_in_template(QString& html); }; } #endif // MAINWINDOW_H MediaConch/Source/GUI/Qt/progressbar.cpp0000644000000000000000000000171613216666133017067 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "progressbar.h" #include "ui_progressbar.h" #include #include namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** ProgressBar::ProgressBar(QWidget *parent) : QFrame(parent), ui(new Ui::ProgressBar) { ui->setupUi(this); } ProgressBar::~ProgressBar() { delete ui; } //*************************************************************************** // Visual element //*************************************************************************** QProgressBar *ProgressBar::get_progress_bar() { return ui->bar; } } MediaConch/Source/GUI/Qt/WebCommonPage.cpp0000644000000000000000000016244413216666133017227 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "WebCommonPage.h" #include "mainwindow.h" #include #include #include #include #include #include #include namespace MediaConch { void WebCommonPage::menu_link_checker(const QString& name) { menu_name = name; QTimer::singleShot(0, this, SLOT(timer_menu_link())); } void WebCommonPage::timer_menu_link() { if (!menu_name.compare("Checker")) mainwindow->on_actionChecker_triggered(); else if (!menu_name.compare("Policies")) Q_EMIT mainwindow->on_actionPolicies_triggered(); else if (!menu_name.compare("Public Policies")) Q_EMIT mainwindow->on_actionPublicPolicies_triggered(); else if (!menu_name.compare("Display")) Q_EMIT mainwindow->on_actionDisplay_triggered(); else if (!menu_name.compare("Database")) Q_EMIT mainwindow->on_actionDatabase_triggered(); else if (!menu_name.compare("Settings")) Q_EMIT mainwindow->on_actionSettings_triggered(); else if (!menu_name.compare("Help")) Q_EMIT mainwindow->on_actionGettingStarted_triggered(); else mainwindow->on_actionChecker_triggered(); } void WebCommonPage::on_input_changed(const QString& inputName) { select_file_name = inputName; } void WebCommonPage::on_download_report(const QString& report, long file_id, const QString& report_name) { if (report.isEmpty()) return; QString filename = QString().fromUtf8(mainwindow->get_filename_from_registered_file_id(file_id).c_str()); std::string proposed_path_str = mainwindow->select_correct_save_report_path(); QDir proposed_dir(QString().fromUtf8(proposed_path_str.c_str(), proposed_path_str.length())); QString proposed_filename = QFileInfo(filename).fileName() + "_" + report_name + ".txt"; QString proposed = proposed_dir.absoluteFilePath(proposed_filename); if (report_is_html(report)) proposed.replace(proposed.length() - 3, 3, "html"); else if (report_is_xml(report)) proposed.replace(proposed.length() - 3, 3, "xml"); else if (report_is_json(report)) proposed.replace(proposed.length() - 3, 3, "json"); else proposed.replace(proposed.length() - 3, 3, "txt"); QString dl_file = QFileDialog::getSaveFileName(mainwindow, "Save report", proposed); if (!dl_file.length()) return; QDir info(QFileInfo(dl_file).absoluteDir()); mainwindow->set_last_save_report_path(info.absolutePath().toUtf8().data()); QFile file(dl_file); if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) return; QTextStream out(&file); out.setCodec("UTF-8"); out << report; } QString WebCommonPage::on_fill_implementation_report(long file_id, const QString& display, const QString& verbosity) { QString report; int display_i = display.toInt(); int *verbosity_p = NULL; int verbosity_i; if (verbosity.length()) { verbosity_i = verbosity.toInt(); verbosity_p = &verbosity_i; } std::string err; mainwindow->get_implementation_report(file_id, report, err, &display_i, verbosity_p); string_to_json(report); QString ret = QString("{\"report\":\"%1\",\"isHtmlReport\":%2}").arg(report).arg(report_is_html(report) ? "true" : "false"); return ret; } void WebCommonPage::on_save_implementation_report(long file_id, const QString& display, const QString& verbosity) { QString report; int display_i = display.toInt(); int *verbosity_p = NULL; int verbosity_i; if (verbosity.length()) { verbosity_i = verbosity.toInt(); verbosity_p = &verbosity_i; } std::string err; mainwindow->get_implementation_report(file_id, report, err, &display_i, verbosity_p); on_download_report(report, file_id, "ImplementationReport"); } QString WebCommonPage::on_fill_policy_report(long file_id, const QString& policy, const QString& display) { int policy_i = policy.toInt(); QString report; if (policy_i != -1) { int display_i = display.toInt(); std::string err; mainwindow->validate_policy(file_id, report, err, policy_i, &display_i); } string_to_json(report); QString ret = QString("{\"report\":\"%1\",\"isHtmlReport\":%2}").arg(report).arg(report_is_html(report) ? "true" : "false"); return ret; } void WebCommonPage::on_save_policy_report(long file_id, const QString& policy, const QString& display) { QString report; int policy_i = policy.toInt(); int display_i = display.toInt(); std::string err; mainwindow->validate_policy(file_id, report, err, policy_i, &display_i); on_download_report(report, file_id, "MediaConchReport"); } QString WebCommonPage::on_fill_output_list() { std::string output_list; std::string err; mainwindow->get_mediainfo_output_list(output_list, err); return QString().fromUtf8(output_list.c_str()); } QString WebCommonPage::on_fill_mediainfo_report(long file_id) { std::string err; return mainwindow->get_mediainfo_jstree(file_id, err); } void WebCommonPage::on_save_mediainfo_report(long file_id, const QString& output) { std::string display_name, display_content; std::string mi_inform = output.toStdString(); std::string err; QString report_name = "MediaInfo"; if (!output.isEmpty() && output != "XML" && output != "MIXML" && output != "Text" && output != "HTML") report_name.append(".").append(output); QString report = mainwindow->get_mediainfo_report(file_id, display_name, display_content, mi_inform, err); report.replace("\r\n", "\n"); //There are some incoherencies in inputs, so we put all to \n and file writer will emit the right carriage return on_download_report(report, file_id, report_name); } QString WebCommonPage::on_fill_mediatrace_report(long file_id) { std::string err; return mainwindow->get_mediatrace_jstree(file_id, err); } void WebCommonPage::on_save_mediatrace_report(long file_id) { std::string display_name, display_content; std::string err; QString report = mainwindow->get_mediatrace_xml(file_id, display_name, display_content, err); on_download_report(report, file_id, "MediaTrace"); } QString WebCommonPage::on_create_policy_from_file(long file_id) { std::string n; QString err; int id = mainwindow->xslt_policy_create_from_file(file_id, err); if (id < 0 || mainwindow->policy_get_name(id, n, err) < 0) n = std::string(); else mainwindow->policy_save(id, err); QString name = QString().fromUtf8(n.c_str(), n.length()); string_to_json(name); QString script; if (n.size()) script = QString("{\"result\":true,\"policyId\":%1, \"policyName\":\"%2\"}") .arg(id) .arg(name); else script = QString("{}"); return script; } QString WebCommonPage::checker_force_analyze(long id) { std::string err; if (mainwindow->analyze_force_file_to_list(id, err) < 0) { QString err_str = QString().fromUtf8(err.c_str(), err.size()); string_to_json(err_str); return QString("{\"error\": \"%1\"}").arg(err_str); } return QString("{}"); } void WebCommonPage::on_file_selected(const QString& filename, const QString& path, const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList& options, QString& ret, std::string& err_str) { std::string error; std::string full_file(path.toUtf8().data()); if (mainwindow->add_file_to_list(filename, path, policy, display, verbosity, fixer, false, options, error) < 0) { if (err_str.size()) err_str += "\n"; err_str += error; } else { #ifdef WINDOWS if (full_file.size() && full_file[full_file.size() - 1] != '/' && full_file[full_file.size() - 1] != '\\') full_file += "/"; #else if (full_file.length()) full_file += "/"; #endif full_file += filename.toUtf8().data(); FileRegistered* fr = mainwindow->get_file_registered_from_file(full_file); if (!fr) { err_str += "File not correctly registered."; return; } if (ret.size()) ret += ","; QString filename = QString().fromUtf8(full_file.c_str(), full_file.size()); string_to_json(filename); ret += QString("{\"success\":true, \"filename\":\"%1\", \"transactionId\":%2}") .arg(filename) .arg(fr->file_id); } } void WebCommonPage::on_file_selected_end(const std::string& err_str, QString& ret) { QString val("{\"success\":["); val += ret; val += "]"; ret = val; QString err; if (err_str.size()) err = QString("\"error\":\"%1\"").arg(QString().fromUtf8(err_str.c_str(), err_str.size())); if (err.size()) { if (ret.size() > 1) ret += ","; ret += err; } file_selector.clear(); clean_forms(); ret += "}"; } void WebCommonPage::on_file_selected_formValues(const FileRegistered* fr, QString& formValues) { formValues = "{"; //Policy formValues += QString("\"policy\":%1,").arg(fr->policy); if (fr->policy == -1) formValues += "\"policyText\":\"N/A\""; else { QString err; std::string n; if (mainwindow->policy_get_name(fr->policy, n, err) < 0) n = "N/A"; QString name = QString().fromUtf8(n.c_str(), n.length()); string_to_json(name); formValues += QString("\"policyText\":\"%1\"").arg(name); } //display formValues += QString(",\"display\":%1").arg(fr->display); //verbosity formValues += QString(",\"verbosity\":%1").arg(fr->verbosity); formValues += "}"; } QString WebCommonPage::on_file_upload_selected(const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList& options) { QStringList files = file_selector.value("checkerUpload_file", QStringList()); if (!files.size()) return QString("{\"error\": \"No folder selected.\"}"); std::string err_str; QString ret; for (int i = 0; i < files.size(); ++i) { QFileInfo f = QFileInfo(files[i]); on_file_selected(f.fileName(), f.absolutePath(), policy, display, verbosity, fixer, options, ret, err_str); } on_file_selected_end(err_str, ret); return ret; } QString WebCommonPage::on_file_online_selected(const QString& url, const QString& policy, const QString& display, const QString& verbosity, bool, const QStringList& options) { if (!url.length()) return QString("{\"error\": \"No URL given.\"}"); std::string err_str; QString ret; on_file_selected(url, "", policy, display, verbosity, false, options, ret, err_str); on_file_selected_end(err_str, ret); return ret; } QString WebCommonPage::on_file_repository_selected(const QString& policy, const QString& display, const QString& verbosity, bool fixer, const QStringList& options) { QStringList dirname = file_selector.value("checkerRepository_directory", QStringList()); if (dirname.empty()) return QString("{\"error\": \"No folder selected.\"}"); QDir dir(dirname.last()); QFileInfoList list; add_sub_directory_files_to_list(dir, list); if (!list.count()) return QString("{\"error\": \"Folder selected is empty.\"}"); std::string err_str; QString ret; for (int i = 0; i < list.size(); ++i) on_file_selected(list[i].fileName(), list[i].absolutePath(), policy, display, verbosity, fixer, options, ret, err_str); on_file_selected_end(err_str, ret); return ret; } QString WebCommonPage::on_file_from_db_selected() { QString ret; std::string err_str; std::map files; mainwindow->get_registered_files(files); if (!files.size()) return ret; std::map::iterator it = files.begin(); for (; it != files.end(); ++it) { if (!it->second) continue; if (ret.size()) ret += ","; QString filename = QString().fromUtf8(it->first.c_str(), it->first.size()); string_to_json(filename); QString formValues; on_file_selected_formValues(it->second, formValues); ret += QString("{\"success\":true, \"filename\":\"%1\", \"transactionId\":%2, \"formValues\":%3}") .arg(filename) .arg(it->second->file_id) .arg(formValues); } on_file_selected_end(err_str, ret); return ret; } QString WebCommonPage::status_reports_multi(const QStringList& ids, const QStringList& policy_ids) { QString ret("["); for (int i = 0; i < ids.size(); ++i) { if (ret.size() > 1) ret += ",{"; else ret += "{"; long file_id = ids[i].toInt(); ret += "\"implemReport\":" + implementation_is_valid(file_id); if (policy_ids[i] == "-1") { ret += "}"; continue; } ret += ",\"policyReport\":" + policy_is_valid(file_id, policy_ids[i].toInt()); ret += "}"; } ret += "]"; return ret; } void WebCommonPage::on_save_settings_selected(const QString& policy, const QString& display, const QString& verbosity, const QString& save_report_path, const QString& load_files_path, const QString& save_policy_path, const QString& load_policy_path, const QString& save_display_path, const QString& load_display_path) { UiSettings& settings = mainwindow->get_settings(); //policy if (policy == "-2") settings.change_default_policy("last"); else if (policy == "-1") settings.change_default_policy(""); else settings.change_default_policy(policy.toUtf8().data()); //display if (display == "-1") settings.change_default_display("last"); else { std::vector& displays = mainwindow->get_displays(); int display_i = display.toInt(); if (display_i >= 0 && (size_t)display_i < displays.size()) settings.change_default_display(displays[display_i].toUtf8().data()); else settings.change_default_display(""); } //verbosity settings.change_default_verbosity(verbosity.toInt()); //Save report path std::string r_s_path; if (save_report_path == "last") r_s_path = "last"; else { QStringList list = file_selector["settings_save_report_path_input"]; if (list.size()) r_s_path = list[list.size() - 1].toUtf8().data(); } if (r_s_path.length()) { settings.change_default_save_report_path(r_s_path); use_javascript(QString("set_save_report_selected('%1');") .arg(QString().fromUtf8(settings.get_default_save_report_path().c_str()))); } use_javascript("document.getElementById('settings_save_report_path_input').value = \"\";"); //Load files path std::string f_l_path; if (load_files_path == "last") f_l_path = "last"; else { QStringList list = file_selector["settings_load_files_path_input"]; if (list.size()) f_l_path = list[list.size() - 1].toUtf8().data(); } if (f_l_path.length()) { settings.change_default_load_files_path(f_l_path); use_javascript(QString("set_load_files_selected('%1');") .arg(QString().fromUtf8(settings.get_default_load_files_path().c_str()))); } use_javascript("document.getElementById('settings_load_files_path_input').value = \"\";"); //Save policy path std::string p_s_path; if (save_policy_path == "last") p_s_path = "last"; else { QStringList list = file_selector["settings_save_policy_path_input"]; if (list.size()) p_s_path = list[list.size() - 1].toUtf8().data(); } if (p_s_path.length()) { settings.change_default_save_policy_path(p_s_path); use_javascript(QString("set_save_policy_selected('%1');") .arg(QString().fromUtf8(p_s_path.c_str(), p_s_path.length()))); } use_javascript("document.getElementById('settings_save_policy_path_input').value = \"\";"); //Load policy path std::string p_l_path; if (load_policy_path == "last") p_l_path = "last"; else { QStringList list = file_selector["settings_load_policy_path_input"]; if (list.size()) p_l_path = list[list.size() - 1].toUtf8().data(); } if (p_l_path.length()) { settings.change_default_load_policy_path(p_l_path); use_javascript(QString("set_load_policy_selected('%1');") .arg(QString().fromUtf8(p_l_path.c_str(), p_l_path.length()))); } use_javascript("document.getElementById('settings_load_policy_path_input').value = \"\";"); //Save display path std::string d_s_path; if (save_display_path == "last") d_s_path = "last"; else { QStringList list = file_selector["settings_save_display_path_input"]; if (list.size()) d_s_path = list[list.size() - 1].toUtf8().data(); } if (d_s_path.length()) { settings.change_default_save_display_path(d_s_path); use_javascript(QString("set_save_display_selected('%1');") .arg(QString().fromUtf8(d_s_path.c_str(), d_s_path.length()))); } use_javascript("document.getElementById('settings_save_display_path_input').value = \"\";"); //Load display path std::string d_l_path; if (load_display_path == "last") d_l_path = "last"; else { QStringList list = file_selector["settings_load_display_path_input"]; if (list.size()) d_l_path = list[list.size() - 1].toUtf8().data(); } if (d_l_path.length()) { settings.change_default_load_display_path(d_l_path); use_javascript(QString("set_load_display_selected('%1');") .arg(QString().fromUtf8(d_l_path.c_str(), d_l_path.length()))); } use_javascript("document.getElementById('settings_load_display_path_input').value = \"\";"); file_selector.clear(); } void WebCommonPage::clean_forms() { file_selector.clear(); int policy_i = mainwindow->select_correct_policy(); int display_i = mainwindow->select_correct_display(); int verbosity_i = mainwindow->select_correct_verbosity(); bool has_libcurl = mainwindow->mil_has_curl_enabled(); use_javascript(QString("document.getElementById('checkerUpload_policy').value = %1;").arg(policy_i)); use_javascript(QString("document.getElementById('checkerUpload_display_selector').value = %1;").arg(display_i)); use_javascript(QString("document.getElementById('checkerUpload_verbosity_selector').value = %1;").arg(verbosity_i)); use_javascript("document.getElementById('checkerUpload_file').value = \"\";"); if (has_libcurl) { use_javascript(QString("document.getElementById('checkerOnline_policy').value = %1;").arg(policy_i)); use_javascript(QString("document.getElementById('checkerOnline_display_selector').value = %1;").arg(display_i)); use_javascript(QString("document.getElementById('checkerOnline_verbosity_selector').value = %1;").arg(verbosity_i)); use_javascript("document.getElementById('checkerOnline_file').value = \"\";"); } use_javascript(QString("document.getElementById('checkerRepository_policy').value = %1;").arg(policy_i)); use_javascript(QString("document.getElementById('checkerRepository_display_selector').value = %1;").arg(display_i)); use_javascript(QString("document.getElementById('checkerRepository_verbosity_selector').value = %1;").arg(verbosity_i)); use_javascript("document.getElementById('checkerRepository_directory').value = \"\";"); } void WebCommonPage::close_all() { mainwindow->clear_file_list(); } void WebCommonPage::close_element(long file_id) { mainwindow->remove_file_to_list(file_id); } QString WebCommonPage::choose_file_settings() { std::string suggested_str; if (select_file_name == "settings_save_report_path_input") suggested_str = mainwindow->get_settings().get_default_save_report_path(); else if (select_file_name == "settings_load_files_path_input") suggested_str = mainwindow->get_settings().get_default_load_files_path(); else if (select_file_name == "settings_save_policy_path_input") suggested_str = mainwindow->get_settings().get_default_save_policy_path(); else if (select_file_name == "settings_load_policy_path_input") suggested_str = mainwindow->get_settings().get_default_load_policy_path(); else if (select_file_name == "settings_save_display_path_input") suggested_str = mainwindow->get_settings().get_default_save_display_path(); else if (select_file_name == "settings_load_display_path_input") suggested_str = mainwindow->get_settings().get_default_load_display_path(); else return QString(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); QString value_input = QFileDialog::getExistingDirectory(mainwindow, NULL, suggested); QMap::iterator it = file_selector.find(select_file_name); if (it != file_selector.end()) file_selector.erase(it); if (!value_input.length()) return QString(); file_selector.insert(select_file_name, QStringList(value_input)); return value_input; } QString WebCommonPage::choose_file_import_policy() { std::string suggested_str; if (select_file_name == "xslPolicyImport[policyFile]") suggested_str = mainwindow->select_correct_load_policy_path(); else return QString(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); QString value_input = QFileDialog::getOpenFileName(mainwindow, "Open file", suggested, "XML file (*.xml);;XSL file (*.xsl);;All (*.*)", 0, QFileDialog::Option(0)); QMap::iterator it = file_selector.find(select_file_name); if (it != file_selector.end()) file_selector.erase(it); if (!value_input.length()) return QString(); mainwindow->set_last_load_policy_path(value_input.toUtf8().data()); file_selector.insert(select_file_name, QStringList(value_input)); return value_input; } QString WebCommonPage::choose_file_policy_from_file() { std::string suggested_str; suggested_str = mainwindow->select_correct_load_files_path(); QString suggested = QString().fromUtf8(suggested_str.c_str(), suggested_str.length()); QString value_input = QFileDialog::getOpenFileName(mainwindow, "Open file", suggested); QMap::iterator it = file_selector.find(select_file_name); if (it != file_selector.end()) file_selector.erase(it); if (!value_input.length()) return QString(); file_selector.insert(select_file_name, QStringList(value_input)); return value_input; } void WebCommonPage::charge_local_dir(const QString& path, QStringList& tmp) { QFileInfo info(path); if (info.isFile()) { tmp << path; return; } QDir dir(path); QFileInfoList list; add_sub_directory_files_to_list(dir, list); for (int i = 0; i < list.size(); ++i) tmp << list[i].absoluteFilePath(); } void WebCommonPage::change_local_files(const QStringList& files) { QStringList tmp; for (int i = 0; i < files.size(); ++i) charge_local_dir(files[i], tmp); if (!tmp.size()) return; QMap::iterator it = file_selector.find("checkerUpload_file"); if (it != file_selector.end()) file_selector["checkerUpload_file"] << tmp; else file_selector.insert("checkerUpload_file", tmp); if (files.size()) { QDir info(QFileInfo(files[0]).absoluteDir()); mainwindow->set_last_load_files_path(info.absolutePath().toUtf8().data()); } QStringList options; if (checker_full_parse) { options << "file_parsespeed"; options << "1"; } QString res = on_file_upload_selected(QString().setNum(mainwindow->select_correct_policy()), QString().setNum(mainwindow->select_correct_display()), QString().setNum(mainwindow->select_correct_verbosity()), false, options); FileRegistered* fr = mainwindow->get_file_registered_from_file(tmp[0].toUtf8().data()); if (!fr) return; QString formValues; on_file_selected_formValues(fr, formValues); string_to_json(res); QString script = QString("checkerAjax.formRequestResponse(\"%1\", %2);").arg(res).arg(formValues); if (script.length()) use_javascript(script); } //--------------------------------------------------------------------------- bool WebCommonPage::report_is_html(const QString& report) { QRegExp reg("^(<\\!DOCTYPE.*html|.*$)", Qt::CaseInsensitive); if (reg.indexIn(report.trimmed(), 0) != -1) return true; return false; } //--------------------------------------------------------------------------- bool WebCommonPage::report_is_xml(const QString& report) { QRegExp reg("<\\?xml ", Qt::CaseInsensitive); if (reg.indexIn(report, 0) != -1) return true; return false; } //--------------------------------------------------------------------------- bool WebCommonPage::report_is_json(const QString& report) { QRegExp reg("^\\{.*\\}$", Qt::CaseInsensitive); if (reg.indexIn(report.trimmed(), 0) != -1) return true; return false; } QString WebCommonPage::get_file_tool(const QString& file) { FileRegistered* fr = mainwindow->get_file_registered_from_file(file.toUtf8().data()); if (!fr) return "-1"; int report_kind = fr->report_kind; delete fr; return QString().setNum(report_kind); } QString WebCommonPage::get_file_policy_id(const QString& file) { FileRegistered* fr = mainwindow->get_file_registered_from_file(file.toUtf8().data()); if (!fr) return "-1"; int policy = fr->policy; delete fr; return QString().setNum(policy); } QString WebCommonPage::get_file_display_id(const QString& file) { FileRegistered* fr = mainwindow->get_file_registered_from_file(file.toUtf8().data()); if (!fr) return "-1"; int display = fr->display; delete fr; return QString().setNum(display); } QString WebCommonPage::get_file_verbosity_id(const QString& file) { FileRegistered* fr = mainwindow->get_file_registered_from_file(file.toUtf8().data()); if (!fr) return "-1"; int verbosity = fr->verbosity; delete fr; return QString().setNum(verbosity); } QString WebCommonPage::policy_is_valid(long file_id, long policy_id) { //{"valid":false,"fileId":"fileId","error":null} std::string err; QString json = QString("{\"fileId\":\"%1\",").arg(file_id); bool policy_valid = false; if (mainwindow->update_policy_of_file_in_list(file_id, policy_id, err) < 0) { json += QString("\"valid\":false,\"error\":\"%2\"}") .arg(QString().fromUtf8(err.c_str(), err.size())); } FileRegistered* fr = mainwindow->get_file_registered_from_id(file_id); if (!fr) { json += QString("\"valid\":false,\"error\":\"%2\"}") .arg(QString().fromUtf8("File has been removed.")); } json += QString("\"valid\":%1,\"error\":%2}") .arg(fr->policy_valid ? "true" : "false").arg("null"); delete fr; return json; } QString WebCommonPage::implementation_is_valid(long file_id) { //{"valid":true,"fileId":"fileId","error":null} QString json = QString("{\"fileId\":\"%1\",").arg(file_id); FileRegistered* fr = mainwindow->get_file_registered_from_id(file_id); if (!fr) { json += QString("\"valid\":%1,\"error\":\"%2\"}") .arg("false").arg("File not reachable"); return json; } if (!fr->analyzed) { json += QString("\"valid\":%1,\"error\":\"%2\"}") .arg("false").arg("File not analyzed"); delete fr; return json; } json += QString("\"valid\":%1,\"error\":%2}") .arg(fr->implementation_valid ? "true" : "false").arg("null"); delete fr; return json; } QString WebCommonPage::file_is_analyzed(const QStringList& ids) { QString json = QString("{\"status\":{"); bool one_added = false; for (int i = 0; i < ids.size(); ++i) { long file = ids[i].toInt(); FileRegistered* fr = mainwindow->get_file_registered_from_id(file); if (!fr) continue; int report_kind = fr->report_kind; if ((report_kind >= 0 && report_kind <= 2) || report_kind == 5) //MC/MI/MT/MMT report_kind = 2; QString analyzed = QString("\"%1\":{\"finish\":%2,") .arg(fr->file_id) // id .arg(fr->analyzed ? "true" : "false"); // finish if (fr->analyzed) { analyzed += QString("\"tool\":%1") .arg(report_kind); // tool } else { analyzed += QString("\"percent\":%1") .arg(fr->analyze_percent); // percent } if (fr->generated_id.size()) { analyzed += QString(",\"associatedFiles\":{"); // associated files for (size_t x = 0; x < fr->generated_id.size(); ++x) { if (x) analyzed += ","; std::string filename, err; if (mainwindow->checker_file_from_id(fr->generated_id[x], filename, err) < 0) { mainwindow->set_str_msg_to_status_bar(err); filename = ""; } QStringList opt; for (size_t k = 0; k < fr->options.size(); ++k) opt << QString().fromUtf8(fr->options[k].c_str(), fr->options[k].size()); if (mainwindow->add_attachment_to_list(QString().fromUtf8(filename.c_str(), filename.size()), fr->policy, fr->display, fr->verbosity, opt, err) < 0) mainwindow->set_str_msg_to_status_bar(err); analyzed += QString("\"%1\":\"%2\"").arg(QString().number(fr->generated_id[x])) .arg(QString().fromUtf8(filename.c_str(), filename.size())); } analyzed += QString("}"); } delete fr; analyzed += "}"; if (one_added) json += ","; json += analyzed; one_added = true; } json += "}}"; return json; } void WebCommonPage::add_sub_directory_files_to_list(const QDir dir, QFileInfoList& list) { QFileInfoList tmp = dir.entryInfoList(QDir::Files); list << tmp; tmp = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); for (int i = 0; i < tmp.size(); ++i) { QDir tmp_dir(tmp[i].absoluteFilePath()); add_sub_directory_files_to_list(tmp_dir, list); } } QString WebCommonPage::display_add_file(const QString& name) { QStringList files = file_selector.value("displayImport_displayFile", QStringList()); if (files.empty()) return ""; QString filename = files.last(); int id = mainwindow->display_add_file(name, filename); if (id < 0) return ""; file_selector.clear(); std::vector& displays = mainwindow->get_displays(); QFileInfo file(displays[id]); return file.completeBaseName(); } void WebCommonPage::display_export_id(const QString& name) { mainwindow->display_export_id(name); } void WebCommonPage::display_delete_id(const QString& name) { mainwindow->display_delete_id(name); } void WebCommonPage::create_rule_tree(XsltPolicyRule *r, QString& rule_data) { if (!r) return; rule_data = "{"; rule_data += QString("\"id\":%1").arg(r->id); int len = r->node_name.length(); if (len > 0) { QString name = QString().fromUtf8(r->node_name.c_str(), r->node_name.length()); string_to_json(name); rule_data += QString(",\"name\":\"%1\"").arg(name); } else rule_data += ",\"name\":\"\""; len = r->track_type.length(); if (len > 0) { QString type = QString().fromUtf8(r->track_type.c_str(), r->track_type.length()); string_to_json(type); rule_data += QString(",\"tracktype\":\"%1\"").arg(type); } else rule_data += ",\"tracktype\":\"\""; len = r->field.length(); if (len > 0) { QString field = QString().fromUtf8(r->field.c_str(), r->field.length()); string_to_json(field); rule_data += QString(",\"field\":\"%1\"").arg(field); } else rule_data += ",\"field\":\"\""; if (r->occurrence >= 0) rule_data += QString(",\"occurrence\":%1").arg(r->occurrence); else rule_data += ",\"occurrence\":\"-1\""; len = r->ope.length(); if (len > 0) { QString validator = QString().fromUtf8(r->ope.c_str(), r->ope.length()); string_to_json(validator); rule_data += QString(",\"ope\":\"%1\"").arg(validator); } else rule_data += ",\"ope\":\"\""; len = r->value.length(); if (len > 0) { QString value = QString().fromUtf8(r->value.c_str(), r->value.length()); string_to_json(value); rule_data += QString(",\"value\":\"%1\"").arg(value); } else rule_data += ",\"value\":\"\""; len = r->scope.length(); if (len > 0) { QString scope = QString().fromUtf8(r->scope.c_str(), r->scope.length()); string_to_json(scope); rule_data += QString(",\"scope\":\"%1\"").arg(scope); } else rule_data += ",\"scope\":\"\""; rule_data += "}"; } QString WebCommonPage::get_policies_tree() { MediaConchLib::Get_Policies policies; QString res; QString err; if (mainwindow->get_policies("JSTREE", policies, err) < 0) { string_to_json(err); res = "{\"error\":\"" + err + "\"}"; return res; } if (policies.format != "JSTREE") { res = "{\"error\":\"Cannot generate the policies tree\"}"; return res; } res = QString().fromUtf8(policies.jstree->c_str(), policies.jstree->length()); return res; } QString WebCommonPage::policy_get_xml(int id) { std::string policy; QString err; if (mainwindow->policy_dump(id, policy, err) < 0) return err; return QString().fromUtf8(policy.c_str()); } QString WebCommonPage::policy_get_jstree(int id) { QString json; QString err; MediaConchLib::Get_Policy p; if (mainwindow->policy_get(id, "JSTREE", p, err) < 0) { json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::import_policy() { QString file; QStringList list = file_selector["xslPolicyImport[policyFile]"]; if (list.size()) file = list.last().toUtf8().data(); if (!file.length()) return QString("{\"error\":\"No file selected\"}"); file_selector.clear(); return import_policy(file); } QString WebCommonPage::import_policy(const QString& file) { QString json; QString err; int id; if ((id = mainwindow->policy_import(file, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(id, err); MediaConchLib::Get_Policy p; if (mainwindow->policy_get(id, "JSTREE", p, err) < 0) { string_to_json(err); json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::policy_from_file() { QString file; QStringList list = file_selector["xslPolicyCreateFromFile[file]"]; if (list.size()) file = list.last().toUtf8().data(); if (!file.size()) return QString("{\"error\":\"No file selected\"}"); file_selector.clear(); std::string error; QFileInfo f = QFileInfo(file); QStringList options; if (mainwindow->add_file_to_list(f.fileName(), f.absolutePath(), QString().setNum(mainwindow->select_correct_policy()), QString().setNum(mainwindow->select_correct_display()), QString().setNum(mainwindow->select_correct_verbosity()), false, true, options, error) < 0) return QString("{\"error\":\"%1\"").arg(QString().fromUtf8(error.c_str(), error.size())); return QString("{}"); } QString WebCommonPage::policy_import_data(const QString& data) { QString json; QString err; int id; if ((id = mainwindow->policy_import_data(data, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(id, err); json = QString("{\"policyId\":%1}").arg(id); return json; } int WebCommonPage::import_policy(const QStringList& files) { int ret = 0; QString script; for (int i = 0; i < files.size(); ++i) { QString tmp = import_policy(files[i]); if (tmp.startsWith("{\"error\":")) ret = -1; else script += QString("policyTreeAjax.policyDropped(%1);").arg(tmp); } if (script.length()) use_javascript(script); return ret; } QString WebCommonPage::xslt_policy_create(int parent_id) { QString json; QString err; int id; if ((id = mainwindow->xslt_policy_create(parent_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(id, err); MediaConchLib::Get_Policy p; if (mainwindow->policy_get(id, "JSTREE", p, err) < 0) { json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::policy_duplicate(int id, int dst_policy_id) { QString json; QString err; int ret = -1; if ((ret = mainwindow->policy_duplicate(id, dst_policy_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(ret, err); MediaConchLib::Get_Policy p; if (mainwindow->policy_get(ret, "JSTREE", p, err) < 0) { json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::policy_move(int id, int dst_policy_id) { QString json; QString err; int ret = -1; if ((ret = mainwindow->policy_move(id, dst_policy_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(ret, err); MediaConchLib::Get_Policy p; if (mainwindow->policy_get(ret, "JSTREE", p, err) < 0) { string_to_json(err); json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::policy_remove(int id) { //return: QString json; QString err; int code; if ((code = mainwindow->policy_remove(id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } json = QString("{}"); return json; } QString WebCommonPage::policy_export(int id) { //return: error? QString json; QString err; int code; if ((code = mainwindow->policy_export((size_t)id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } json = QString("{}"); return json; } QString WebCommonPage::policy_export_data(const QString& report) { QString json; QString err; int code; if ((code = mainwindow->policy_export_data(report, "Policy", err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } json = QString("{}"); return json; } QString WebCommonPage::policy_edit(int id, const QString& name, const QString& description, const QString& license, const QString& type, const QString&) { //return: error? QString json; QString err; int code; if ((code = mainwindow->policy_change_info((size_t)id, name.toUtf8().data(), description.toUtf8().data(), license.toUtf8().data(), err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } if (mainwindow->policy_change_type((size_t)id, type.toUtf8().data(), err) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } //TODO: when publipolicies API is ready // bool is_public = false; // if (visibility == "1") // is_public = true; // if (mainwindow->policy_change_is_public(id, is_public, err) < 0) // { // QString error = QString().fromUtf8(err.c_str(), err.length()); // string_to_json(error); // json = QString("{\"error\":\"%1\"}").arg(error); // return json; // } mainwindow->policy_save(id, err); MediaConchLib::Get_Policy p; if (mainwindow->policy_get(id, "JSTREE", p, err) < 0) { json = QString("{\"error\":\"") + err + "\"}"; return json; } if (p.format != "JSTREE") { json = "{\"error\":\"Cannot generate the policy\"}"; return json; } json = QString().fromUtf8(p.jstree->c_str(), p.jstree->length()); return json; } QString WebCommonPage::xslt_policy_rule_create(int policy_id) { QString err; QString json; int new_rule_id = -1; if ((new_rule_id = mainwindow->xslt_policy_rule_create(policy_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(policy_id, err); XsltPolicyRule* r = mainwindow->xslt_policy_rule_get(policy_id, new_rule_id, err); if (!r) { json = QString("{\"error\":\"") + err + "\"}"; return json; } QString rule_data; create_rule_tree(r, rule_data); json = QString("{\"rule\":"); json += rule_data; json += "}"; return json; } QString WebCommonPage::xslt_policy_rule_edit(int rule_id, int policy_id, const QString& title, const QString& type, const QString& field, int occurrence, const QString& ope, const QString& value, const QString& scope) { QString err; QString json; XsltPolicyRule rule; rule.node_name = title.toUtf8().data(); rule.ope = ope.toUtf8().data(); rule.track_type = type.toUtf8().data(); rule.field = field.toUtf8().data(); rule.occurrence = occurrence; rule.value = value.toUtf8().data(); rule.scope = scope.toUtf8().data(); int code; if ((code = mainwindow->xslt_policy_rule_edit(policy_id, rule_id, &rule, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(policy_id, err); XsltPolicyRule* r = mainwindow->xslt_policy_rule_get(policy_id, rule_id, err); if (!r) { json = "{\"error\":\"Cannot get the policy rule edited\"}"; return json; } QString rule_data; create_rule_tree(r, rule_data); json = QString("{\"rule\":"); json += rule_data; json += "}"; return json; } QString WebCommonPage::xslt_policy_rule_duplicate(int policy_id, int rule_id, int dst_policy_id) { //return: rule QString err; QString json; int new_rule_id = -1; if ((new_rule_id = mainwindow->xslt_policy_rule_duplicate(policy_id, rule_id, dst_policy_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(dst_policy_id, err); XsltPolicyRule* r = mainwindow->xslt_policy_rule_get(dst_policy_id, new_rule_id, err); if (!r) { json = "{\"error\":\"Cannot get the policy rule duplicated\"}"; return json; } QString rule_data; create_rule_tree(r, rule_data); json = QString("{\"rule\":"); json += rule_data; json += "}"; return json; } QString WebCommonPage::xslt_policy_rule_move(int policy_id, int rule_id, int dst_policy_id) { //return: rule QString err; QString json; int new_rule_id = -1; if ((new_rule_id = mainwindow->xslt_policy_rule_move(policy_id, rule_id, dst_policy_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(policy_id, err); mainwindow->policy_save(dst_policy_id, err); XsltPolicyRule* r = mainwindow->xslt_policy_rule_get(dst_policy_id, new_rule_id, err); if (!r) { json = "{\"error\":\"Cannot get the policy rule moved\"}"; return json; } QString rule_data; create_rule_tree(r, rule_data); json = QString("{\"rule\":"); json += rule_data; json += "}"; return json; } QString WebCommonPage::xslt_policy_rule_delete(int policy_id, int rule_id) { QString err; QString json; int code; if ((code = mainwindow->xslt_policy_rule_delete(policy_id, rule_id, err)) < 0) { string_to_json(err); json = QString("{\"error\":\"%1\"}").arg(err); return json; } mainwindow->policy_save(policy_id, err); json = "{}"; return json; } QString WebCommonPage::get_fields_list(const QString& type, const QString& field) { //return: {values:[value,value]} QString json; std::vector fields; if (mainwindow->get_fields_for_type(type.toUtf8().data(), fields) < 0) { json = "{\"error\":\"Cannot get the fields\"}"; return json; } json = "{\"fields\":["; bool has_field = false; for (size_t i = 0; i < fields.size(); ++i) { if (i) json += ","; QString f = QString().fromUtf8(fields[i].c_str()); string_to_json(f); json += QString("\"%1\"").arg(f); if (fields[i] == field.toUtf8().data()) has_field = true; } if (!has_field && field.length()) json += QString("%1\"%2\"").arg(fields.size() > 0 ? "," : "").arg(field); json += "]}"; return json; } QString WebCommonPage::get_values_list(const QString& type, const QString& field, const QString& value) { //return: {values:[value,value]} QString json; std::vector values; if (mainwindow->get_values_for_type_field(type.toUtf8().data(), field.toUtf8().data(), values) < 0) { json = "{\"error\":\"Cannot get the values\"}"; return json; } json = "{\"values\":["; bool has_value = false; for (size_t i = 0; i < values.size(); ++i) { if (i) json += ","; QString v = QString().fromUtf8(values[i].c_str()); string_to_json(v); json += QString("\"%1\"").arg(v); if (values[i] == value.toUtf8().data()) has_value = true; } if (!has_value && value.length()) json += QString("%1\"%2\"").arg(values.size() > 0 ? "," : "").arg(value); json += "]}"; return json; } QString WebCommonPage::checker_list() { std::vector files; QString error; mainwindow->checker_list(files, error); QString ret("{\"files\":["); for (size_t i = 0; i < files.size(); ++i) { MediaConchLib::Checker_FileInfo fi; std::string err; if (mainwindow->checker_file_information(files[i], fi, err) < 0) error = QString().fromUtf8(err.c_str(), err.size()); if (i) ret += ","; QString file = QString().fromUtf8(fi.filename.c_str(), fi.filename.size()); string_to_json(file); ret += QString("{\"name\":\"%1\",\"id\":%2}").arg(file).arg(files[i]); } ret += "]"; if (error.size()) ret += QString(",\"error\":\"%1\"").arg(error); ret += "}"; return ret; } QString WebCommonPage::remove_file_from_db(long id) { QString ret("{"); QString error; if (mainwindow->checker_clear(id, error) < 0) { string_to_json(error); ret += QString("\"error\":\"%1\"").arg(error); } ret += "}"; return ret; } QString WebCommonPage::add_file_to_checker_again(long id) { QString json("{"); std::string err; int ret = mainwindow->add_file_to_list(id, err); if (ret < 0) { QString error = QString().fromUtf8(err.c_str(), err.size()); string_to_json(error); json += QString("\"error\":\"%1\"").arg(error); } else if (ret > 0) json += QString("\"success\":\"File already in the checker\""); else json += QString("\"success\":\"File added to the checker\""); json += "}"; return json; } QString WebCommonPage::remove_all_files_from_db() { QString ret("{"); QString error; if (mainwindow->checker_clear(error) < 0) { string_to_json(error); ret += QString("\"error\":\"%1\"").arg(error); } ret += "}"; return ret; } void WebCommonPage::string_to_json(QString& str) { str.replace("\"", "\\\""); str.replace("\n", "\\n"); str.replace("\r", ""); str.replace("\t", " "); } void WebCommonPage::call_tooltip(const QString& link) { QDesktopServices::openUrl(link); } QString WebCommonPage::get_version() { std::string version; mainwindow->get_version(version); return QString().fromUtf8(version.c_str(), version.size()); } QString WebCommonPage::get_mco_token() { UiSettings& settings = mainwindow->get_settings(); std::string token = settings.get_mco_token(); return QString().fromUtf8(token.c_str(), token.size()); } QString WebCommonPage::save_mco_token(const QString& token) { UiSettings& settings = mainwindow->get_settings(); settings.change_mco_token(token.toUtf8().data()); return QString("{}"); } void WebCommonPage::set_full_parse(bool fp) { checker_full_parse = fp; } } MediaConch/Source/GUI/Qt/SQLLiteUi.h0000644000000000000000000001411713216666133015755 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // SQLLite functions // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #ifdef HAVE_SQLITE //--------------------------------------------------------------------------- #ifndef SQLLiteUiH #define SQLLiteUiH //--------------------------------------------------------------------------- #include "DatabaseUi.h" #include "Common/SQLLite.h" #include //--------------------------------------------------------------------------- namespace MediaConch { class FileRegistered; //*************************************************************************** // Class SQLLite //*************************************************************************** class SQLLiteUi : public DatabaseUi, public SQLLite { public: //Constructor/Destructor SQLLiteUi(); virtual ~SQLLiteUi(); // General virtual int init(); virtual int init_ui(); // UI Settings int ui_settings_create_table(); int ui_settings_update_table(); int ui_settings_has_user_id(int user_id, bool& has_row); int ui_settings_add_default_values_for_user(int user_id); int ui_settings_check_user_id(int user_id); virtual int ui_settings_save_default_policy(const std::string&, int user_id=-1); virtual int ui_settings_get_default_policy(std::string&, int user_id = -1); virtual int ui_settings_save_last_policy(const std::string&, int user_id=-1); virtual int ui_settings_get_last_policy(std::string&, int user_id = -1); virtual int ui_settings_save_default_display(const std::string&, int user_id = -1); virtual int ui_settings_get_default_display(std::string&, int user_id = -1); virtual int ui_settings_save_last_display(const std::string&, int user_id = -1); virtual int ui_settings_get_last_display(std::string&, int user_id = -1); virtual int ui_settings_save_default_verbosity(int, int user_id = -1); virtual int ui_settings_get_default_verbosity(int&, int user_id = -1); virtual int ui_settings_save_last_verbosity(int, int user_id = -1); virtual int ui_settings_get_last_verbosity(int&, int user_id = -1); virtual int ui_settings_save_default_load_files_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_files_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_files_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_files_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_load_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_load_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_load_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_load_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_load_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_report_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_report_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_report_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_report_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_policy_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_policy_path(std::string&, int user_id = -1); virtual int ui_settings_save_default_save_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_default_save_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1); virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1); virtual int ui_settings_save_mco_token(const std::string&, int user_id=-1); virtual int ui_settings_get_mco_token(std::string&, int user_id = -1); // UI int ui_create_table(); virtual int ui_update_table(); virtual int ui_add_file(const FileRegistered* file); virtual int ui_add_files(const std::vector& files); virtual int ui_create_files(const std::vector& files); virtual int ui_update_file(const FileRegistered* file); virtual int ui_update_files(const std::vector& files); virtual int ui_get_file(FileRegistered* file); virtual bool ui_file_exists(FileRegistered* file); virtual int ui_remove_file(const FileRegistered* file); virtual int ui_remove_files(const std::vector& files); virtual int ui_remove_all_files(); virtual void ui_get_elements(std::vector& vec); virtual int ui_reset_file_for_reload(FileRegistered* file); private: int ui_version; static int ui_current_version; //HELPER void options_vec_to_string(const std::vector& vec, std::string& str); void options_string_to_vec(const std::string& str, std::vector& vec); SQLLiteUi (const SQLLiteUi&); SQLLiteUi& operator=(const SQLLiteUi&); }; } #endif /* !SQLLiteUiH */ #endif /* !HAVE_SQLITE */ MediaConch/Source/GUI/Qt/checkerwindow.cpp0000644000000000000000000004345713216666133017402 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "Common/Policy.h" #include "Common/generated/ImplementationReportDisplayHtmlXsl.h" #include "mainwindow.h" #include "checkerwindow.h" #include "ui_mainwindow.h" #include "WebPage.h" #include "WebView.h" #include "progressbar.h" #include "WebView.h" #include "resulttable.h" #include #include #include #include #include #if QT_VERSION >= 0x050000 #include #else #include #endif #if QT_VERSION >= 0x050200 #include #endif #if defined(WINDOWS) #include #else #include #endif //!defined(WINDOWS) namespace MediaConch { //*************************************************************************** // Constructor / Desructor //*************************************************************************** CheckerWindow::CheckerWindow(MainWindow *parent) : CommonWebWindow(parent) { } CheckerWindow::~CheckerWindow() { } //*************************************************************************** // Visual elements //*************************************************************************** //--------------------------------------------------------------------------- void CheckerWindow::create_web_view_finished() { } //--------------------------------------------------------------------------- void CheckerWindow::create_web_view() { display_html(); } //--------------------------------------------------------------------------- void CheckerWindow::change_local_files(const QStringList& files) { if (!main_window->web_view || !main_window->web_view->page()) return; WebPage* p = (WebPage*)main_window->web_view->page(); p->change_local_files(files); } //*************************************************************************** // HELPER //*************************************************************************** //--------------------------------------------------------------------------- void CheckerWindow::create_policy_options(QString& policies) { MediaConchLib::Get_Policies list; QString err; main_window->get_policies("JSON", list, err); QString system_policy; QString user_policy; int selected_policy = main_window->select_correct_policy(); for (size_t i = 0; list.policies && i < list.policies->size(); ++i) { if (!list.policies->at(i)) continue; if (list.policies->at(i)->is_system) { system_policy += QString("") .arg(list.policies->at(i)->id).arg(QString().fromUtf8(list.policies->at(i)->name.c_str(), list.policies->at(i)->name.length())); } else { user_policy += QString("") .arg(list.policies->at(i)->id).arg(QString().fromUtf8(list.policies->at(i)->name.c_str(), list.policies->at(i)->name.length())); } } if (selected_policy == -1) policies += QString("%1").arg(user_policy); else policies += QString(""); // Create default policy opt-group if (system_policy.length()) policies += QString("%1").arg(system_policy); else policies += QString(""); } //--------------------------------------------------------------------------- void CheckerWindow::create_displays_options(QString& displays) { QString system_display; QString user_display; int selected_display = main_window->select_correct_display(); const std::vector& displays_list = main_window->get_displays(); for (size_t i = 0; i < displays_list.size(); ++i) { QFileInfo file(displays_list[i]); if (displays_list[i].startsWith(":/")) { system_display += QString("") .arg((int)i).arg(file.baseName()); } else { user_display += QString("") .arg((int)i).arg(file.baseName()); } } // Create user display opt-group if (user_display.length()) displays += QString("%1").arg(user_display); // Create default display opt-group if (system_display.length()) displays += QString("%1").arg(system_display); } //--------------------------------------------------------------------------- void CheckerWindow::create_verbosity_options(QString& verbosity) { int selected_verbosity = main_window->select_correct_verbosity(); for (int i = 0; i < 6; ++i) { verbosity += QString("").arg(i); } } //--------------------------------------------------------------------------- void CheckerWindow::add_policy_to_html_selection(QString& policies, QString& html, const QString& selector) { QRegExp reg("class=\"policyList form-control\">"); int pos = html.indexOf(selector); reg.setMinimal(true); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, policies); } } //--------------------------------------------------------------------------- void CheckerWindow::add_display_to_html_selection(QString& displays, QString& html, const QString& selector) { QRegExp reg("class=\"displayList form-control\">"); reg.setMinimal(true); int pos = html.indexOf(selector); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, displays); } } //--------------------------------------------------------------------------- void CheckerWindow::add_verbosity_to_html_selection(QString& verbosity, QString& html, const QString& selector) { QRegExp reg("class=\"verbosityList form-control\">"); reg.setMinimal(true); int pos = html.indexOf(selector); if (pos == -1) return; if ((pos = reg.indexIn(html, pos)) != -1) { pos += reg.matchedLength(); html.insert(pos, verbosity); } } //--------------------------------------------------------------------------- void CheckerWindow::load_include_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+include\\('AppBundle:(\\w+):(\\w+).html.twig'(,[\\s]*\\{ '\\w+':[\\s]*\\w+[\\s]*\\})?\\)[\\s]\\}\\}"); int pos = 0; while ((pos = reg.indexIn(html, pos)) != -1) { QString app = reg.cap(1); QString module = reg.cap(2); if (app == "Default" && module == "quotaExceeded") { html.replace(pos, reg.matchedLength(), ""); continue; } html.replace(pos, reg.matchedLength(), ""); pos = 0; } } //--------------------------------------------------------------------------- void CheckerWindow::remove_element_in_template(QString& html) { QRegExp reg("\\{% (.*) %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), ""); } //--------------------------------------------------------------------------- void CheckerWindow::change_collapse_form(QString& html) { QRegExp reg("class=\"panel-collapse collapse in\""); int pos = 0; while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), "class=\"panel-collapse collapse\""); } //--------------------------------------------------------------------------- void CheckerWindow::load_form_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+form\\((\\w+)\\)[\\s]\\}\\}"); int pos = 0; bool has_libcurl = main_window->mil_has_curl_enabled(); while ((pos = reg.indexIn(html, pos)) != -1) { QString value = reg.cap(1); if (value == "formUpload") html.replace(pos, reg.matchedLength(), create_form_upload()); else if (value == "formOnline") { if (has_libcurl) html.replace(pos, reg.matchedLength(), create_form_online()); else { remove_form_online(pos, html); remove_li_online(pos, html); } } else if (value == "formRepository") html.replace(pos, reg.matchedLength(), create_form_repository()); else html.replace(pos, reg.matchedLength(), ""); } change_collapse_form(html); } //--------------------------------------------------------------------------- QString CheckerWindow::create_form_upload() { QFile template_html(":/formUpload.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); QString ret(html); QString policies; create_policy_options(policies); add_policy_to_html_selection(policies, ret, "checkerUpload_policy"); QString displays; create_displays_options(displays); add_display_to_html_selection(displays, ret, "checkerUpload_display_selector"); QString verbosity; create_verbosity_options(verbosity); add_verbosity_to_html_selection(verbosity, ret, "checkerUpload_verbosity_selector"); return ret; } //--------------------------------------------------------------------------- QString CheckerWindow::create_form_online() { QFile template_html(":/formOnline.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); QString ret(html); QString policies; create_policy_options(policies); add_policy_to_html_selection(policies, ret, "checkerOnline_policy"); QString displays; create_displays_options(displays); add_display_to_html_selection(displays, ret, "checkerOnline_display_selector"); QString verbosity; create_verbosity_options(verbosity); add_verbosity_to_html_selection(verbosity, ret, "checkerOnline_verbosity_selector"); return ret; } //--------------------------------------------------------------------------- void CheckerWindow::remove_form_online(int pos, QString& html) { int start_div_pos = pos; QRegExp reg("
"); reg.setMinimal(true); start_div_pos = reg.lastIndexIn(html, start_div_pos); reg = QRegExp("
"); reg.setMinimal(true); int end_div_pos = pos; if ((end_div_pos = reg.indexIn(html, end_div_pos)) != -1) end_div_pos += reg.matchedLength(); if (end_div_pos != -1 && start_div_pos != -1) html.remove(start_div_pos, end_div_pos - start_div_pos); } //--------------------------------------------------------------------------- void CheckerWindow::remove_li_online(int& pos, QString& html) { QRegExp reg("
  • "); reg.setMinimal(true); int end_pos = -1; if ((end_pos = reg.indexIn(html, start)) != -1) end_pos += reg.matchedLength(); if (end_pos != -1 && start != -1) { int len = end_pos - start; html.remove(start, len); pos -= len; } } //--------------------------------------------------------------------------- QString CheckerWindow::create_form_repository() { QFile template_html(":/formRepository.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); QString ret(html); QString policies; create_policy_options(policies); add_policy_to_html_selection(policies, ret, "checkerRepository_policy"); QString displays; create_displays_options(displays); add_display_to_html_selection(displays, ret, "checkerRepository_display_selector"); QString verbosity; create_verbosity_options(verbosity); add_verbosity_to_html_selection(verbosity, ret, "checkerRepository_display_selector"); return ret; } //--------------------------------------------------------------------------- void CheckerWindow::remove_template_tags(QString& data) { load_include_in_template(data); remove_element_in_template(data); load_form_in_template(data); } //--------------------------------------------------------------------------- void CheckerWindow::create_html_checker(QString& checker) { QFile template_html(":/checker.html"); template_html.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray html = template_html.readAll(); template_html.close(); checker = QString(html); remove_template_tags(checker); } //--------------------------------------------------------------------------- void CheckerWindow::change_checker_in_template(const QString& checker, QString& html) { QRegExp reg("\\{% block checker %\\}\\{% endblock %\\}"); int pos = 0; reg.setMinimal(true); while ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), checker); } //--------------------------------------------------------------------------- void CheckerWindow::change_body_script_in_template(QString& html) { QRegExp reg("\\{\\{ QT_SCRIPTS \\}\\}"); QString script; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) script += " \n"; #elif defined(WEB_MACHINE_ENGINE) script += " \n" " \n" " \n"; #endif script += " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n"; if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), script); } //--------------------------------------------------------------------------- void CheckerWindow::set_webmachine_script_in_template(QString& html) { QRegExp reg("\\{\\{[\\s]+webmachine[\\s]\\}\\}"); QString machine; int pos = 0; reg.setMinimal(true); #if defined(WEB_MACHINE_KIT) machine = "WEB_MACHINE_KIT"; #elif defined(WEB_MACHINE_ENGINE) machine = "WEB_MACHINE_ENGINE"; #endif if ((pos = reg.indexIn(html, pos)) != -1) html.replace(pos, reg.matchedLength(), machine); } //--------------------------------------------------------------------------- void CheckerWindow::create_html_base(const QString& checker, QString& base) { set_webmachine_script_in_template(base); change_body_script_in_template(base); change_checker_in_template(checker, base); } //--------------------------------------------------------------------------- void CheckerWindow::create_html(QString &html) { QString checker; create_html_checker(checker); create_html_base(checker, html); } } MediaConch/Source/GUI/Qt/main.cpp0000644000000000000000000000212513216666133015455 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #include "mainwindow.h" #include //#include //#if defined(_WIN32) && QT_VERSION >= 0x00050000 //Qt5 //Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) //#endif #ifdef __MACOSX__ #include #endif //__MACOSX__ int main(int argc, char *argv[]) { #if QT_VERSION >= 0x050700 char disable_security[] = "--disable-web-security"; //Fonts are not loaded if this is not set char **old_argv = argv; argv = new char*[argc + 2]; memcpy(argv, old_argv, argc * sizeof(char*)); argv[argc] = disable_security; argc++; argv[argc] = NULL; #endif QApplication a(argc, argv); a.setApplicationName("MediaConch"); MediaConch::MainWindow w; w.show(); int ret = a.exec(); #if QT_VERSION >= 0x050700 delete [] argv; #endif return ret; } MediaConch/Source/GUI/Qt/commonwebwindow.h0000644000000000000000000000175113216666133017420 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ #ifndef COMMONWEBWINDOW_H #define COMMONWEBWINDOW_H #include namespace MediaConch { class MainWindow; class WebPage; class ProgressBar; class CommonWebWindow : public QObject { Q_OBJECT public: explicit CommonWebWindow(MainWindow* parent); ~CommonWebWindow(); virtual void create_web_view_finished() {}; protected: void display_html(); virtual void create_html(QString &html) = 0; MainWindow* main_window; //*************************************************************************** // SLOTS //*************************************************************************** public Q_SLOTS: void use_javascript(const QString& script); }; } #endif // COMMONWEBWINDOW_H MediaConch/Source/GUI/Qt/NoDatabaseUi.cpp0000644000000000000000000002367513216666133017045 0ustar rootroot/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a GPLv3+/MPLv2+ license that can * be found in the License.html file in the root of the source tree. */ //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include "NoDatabaseUi.h" #include "Common/FileRegistered.h" #include //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- namespace MediaConch { //*************************************************************************** // NoDatabaseUi //*************************************************************************** //*************************************************************************** // Constructor/Destructor //*************************************************************************** //--------------------------------------------------------------------------- NoDatabaseUi::NoDatabaseUi() : DatabaseUi() { } //--------------------------------------------------------------------------- NoDatabaseUi::~NoDatabaseUi() { } //--------------------------------------------------------------------------- int NoDatabaseUi::init() { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::init_ui() { return init(); } //--------------------------------------------------------------------------- int NoDatabaseUi::execute() { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_add_file(const FileRegistered*) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_add_files(const std::vector&) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_update_file(const FileRegistered*) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_update_files(const std::vector&) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_get_file(FileRegistered*) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_remove_file(const FileRegistered*) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_remove_files(const std::vector&) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_remove_all_files() { return 0; } //--------------------------------------------------------------------------- void NoDatabaseUi::ui_get_elements(std::vector&) { } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_reset_file_for_reload(FileRegistered*) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_policy(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_policy(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_display(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_display(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_verbosity(int, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_verbosity(int&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_policy(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_policy(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_display(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_display(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_verbosity(int, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_verbosity(int&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_load_files_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_load_files_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_load_files_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_load_files_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_load_display_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_load_display_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_load_display_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_load_display_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_load_policy_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_load_policy_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_load_policy_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_load_policy_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_save_report_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_save_report_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_save_report_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_save_report_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_save_policy_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_save_policy_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_save_policy_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_save_policy_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_default_save_display_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_default_save_display_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_last_save_display_path(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_last_save_display_path(std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_save_mco_token(const std::string&, int) { return 0; } //--------------------------------------------------------------------------- int NoDatabaseUi::ui_settings_get_mco_token(std::string&, int) { return 0; } } MediaConch/Source/Resource/0000755000000000000000000000000013216666133014604 5ustar rootrootMediaConch/Source/Resource/Stream/0000755000000000000000000000000013216666133016037 5ustar rootrootMediaConch/Source/Resource/Stream/_Format.txt0000644000000000000000000000127613216666133020175 0ustar rootrootColumn 0: field name Column 1: Filter used before showing the list Format: Type:Field[=Value] (e.g. General:Format=MPEG-4) Can be empty (meaning "all") if value is empty, value must be taken from the stat files with a filter on the field (e.g. select the list of "CodecID" fields after having filtered "Format", so the list of of MPEG-4 CodecID fields is displayed after the user has selected "MPEG-4" for the format) Column 2: Method used for data Format: Key[:MoreData] Key can be: - "List": from the list in column 3 - "FromStats": take from stat files (not public) - "FromSource": take from source file. "MoreData" will be file name and function name Column 3: List of values separated by " / " MediaConch/Source/Resource/Stream/Other.csv0000644000000000000000000000125013216666133017633 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;Other:Format;FromStats; Format_Profile;Other:Format;FromStats; Format_Compression;;FromStats; Format_Settings;;FromStats; MuxingMode;;FromStats; CodecID;;FromStats; FrameRate;;FromList;25.000 / 29.970 / 30.000 / 50.000 / 59.940 / 60.000 FrameRate_Num;;FromList;29970 / 30000 / 59940 / 60000 FrameRate_Den;;FromList;1000 / 1001 TimeCode_FirstFrame;;FromList;"00:00:00:000 / 00:00:00;000 / 01:00:00:000 / 01:00:00;000" TimeCode_Settings;;FromStats; TimeCode_Striped;;FromStats; Language;;FromStats; Language_More;;FromStats; Disabled;;FromStats; Default;;FromStats; Forced;;FromStats; AlternateGroup;;FromStats; MediaConch/Source/Resource/Stream/Audio.csv0000644000000000000000000000306713216666133017623 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;Audio:Format;FromStats; Format_Profile;Audio:Format;FromStats; Format_Compression;Audio:Format;FromStats; Format_Settings_SBR;;FromStats; Format_Settings_PS;;FromStats; Format_Settings_Mode;;FromStats; Format_Settings_ModeExtension;;FromStats; Format_Settings_Emphasis;;FromStats; Format_Settings_Floor;;FromStats; Format_Settings_Firm;;FromStats; Format_Settings_Endianness;;FromStats; Format_Settings_Sign;;FromStats; Format_Settings_Law;;FromStats; Format_Settings_ITU;;FromStats; Format_Settings_Wrapping;;FromStats; MuxingMode;;FromStats; CodecID;;FromStats; BitRate_Mode;;FromStats; Channel(s);;FromStats; Matrix_Channel(s);;FromStats; ChannelPositions;;FromStats; Matrix_ChannelPositions;;FromStats; ChannelLayout;;FromStats; SamplesPerFrame;;FromStats; SamplingRate;;FromStats; FrameRate;;FromList;25.000 / 29.970 / 30.000 / 50.000 / 59.940 / 60.000 FrameRate_Num;;FromList;29970 / 30000 / 59940 / 60000 FrameRate_Den;;FromList;1000 / 1001 BitDepth;;FromStats; BitDepth_Detected;;FromStats; BitDepth_Stored;;FromStats; Compression_Mode;;FromStats; Alignment;;FromStats; Encoded_Application_CompanyName;;FromStats; Encoded_Application_Name;;FromStats; Encoded_Application_Version;Audio:Encoded_Application_Name;FromStats; Encoded_Library_CompanyName;;FromStats; Encoded_Library_Name;;FromStats; Encoded_Library_Version;Audio:Encoded_Library_Name;FromStats; Language;;FromStats; Language_More;;FromStats; Disabled;;FromStats; Default;;FromStats; Forced;;FromStats; AlternateGroup;;FromStats; Encryption;;FromStats; MediaConch/Source/Resource/Stream/Text.csv0000644000000000000000000000230213216666133017475 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;Text:Format;FromStats; Format_Profile;Text:Format;FromStats; Format_Compression;;FromStats; Format_Settings_Wrapping;;FromStats; MuxingMode;;FromStats; CodecID;;FromStats; BitRate_Mode;;FromStats; Width;;FromList;720 / 1080 / 1920 / 3840 / 7680 Height;;FromList;480 / 576 / 720 / 1080 / 2160 / 4320 PixelAspectRatio;;FromList;1.000 / 1.067 / 1.126 / 1.422 / 1.500 / 1.501 DisplayAspectRatio;;FromList;1.333 / 1.778 FrameRate_Mode;;FromStats; FrameRate;;FromList;25.000 / 29.970 / 30.000 / 50.000 / 59.940 / 60.000 FrameRate_Num;;FromList;29970 / 30000 / 59940 / 60000 FrameRate_Den;;FromList;1000 / 1001 ColorSpace;;FromStats; ChromaSubsampling;;FromStats; BitDepth;;FromStats; Compression_Mode;;FromStats; Encoded_Application_CompanyName;;FromStats; Encoded_Application_Name;;FromStats; Encoded_Application_Version;Text:Encoded_Application_Name;FromStats; Encoded_Library_CompanyName;;FromStats; Encoded_Library_Name;;FromStats; Encoded_Library_Version;Text:Encoded_Library_Name;FromStats; Language;;FromStats; Language_More;;FromStats; Disabled;;FromStats; Default;;FromStats; Forced;;FromStats; AlternateGroup;;FromStats; Encryption;;FromStats; MediaConch/Source/Resource/Stream/Menu.csv0000644000000000000000000000023113216666133017454 0ustar rootrootCountries;;FromStats LawRating;;FromStats LawRating_Reason;;FromStats Disabled;;FromStats Default;;FromStats Forced;;FromStats AlternateGroup;;FromStats MediaConch/Source/Resource/Stream/General.csv0000644000000000000000000000124113216666133020127 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;General:Format;FromStats; Format_Profile;General:Format;FromStats; Format_Compression;;FromStats; Format_Settings;;FromStats; CodecID;General:Format;FromStats; Interleaved;;FromStats; OverallBitRate_Mode;;FromStats; FrameRate;;FromList;25.000 / 29.970 / 30.000 / 50.000 / 59.940 / 60.000 FrameRate_Num;;FromList;29970 / 30000 / 59940 / 60000 FrameRate_Den;;FromList;1000 / 1001 IsStreamable;;FromList;Yes / No Encryption_Format;;FromStats; Encryption_Length;;FromStats; Encryption_Method;;FromStats; Encryption_Mode;;FromStats; Encryption_Padding;;FromStats; Encryption_InitializationVector;;FromStats; MediaConch/Source/Resource/Stream/Video.csv0000644000000000000000000000536013216666133017626 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;Video:Format;FromStats; Format_Profile;Video:Format;FromStats; Format_Compression;;FromStats; MultiView_BaseProfile;Video:Format;FromStats; MultiView_Count;;FromStats; MultiView_Layout;Video:Format;FromStats; Format_Settings_BVOP;Video:Format;FromStats; Format_Settings_QPel;Video:Format;FromStats; Format_Settings_GMC;Video:Format;FromStats; Format_Settings_Matrix;Video:Format;FromStats; Format_Settings_Matrix_Data;;FromList;Default Format_Settings_CABAC;Video:Format;FromStats; Format_Settings_RefFrames;Video:Format;FromStats; Format_Settings_Pulldown;Video:Format;FromStats; Format_Settings_FrameMode;Video:Format;FromStats; Format_Settings_GOP;Video:Format;FromStats; Format_Settings_PictureStructure;Video:Format;FromStats; Format_Settings_Wrapping;General:Format=MXF;FromStats; MuxingMode;;FromStats; CodecID;General:Format;FromStats; BitRate_Mode;;FromStats; Width;;FromList;720 / 1080 / 1920 / 3840 / 7680 Width_Offset;;FromList; Width_Original;;FromList;720 / 1080 / 1920 / 3840 / 7680 Height;;FromList;480 / 576 / 720 / 1080 / 2160 / 4320 Height_Offset;;FromList;16 / 32 Height_Original;;FromList;480 / 576 / 720 / 1080 / 2160 / 4320 PixelAspectRatio;;FromList;1.000 / 1.067 / 1.126 / 1.422 / 1.500 / 1.501 DisplayAspectRatio;;FromList;1.333 / 1.778 ActiveFormatDescription;;FromStats; Rotation;;FromStats; FrameRate_Mode;;FromStats; FrameRate;;FromList;25.000 / 29.970 / 30.000 / 50.000 / 59.940 / 60.000 FrameRate_Num;;FromList;29970 / 30000 / 59940 / 60000 FrameRate_Den;;FromList;1000 / 1001 Standard;;FromStats; ColorSpace;;FromStats; ChromaSubsampling;;FromStats; ChromaSubsampling_Position;;FromStats; BitDepth;;FromStats; ScanType;;FromStats; ScanOrder;;FromStats; ScanOrder_Stored;;FromStats; Compression_Mode;;FromStats; TimeCode_FirstFrame;;FromList;"00:00:00:000 / 00:00:00;000 / 01:00:00:000 / 01:00:00;000" TimeCode_Settings;;FromStats; TimeCode_Source;;FromStats; Gop_OpenClosed;;FromStats; Gop_OpenClosed_FirstFrame;;FromStats; Alignment;;FromStats; Encoded_Application_CompanyName;;FromStats; Encoded_Application_Name;;FromStats; Encoded_Application_Version;Video:Encoded_Application_Name;FromStats; Encoded_Library_CompanyName;;FromStats; Encoded_Library_Name;;FromStats; Encoded_Library_Version;Video:Encoded_Library_Name;FromStats; Language;;FromStats; Language_More;;FromStats; Disabled;;FromStats; Default;;FromStats; Forced;;FromStats; Encryption;;FromStats; colour_range;;FromStats; colour_description_present;;FromStats; colour_primaries;;FromStats; transfer_characteristics;;FromStats; matrix_coefficients;;FromStats; colour_description_present_Original;;FromStats; colour_primaries_Original;;FromStats; transfer_characteristics_Original;;FromStats; matrix_coefficients_Original;;FromStats; MediaConch/Source/Resource/Stream/Image.csv0000644000000000000000000000230213216666133017573 0ustar rootrootFormat;;FromStats; Format_Commercial_IfAny;;FromStats; Format_Version;Image:Format;FromStats; Format_Profile;Image:Format;FromStats; Format_Compression;;FromStats; Format_Settings_Wrapping;;FromStats; CodecID;;FromStats; Width;;FromList;720 / 1080 / 1920 / 3840 / 7680 Width_Offset;;FromList; Width_Original;;FromList;720 / 1080 / 1920 / 3840 / 7680 Height;;FromList;480 / 576 / 720 / 1080 / 2160 / 4320 Height_Offset;;FromList;16 / 32 Height_Original;;FromList;480 / 576 / 720 / 1080 / 2160 / 4320 PixelAspectRatio;;FromList;1.000 / 1.067 / 1.126 / 1.422 / 1.500 / 1.501 DisplayAspectRatio;;FromList;1.333 / 1.778 ColorSpace;;FromStats; ChromaSubsampling;;FromStats; BitDepth;;FromStats; Compression_Mode;;FromStats; Encoded_Library_Name;;FromStats; Language;;FromStats; Language_More;;FromStats; Disabled;;FromStats; Default;;FromStats; Forced;;FromStats; AlternateGroup;;FromStats; Encryption;;FromStats; colour_description_present;;FromStats; colour_primaries;;FromStats; transfer_characteristics;;FromStats; matrix_coefficients;;FromStats; colour_description_present_Original;;FromStats; colour_primaries_Original;;FromStats; transfer_characteristics_Original;;FromStats; matrix_coefficients_Original;;FromStats; MediaConch/Source/Resource/Resources.qrc0000644000000000000000000001437113216666133017273 0ustar rootroot Image/MediaConch.png Image/MediaConch-61x38.png dropfiles_gray.png html/base.html html/js/webengine.js html/settings.html html/checker.html html/formUpload.html html/formOnline.html html/formRepository.html html/xslPolicy.html html/publicPolicies.html html/display.html html/database.html html/js/jquery-1.12.4.min.js html/js/bootstrap.min.js html/js/jstree.min.js html/js/jstreegrid.js html/js/datatables.min.js html/js/select2.full.min.js html/js/utils/text.js html/js/utils/functions.js html/js/utils/url.js html/js/utils/size.js html/js/menu.js html/js/checker/base.js html/js/checker/cellImplementation.js html/js/checker/cellMediaInfo.js html/js/checker/cellMediaTrace.js html/js/checker/cellPolicy.js html/js/checker/cellStatus.js html/js/checker/table.js html/js/checker/webengine.js html/js/checker/webkit.js html/js/policy.js html/js/policyTree.js html/js/policyTreePolicies.js html/js/policyTreeRules.js html/js/policyTreeRulesMI.js html/js/policyTreeRulesMT.js html/js/policyTreeAffix.js html/js/policyWebEngine.js html/js/policyWebKit.js html/js/policyUser.js html/js/publicPolicies/list.js html/js/publicPolicies/listPolicyTree.js html/js/publicPolicies/listWebKit.js html/js/publicPolicies/listWebEngine.js html/js/users/userWebEngine.js html/js/users/userWebKit.js html/js/message.js html/js/display.js html/js/database/database.js html/js/database/databaseWebEngine.js html/js/database/databaseWebKit.js html/js/settings.js html/css/main.css html/css/main-gui.css html/css/bootstrap.min.css html/css/select2.min.css html/css/select2-bootstrap.min.css html/css/jstree.min.css html/css/datatables.min.css html/css/32px.png html/css/40px.png html/css/throbber.gif html/fonts/glyphicons-halflings-regular.ttf html/fonts/glyphicons-halflings-regular.eot html/fonts/glyphicons-halflings-regular.svg html/fonts/glyphicons-halflings-regular.woff html/fonts/glyphicons-halflings-regular.woff2 Image/ajax-spinner-big.gif Image/ajax-spinner-small.gif displays/MediaConchHtml.xsl displays/MediaConchXml.xsl displays/MediaConchText.xsl displays/MediaConchTextUnicode.xsl displays/MediaConchSimple.xsl displays/MediaConchCSV.xsl ../../License.html html/Help/Data Format/Data Format.html html/Help/FAQ/FAQ.html html/Help/How To Use/How To Use.html MediaConch/Source/Resource/Image/0000755000000000000000000000000013216666133015626 5ustar rootrootMediaConch/Source/Resource/Image/ajax-spinner-small.gif0000644000000000000000000000151713216666133022026 0ustar rootrootGIF89a888&&&֨vvvfff䘘HHHVVV! NETSCAPE2.0!Created with ajaxload.info! ,P di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB! ,h GҌh*ਨ@$E}eh @ LcQGBP5 <5UdQ+"g0Ak#A nI0$K7 H,-t*E-``1@C7h/1f\)&!;MediaConch/Source/Resource/Image/MediaConch.ico0000644000000000000000000007411713216666133020326 0ustar rootroot hV   F00 % 3D(  22     9I9I9ID$$$   iM?F=6I(<1$-$j$&$$ $*$ m357 6O@AF=J3JI9F_! $$$$$$ "#%lmn! HN@wH>p3JF9I7U $$$$$$ /.02j3+4L>̭G>[4I^9I=+$z$$$$${N@#L&!-$D<2CL>L>ӓa@'8I9I='$y$$$$$#L>NL>M?L>ӪJ>ĨL>D7Ie9I9I4o$$$$$k$KGqC)`@;b@:ZF87I9I9I:D?""$$$$$ $8I8Ib7I7I8I9I9I:EX'1 $$$$$$$9I9I 9IH9I9I9Ha7V&#)$$$$$$$$!$^$$$r$+$$$$$$$$$$(0 22    < %  L>L>B=5I9I :?$$$ $$  P    o C8L>*L>!n9IV9I+Q$R$$\$$$$$/$6$ # ;=>  XL>hpD9It9Iv.j$$$$$$$$$$ P bcd.02  pQ*%L>L>?H9Ia9I9H$$$$$$$$$ B 457cde  as[L>L>R9I_9I9ID.j$h$$$$$$$$  BDE!#  N?JL>L>YF9Iy9I9Ii/p$H$$$$$$$$O     )N?&L>ʨL>K>UV9I9I9It/q$=$$$$$$$$L>4PAVEG&" I<N?IL>ȨL>L>7<7I=9I9I9Ia/q$F$$$$$$$[$L>SL>L>L>L>ϨL>L>L>ǬH>/0J9I9I9I9I3-b$g$$$$$$$ $L>I>#K>lL>L>L>J>d:<4J9I9I9I9I:B $$$$$$$:$$K+JL 2Jx|C4I)K7I`9I9I9I9I9I8.k$5$$$$$$k$$9I9I19I9I9I9I9I9I9I9I9I9IQ$"$$$$$$$$$9I9I9I;9I9I9I9I9I9I9I9H1$$$$$$$u$ $9I9I9I 9I.9IN9IS9IA:AF!$<$$$$$$A$$#$T$$$$$$C$ $$$$$$J$Y$M$2$$$ $"""( @ 229I9I9I9I$$$$    `   >  L>L> L>UF9I 9I"9I%&$$I$-$$        p  L>L>DL>2b@9I 9I9I8N$$k$$$J$$$$$$.$O$,$    :;= "#   ; L>L>lL>~P>M9I9I9I%*$"$$$$$$s$w$$$$$    efh356   K>L>L>L>FH9I9I9I$7Y$$$$$$$$$$$$$ %  WYZ  I'"L>L>L>ӨL>RG9It9I9Ih9I$$c$$$$$$$$$$$   RTU#%'  vS+%L>/L>L>ԨL>VF9Iy9I9I9I%)$8$$$$$$$$$$$t  o !VWY;=>  )L>L>L>K> eE9I9I9I9I*P$ $$$$$$$$$$$+       KC7L>DL>L>L>kD8I 9I9I9I9I/p$$$$$$$$$$$$L>  5 _ S OCL>9L>ӨL>L>L>DsC9I:9I9I9I9I/n$$$$$$$$$$$?$L>FL>+N? q\jUmPAL>kL>ݨL>L>L>E=,J9I9I9I9I9I )E$$$$$$$$$$$$L>PL>L>èL>L>L>L>بL>L>L>L>L>z{C9IX9I9I9I9I9I$"$6$$$$$$$$$7$$L>L>,L>L>רL>L>L>L>L>ѨL>K>W?9IF9I9I9I9I9IA9I$$h$$$$$$$$~$$>=9<J>L>5L>IL>IK>5F=6I 9Ib9I9I9I9I9I9I.i$ $$$$$$$$$$9I9I8I,K_L R2J9IL9I9I9I9I9I9I9I-9J$$J$$$$$$$$4$$9I9I 9I9I9I9I9I9I9I9I9I9I9I9I9I9IE9I%%$$$$$$$$$K$$9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I49I&+$$$$$$$$$L$$9I9I9IG9I9I9I9I9I9I9I9IL9I 8O$$$$$$$$$$5$$9I9I9I9I9I&9I*9I 9I:B9M$$ $U$$$$$$$k$$$"!$ $*$h$$$$$$$^$$$$$$G$$$$$$W$%$$$$$$$$$$$$d``f`b B0BB00@ `? (0` $229I9I9I9I$$$$    6 a h J   L>L>L>L>L>9I9I9I9I9I$$$0$$$   +       Z  L?L>L>;L>L>9I9I9IQ9IT9I9I$$$$$R$$$   ,         k  L>L>L>zL>UL>L>9I9I99I9I)9I$$$~$$$$w$,$$$$$$#$m$j$>$$      $&'    6 L>L>L>L>L>L>9I9I9I9I9I9I$$/$$$$$$$s$I$6$9$U$$$$$$$  =    ]^`      L>L>L>L>ݨL>L>9I9I 9I9I9I=9I9I$$$$$$$$$$$$$$$$$$$$  q    HJKnop       L>L>L>ɨL>L>9I9I9I9I9I9I9I$$$i$$$$$$$$$$$$$$$$$      BDFPQS      L>L>,L>L>L>WL>9I9I9I9I9I9I#9I$$2$$$$$$$$$$$$$$$$$  w  BCE)+,ghj!#%    L>L>bL>L>L>eL>9I9I9I9I9I9IY9I9I$$$$$$$$$$$$$$$$$$$d  F    "    ~<2L>L>L>L>L>`L>9I9I9I9I9I9I9I9I$$$$$$$$$$$$$$$$$$$%     "$&qrt|}~679    D L>L>AL>L>L>L>KL>9I9I9I9I9I9I9I9I$$$$$$$$$$$$$$$$$$$   >         w90L>L>L>L>L>L>+L>9I9I$9I9I9I9I9I9I$$$o$$$$$$$$$$$$$$$J$   B       y  8 L>L>tL>L>L>L>L> L>9I9IQ9I9I9I9I9I9I$$c$$$$$$$$$$$$$$$$    T   k , a0)L>L>^L>L>L>L>L>pL>GH9I9I9I9I9I9I9I9I$$a$$$$$$$$$$$$$$g$$L>L>L>L>L> L>nL>L>L>L>L>ѨL>L>9I9I,9I9I9I9I9I9I 9I$$j$$$$$$$$$$$$$$$L>hL>XL>!L>L>L>L>L>L>L>FL>L>L>L>L>L>L>^L>GH9I9I9I9I9I9I9I9I9I$$$$$$$$$$$$$$$$j$$L>ɨL>L>L>L>vL>mL>wL>L>ƨL>L>L>L>L>L>L>L>U?9I9IO9I9I9I9I9I9Il9I9I$$$$$$$$$$$$$$$$$L>L>+L>L>L>L>L>L>L>L>L>L>L>L>L>L>wL> N>9I9I09I9I9I9I9I9I9I09I$$$$$$$$$$$$$$$I$$G>L>L> L>KL>L>بL>L>L>L>L>L>L>֨L>L>9L>Y?9I9I/9I9I9I9I9I9I9I9I9I$$;$$$$$$$$$$$$$$L>L>L>L>;L>WL>fL>gL>XL>L>L>9I9I9IG9I9I9I9I9I9I9I9I@9I9I$$$$$$$$$$$$$$$$9I9I9I9I9I9I9I9I9I9I9I9I9I9I$$$$$$$$$$$$$$E$$9I9I9I 9I 9I9I9I9I9I 9I19I{9I9I9I9I9I9I9I9I9I9I9I$$${$$$$$$$$$$$k$$9I9I9I9I9I9Ix9Ie9I^9Ib9Iu9I9I9I9I9I9I9I9I9I9I9I9I9I.9I9I$$$8$$$$$$$$$$$$$9I9I9I$9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I+9I9I$$$$$$$$$$$$$$$ $9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I}9I9I9I$$$$$$$$$$$$$~$ $9I9I9IF9I9I9I9I9I9I9I9I9I9I9I9I}9I*9I9I$$$!$$$$$$$$$$$[$$9I9I9I9I*9IY9I9I9I9I9I}9I\9I49I9I9I$$$E$$$$$$$$$$$-$$$$$($$$$$$$$$$$M$ $$$$$ $9$$$$$$$$$$$D$ $$$$$$D$$$$$$$$$$$Y$ $$$$$"$[$$$$$$|$^$9$$$?x8 8       00`<8?x?PNG  IHDR\rf3IDATxwU嵿Bf eF5QQ* DMrӻ$ޛb{o/ߛkI!F%ʠb ;**EP)S L9{sf}>##wwk}8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8{Ny"(@þ;*P@ 4J*B\_#p l7TCQG@ 0( "x^a)k#_ۀ_]&S">_mrdgbx; KD>TqXlb<G$1Ѐ7WWҿ 4h,DVWS"3󀓀J sZZ< 0UH!^X @t0l?88617N`f V/C^} nj1;ӯAa )6Imm+ym d#' Y CӁSB^RX i`)fPyLz$۫QςӀsAG ,>,R;qQ.w8GM&h?AIT,x*}r=^ x3O lSB @PUM`?b3٘1II$UzTlp=Dڪ  N.oÒMsb`υhB 3qD Bo4<|?p6vVwK6 @?IxR=v R_öc)uw *'x¶ \Vzo!ʨ ks=3핓P pbqb5IHvN@XmHmU5K!%wпr :FN3@%f3ʉ R>e} 0#tCꪪEILz\pV Ap`Q[5|U9 "l\+v:CsdUm6/pp⽂.ݸ/G*'>\+CS5=p*Z!1l6`k`*9"P3cUoASP DIbՇ?QQ %Slj+U9MsULs#&OM 2c쒺фԯW` @#^5,9A%MwcrYBF/hfƊ\ XwFy7_2b%c{|]J#MI^P5A3P[U * l|[!/E%0k03=ArաۄjfWP7~2a*xہ`B$&|O([7xD-rD |m\x!p/p)/ŨA"g/{OD28 VrDoHbm~9>A?/+VaՇK5<^`W3Pq.05hZ_cq @6qLvZyd\d aq LвWe^~CF3``zc;b!k byz9zGX7vebQLc ,/.I Wxd Fcy湤3K J2 F`v:\ߘX |QgB` pע!BqA]_8|1?O݋"7bQ2ӟX |lVN_!d6Vl36_T¿ 0x:_Gɟm&%!ظ AEvX}}od$2wULZj7Fbe%k 9s}3bb OmӤl:;60k-F͌'I1U<ԑMb̝X|)jƪǟN1(JpL(\ ln./F0&$Ǫު^ , Ѭ VU#BB__ *͢*/ @/IzZMc`A`}A+D`d 8GqI@Hb,p =g\ΆO$H']3 [$$TT7?vλ ^*d1jٻ6f8T 1o`s3՘o=/B/:9,BFj":ѯ`9LǠA> uf-99 @);wcl;2ڍ:wޘA[jf<$Gò )!(!6 6byDxkle8 53`ьU(ޮBm3&`wv / Q{#w`⃁c$ s=XYz^mդ\lP3c!ɹXE|`*y/p5#7 \  j$)(۫&t0dE3V`$@$q<~<QoE%m* ;nZ4-",* d]Qv N:ǢD K4،mU1 'hHW@ZsS0ۙyoXXȑX!*$vF1#vc/;0͘~z, ӶD(<_K{4LM餬< \lX~= ĠvQ"GY5H(ðU x,uV2Zؒ۽ ==ςD<ಬ_`e╅~VU^³ X\hM.X)Q$DLÔ&cM%s-bEcw <EoN`Y?\|'xx=K^L7y4s(GSdlw &} @9M^8]TxKTge0 |^ϡ#;i ͸8z+ 6`q aYL mcRWI x+N/C@~ |=`slzioAUbwbZ$vT5S F+TP" u)#*,` 8%9["}6#DW`?ef~)6{iO`MkXP4<h  (ڟ]IGdu"n nEC|ի}㛁NoaA6WTx8;JE EfVv/;6p/{z9\ z.(`N3Bm ),Af n&t=fvcu) @lsUea9cщבχ|[ٷ( +:2u!X`2NcDn%srl "?.@R՘0b嵛YUi@hEL_v#a!xC|BGc9bţȿV wF58kښ(%Ȧ܅<WV`mU5"^uXf`'\-J} >vp=Vp0vcj-jlzɰh(t=`[-Tᘞ4RֿzTDYAq:!g,_5(?WjΎ^'`[ق9b`m)‰ia mܱg1ݶlU I,4M= 7b5 b8rK_XU"9POa^P6' Y57^[k5i |NUV[UDe$_Eӿq0cJbהla%z9FcG}~%JQnZ&-ϳ `k̓[ f-آ*6C|&7 DGYl{͙ $R|&~7pzG/F`H[CStua}"f0xM%X[Ajg+Qx^t )?83~r00Q ºfo VWY &*d `s] W Ϟ*g`T >W ay[ FPba':q3W+Ʊ Sᯘc/m5}7vf- T2L?]zWf{V?t *WeP>( C ?r;F| ob[Y‰ǖ^z9Q( W$V= ? Cų,\KTL?q}e .Gچ.tN>ZOqۼc".sx MYϛox}qkµG0m<>,[\ v@( $h,aX-F q:p@m ;f x ܆ erlE=J`y.&;&=Gb5 @V,|?LJ,;2 k;*egn,+}fI3$>>89C! gooo&aG|e? a:| |x{z5#=;~eᑝmF`֥Н6Y5e )P)ƒXoFĒrcf[6KK^a+JPAXrϞW`¸2/ewR A(I @we:D ZNz%/KBGk Rc@.6Yv=K1$f ȏ>̯4M$Ԋk{bKKMꇰ< dO`Vy4)pJ@"śXHlR(5ώiVk(iPf ~{L,\Yi e8XuH!AG8|D e{+G<:- sz%87WI0 = T-cEVKXRr,G3/9|55J0QOSrS~APt6(xdH(a+6c$$Rݖa#P["p)}AV^V AGvA;aC2ل5l8+"fƞ11E<Dw~ws#'`ƫ) G8J,M:J^& Lj=8WN-ze.s1pM3>j ވhlDC)chLs0%%BzlL0H_Lz' ~[IL? ^M>֑ycTo~_W #7s@&O}:p,?҈R)!"ƓmR |Yl FQP h[ckr)1Hg 3GՀQ+apGNce̘1 2T*ICC7n5kؾn=/ҼIJ1ƾl)yOMw"WA$4ˆfעej3Qv}GcjA BXE20#(}?~<]7ݵ^zﺋ;n͛7GiF`IZ@fDo*{9{36+N~]`u]HT?$y'V?v?&ao;779ꨣ8 Ή'ķ]כ9Qo ΦPi$fJH ?V}`8_:'[ނa2^v0d„fiZ=O~;=<0:^&'|<>`j}$x>$$,ő9 j;+͘BpUήC Aдs'MMM{3fEeeUF`HGo*<ܓ; !zhwbۉxEdrbS8(+-D m\tQgi0 y}d ,[I~q1碋 TD;`%rg}l7$BR>cP18?Yth'Bu:F|>OsMaժ\3Ys9pƙg2thde>p(F'D#X+=#HKD@Fv gnԓ-dL/c9 v~{x i&ORNn\8JKKNTLOӣi Nm$E5 )`,Hۇ (RmdDUUJJJ8N+ky_瞥s).$c|o_ZUI < x6qunv zL?)fn/N 8yp o)=xv-wFzYj%5!.&yan &˪dÖL2geGH "x*Jso2ѦK Dr؇iZR1#tR> xDZx:Mi!s eeel۶ܹKÑG)JcKB?"a+vnzjDGiG3M,zT)..E@)#]툔Ip}#lHPUvESS>֮ 3f ħLzرcG` _r Ֆ[XC'8e8pFǤ @"AP5n?O:!-[;9dh :p *Y]$Nlcpeq1]`xk HtaȔNsI'#o~kxabI'} Dgc󟌶WN N քK5ѝJ"\w|)O 3~`= {he~) ?NnFDY.M8n„n @Yary9 | q~Ekkk{v^u{ "O߮1Cƽgg#ȯ 8 ESݷuZ_vUk_COO2T*ANQ8dW0z"(9!o$ҽH ;sl?[ŗXlAIJ"Glh/iz[ۀ() _N%MJ .i)%Փ&Q\oǼKqb7kz7q K`- \CJE[+G)5; ̱yֹڗ_ի5V85zɃ|G|yy0ʢs{q pj6>s { mBv)DbSܛa&ucRzc1qys4f$c=^]d)30KDȣYJ ʺQvĔru8wl~ԋƢڪIXA.$wXaZsV7e0vb~7F]Uc7MbUȾ1P|xlj*4? ƚ%~G}Ew=p/bc`<O@kd¢q hC *4;Y;IiIfc=#F -X`)`f^v/!ZĜ3MWl[q󗜂]N׫֚x復?15bu1pң?57RU>S*^cdZWMXa3opQ ZIHxҫt}@ĺGʝcv0;ӊv2 :NB@-Ro𲐉*$ރקz~cKPFmmw|˺2u+6_bͩͅ_:ýx' v|stofBk]6:oa+#w,B}O5\<}vo\KEySQؘݕ7NnF oK9U" B ÿl= P閦`Gce# B߁{Px fOd#:t ! nn{D<# KwU M/~MQ1rZGUՍU~Xtv]]^U"Tl[>|Ӛ0Ƕs}{Jҩ YrEnÓpقX`G{IW1w줢,<\|{4-Xӵ" g*R&~֒) z%{iCHct$MbүgEM (Vl˄o`dY6)(߰N,Rl8"RDs9&_{ƐO.ip,Kg?]7ix^?jVb{7QQ1;Ly]FI^'Rc zWў2 w4dϣ-CM[u9[(D>-Ѿۆ ,P뜛+///AMñ(LJ@=6c+f,ev Vƹ/Z06y%R&$~L6~ y,DX^~u= K|!P$*$)<IA[/Qu{SR$*6yHYz뀏a7ģbD>;"f}53Ou8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8p8(KbIENDB`MediaConch/Source/Resource/Image/MediaConch-61x38.png0000644000000000000000000000171513216666133021121 0ustar rootrootPNG  IHDR=&wsbKGD pHYs.#.#x?vtIME [LYZIDAThݚ=@Ƿ-s_갘BbBM2qu:afr;l )Bo0γ<8;O%ɮlyyfW쑰WHF5~&;xpXF*b c/^xŌ(}fFHiB)aQoymF }jr8,v*_8 = gu`m.YW uWp,@ ñ+6 ^%m(spbDh`]Lr s5sJ+jOʜn/o?FQ b6mRꌄ] N,| \n3 Zi5 ]kcS8gN3+s YbW ,[̆DV<{}mnL+Z NOީmt:Wļ_On<9=Pv+{]^\lC[`:VۀЮB hl>R<9 o]z5UvZuuT2»1 9esbSE image/svg+xml MediaConch/Source/Resource/Image/Windows_Finish.bmp0000644000000000000000000045565613216666133021305 0ustar rootrootBM[6(:x[OOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{躗vyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+RˁנЌ7ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}(ʷy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+ 9ԛۧ7ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}*̽yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+dЌȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}*鿦xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+oXȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx~*¢ݎBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+fτȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۆ2ϳ寄}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+:߯ͅV,%'Iޭݤ&ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxߕNԾڅ*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+Ύύ2"GOI&2щ+ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{ 絍ߚ]yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+I3=Ֆל3:)ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxݐLŸق-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+n٩;ۦs ̈́֓ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۉ>ˮ絉xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+ӋӋު|{lȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}黕qyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+)߫ט:ՕKȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyߙ^ۇ4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+5֚_8WQȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|âlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+8͉A,_Wȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxx}܍Tܒaك2ڂ"ӽ泋|ۈEݓcڈEzxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+4t 3VoԍOȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxyߙZ赅ۈ-緒ۈ6ίͮچ3xxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+3߲+4́7ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxy܎I龢ɷjۆ*緑ڄ,汋˻尉ف(xxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+Tا̀޹ןȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxyx~ε孀yxyxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+Ӑܬx}Xˀȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy {ޔOxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+ޱP+ЇݧdgNȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxڅ6ӻ齜}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+߳ܬC23& kԛȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz ]γۉ8yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+٢ӎ\B?Kpڣ9ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxڃ0ޓRڅ0cֿƨݏIۉ;ݐM~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+kd ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+&ωΏ:ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxx}yxxxx| 蹕cyxxxxzف#z xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+&lӋnKȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}꿝jyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+ 7l٢߳ޱӐT3586*ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}꾜iyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\+::::::+ȓ!A=:OOOOOO?;:g!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzvɣݐLxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\*::::::*ȓ!A=:OOONNN?:9g xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx~#ڃ3{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[*999999*ȓ!A=:OOONNN>:9g xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[*999999*ȓ!A=:OOONNN>:9g xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[*999999*ȓ!A=:OOONNN>:8g xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[*999999*ȓ!A=:OOOMMM>98gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[)888888)ȓ!A=:OOOMMM>98gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[)888888)ȓ!A=:OOOLLL=97gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[(777877(ȓ!A=:OOOLLL=87gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[(777777~(ȓ!A=:OOOLLL<86gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[(777777~(ȓ!A=:OOOKKK<76gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'666666~'ȓ!A=:OOOKKK<76gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'666666~'ȓ!A=:OOOJJJ;75gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555655~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;65gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555555~'ȓ!A=:OOOJJJ;75gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'555666~'ȓ!A=:OOOKKK<76gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ'666666~'ȓ!A=:OOOKKK976P-['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['['Z'pI0666666{^0~(~(~(~(~(~())))*****++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++m1=;:OOOLLL777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777877888888888999999999999:99:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOLLL777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888999999999999999:99:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOLLL:98sT```````````````````````````````````````````````````````````````````````__````ydL777777pJ1[([([)[)[)[)[)[)[*[*[*[*[*\*\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+R1<;:OOOMMM><9ĝm}||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ݯwgl٬u|}`888888[)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOMMM?<:Ğmx܌?ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ۇ7ׅ7̀7҃7ڇ7؆7qC½Ŭq@ڇ7ޒJ}`888888[)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOONNN@=:Ğmv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxhpinUnltg߲`xۇ7|`999999[*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOONNN@=;Ğmv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgəlRYފfSoxۇ7|`999999[*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOONNN@=;Ğmv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg˗۫[%rsه7|`999999[*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOONNN@=;Ğnv~ xxxxܑ\چ;yۍUڅB{܏PڈG}"ޙjᣁ~ۊDڄ7ߝrߛmݒ\~"ݕdـ&ܒbᣁwݔ\~|ݔ]ᣁ~܍Ly ܏X~}یQz܍I܍Oy ۋDܐTzݔdᣀv܋Dݕc}'|ݓ_ـ4xxxxxxxgzYB΁7|`999999\*xxxxxxۊN܌NzڅCۍTy ۊB܎Uzݓ^ᣀᣁݐVـ*ޙhᣁߜnޘg~ݒ^څ7ډNᣁzޘfڃ-܏VۊAڄ:ݒU%ـ-ݓXڃ2ݑVۉ@y ۊC|ᣂܐYzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOO@>;Ğnv~ xxxzʵx܋Fѽ綔ۊ8ƞ屏p;m跏ѹݏIbη׽ޓJ~ޕ_ϵȪݒW꿜}"鹈ǦߜnԾDZoۍT܈/ѹޘkxxxxxxxgӗwgЂ7|a::::::\*xxxxxx淛꾚ۆ4ʳۇ4鸅ĨޖZ宄tֽޑF͹x꾝`ũ趃vΩޓPޕ_Эhʩ赂܋>ɬηݑZxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxz͹zӷߗYȡ綔ȤȨڈIلA܏L˥泑~%緕ѺݐKtԳ~䭇ؾ[緖|+ߛi洔ͮۊCڈAʯ䭉Õ~#껋ʩ¬éق3yސ@܍V܉0Խޙmxxxxxxxgߞvg؆7|a::::::\+xxxxxx縝ߗ]ؾp麈ƫ蹑Ӵ܏XلBڇA뿑Ʃ}$tޒGм賁ͦ蹙ߛibȬ鸅xѬޔRޖaӰiͭ鷅tؼܐY#ǫ沅}xxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxz͹糂šѹyɢ綕гаΧ沌{㫈жݐKZ毀s־ۉExxx浘ƥڃ,~%ɵ峖ĘƧق.뾐ɧı纡{xݏ?ޘgݍ<սޙlxxxxxxxg埄whvۇ7|a::::::\+xxxxxx縝Ÿ跅ͱũ黑뽋ǫ꿜ռɟĤ}ޖbޒFмwlҽcȬ鸅xմߘ^ޗdԲgͭ鷅}Ӳ܍N{ف)xxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxz͹ԹߖU|Ҳ̦洒汁Ӹ輧Ҹ鸈麔й綘ֻԿݐKQߚm渠Ǵгqбڄ<Ğnv~ xxxzϻػʭ| ڇEڽ岑ق2泎Ƕ輢ڇCۇ6涗Ƴʱж܊;屐ۉ:᥁ƴŲ~ޕSֿݒQyxzz⧁Ųƴ᥀}"l縕­¯څA{㫇Ƴ鿦k龟ǵ䫂"xxxxxxxg榍hwxxۇ7|a::::::\+xxxxxx繞պچ?}$ζ׹Ǭ~%}ųݓ^ـ%䫃ǵ§ސC㫉ޓSޗgİƵ屑~)Ǭ鸅ݓY宁鿧ų⧁y᥀gïǷ寊ق)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxzѿpy }鸐泑xxxxxxxxδۆ+چE&xxxx~$꾚̴ޕ[ܑ\洎}#xxxxxxxxxxxxxxޏ?܎Vxxxxxxxxxxg褋h vxxxۇ7|a::::::\+xxxxxx繟跎}y rɰzxxxxxxx܎Vޏ@ل@ف0yxxxzǬ鸅~xxxx~'ŠĞچAyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxzëϷڅ;xxޗc㩃xxxxxxxxߜr܋Cɷoy xxxyچ7踗꿛}"xxxxxxxxxxxxxx܋8ɱۉMxxxxxxxxxxg衈|iwxxxxۇ7|a::::::\+xxxxxx䯏ݓ[xxڇAӽ輟yxxxxxxxۉMɱݍ>沇}xxxz軜x|xxxxy ޗf鼡ـxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxx~*,yxxzـ1|xxxxxxxxz~(y ـ3|xxxxxx|"ق<ق;~&xxxxxxxxxxxxxxxy,yxxxxxxxxxxgiwxxxxxۇ7|a::::::\+xxxxxx|"ـ0zxxy /}'xxxxxxxxy,y /}#xxxxx}&|xxxxxxyق:~,yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxguA gwxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtpwxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxwhr~b lpxxxxxxwuqovxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxu?e:"fKYwxxxxxwsnf]`qwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxulWF\swxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxxxt^h8Gjwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxxxxvaZ0h8dvxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxtdY_pwxwwx|{xsk:r,wxxxxwwxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxvlhsvxxv[? `3ewxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxtVO.4$B(I oxs oxzp/N|H_pnIs/s,nFbfcdnIwxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxwsaISnwxtL$p<mxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxwgN.>?A!"#3Xvndu+ĄvW;)A+^:vFyGb<Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxv[)#$%\]^OQQ{F uj[+sn8$ze^P2$& ( (!& $( oAu4xxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxwwwxxwg\1]2fwv~E M)hxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxw_3"BCD{|}vwx&Ksb'V2rh<1}m8i>% $$$$$2%Qvxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxveI|DOjwxvU)xAsw^5 Tuxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxll> 2.,QQSAAAO/bnW3X1s \?o8ʀ r%yG(!$$$$%M1ϳe_wxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTww`Q* +*)' g8hxxgW.<]xpJ&f7qxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxvfH b9sA]o _*O;`(w&JCj;ǁtJ*"$$$$*!{Hr3xxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwpe6 %%%VVV$$$LsxtyBMwrW/G%oxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxwr sojmm_+P:T6mȁ~5>Gp8 s"|I)!$$$$G.իarw xxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTvaD$:::MMMS-nxwG Gurb5 =oxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxvj`&`%a%^,V4O:S7f"y &NC?H/|o2nA& $$$.#Kq2xxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTv`I.NNNmmm(''Q+nxwG Etrd6 <nxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxuk`(Z0X3Y2^+kz $^@;HSC yf[S4$$$' \8ɴf]wxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwonH,uut'$"Grxv~D Kwr\2A"oxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxzxt rt z -YA<Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxy''&*3g=FE:HDFx8w faZ7%$%>*ݏRr/xxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxvk [0pG!Livxw]5`3mwf>Ksxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxx~ &i;RBHDAF?GGE]@0xjSqC-"$' G.׏Rp7xxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxwtrtxxxnt?A!ZvvM"5cwxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxx|*363*} t#djnB1$& 5'e=[~r,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxrQP*Tsxod6zCpxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxz|}|x p'c\OV56'D-j@WjMvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxwiOwA`txwV/S,exxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwo)[d~JpCyGUdjoBuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxvi`hpwxwfY/A!Xuxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv t&s5s5t+uwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxvvxxxwlt@I&Tsxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxxxwj~Ea4\txxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuF`6cJTwxxxxxxxxwtcyCJivxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxuCa7cJUwxxxxxxvtmWRhsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxv-V^ gwxxxxxwrkgquwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxwxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğnv~ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxۇ7|a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Ğn{ڄ0~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ܌?}a::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOOA><Šr˟{vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxa::::::\+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg!?;:OOOOOO>=;`ŠrĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĞnĝmtU::::::R1g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g![+>;:OOOOOO:::>=;A><@>;=<;::::::<;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:?;:>;::::OOOaaaOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOaaajd\YRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIYRIZRJYRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=4F>4G?5H@7IB9IB9E>4E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3G?5IA8NG>QKCKD<\WQlfa}ysa\VE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3c_Z{njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4Όa\WE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4ɉ`[UE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4njeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3}zЗnjeE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3JB9QJB_YRhc]XRL}zvhd_E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=4H@6KC:OH@UNG[VP]WQHA7E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>5YRIE=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3E=3F>4LHA82,93,93,93,93,93,93,93,93,93,93,82,82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82+82,omkGC@2.*4/+4/+4/+4/+3/*3/*3/*3/*3/*3.*3.*3.)3.)3.)3.)2.)2.)2.)2.)2.)2-)2-)2-(2-(2-(2-(2-)2-)2-)2-)2.)2.)2.)2.)3.)3.)3.)3.)3/*3/*3/*3/*3/*3/*3/*4/*4/*4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+4/+IEAHEA30,41-41.41.41.41-41-41-41-40-40-40,40,30,3/,3/,3/,3/,3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/+3/,3/,3/,30,40,40,40,40-40-41-41-41-41-41-41-41.41.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.51.JGDIGD42/53063063063063063/63/52/52/52/52.52.52.41.41.41.41.41-41-41-41-41-41-41-41-41-41-41-41-41-41-41-41.41.41.51.52.52.52.52/62/63/63/63/63/630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630630KIFIHF53165275375374264264264264164163153153053053052052052042/42/42/42/41/41/41/41/41/42/42/42/42/42/520520520530530530630631631641642642742742752752753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753753LJIIIG643764764764764754753753753643642642642631531531531531530520520420420420420420420420520520530530531531531531641642642642742753753753753754764764764764764764864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864864MKIJII654875875875875865765765764754754653653643642642642532532531531531531531531531531531531531531532542642642642643653753754754764764865865865875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875875MLJJJI766887987987887877876876876765765765754654654654643643643643643543543543542542542543543643643643643653653654754764765765765876876876987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987987NMLJJI776988988988988987887877876776776766765765654654654654654643643643643643543543643643643643654654654654654764765765765776876876877987987987988998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998998NNMKKJ877999998998998988987887877877876776766765765765655654654654654654654654644654654654654654654654654765765765765766876876877887987988988998998998998999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999NNNKKK877999999999999999998988888887877877776766766766766887765665665665655655655655665665665765765765766766766776776876877887987988998998999999999999:99::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9::9OONKKK888:99:99:99999999999999988888887877877777776887SRRihh:99766766765765765765765765765765766766766776776776876877887887988988998999999:99:99:99:99::9::9::9:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::999999999999998988888887877877888^]]@??766766766766766766766766766766776776877887887877877887998988988998999:::::::99:99:99::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::999999999999999988888888998_^^[ZZ888777777776776776776776776777877877NNNoooFFEIIItttyyyoooyyy===:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::99999999999999988:99]]]^]]999888887887887887887887887887888888888aaa֬~}}´pppƯ{zzlll<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::99999999999999:::^]]]]]:99988888888888888888888888888888988988988baaccc[[[яȔ]]\::9PPO载VVV:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::99999999999ccc͐zzzDDD988988988998998bba֮YYY͏eee===PPPٹ^^^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::999:::ѿTTT999999999999999bbbټ͚EEEʷ^^^ccc;;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::999WWW̊rrrrrrrrrrrrrrrrrrrrrrrrmmmBBB999999999999999bbbdddTTTqqqiii<<>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::;;;WWWggg<<<::::::::::::::::::::::::::::::::::::TTTooo;;;::::::::::::::::::::::::GGG<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::XXXddd;;;::::::::::::::::::::::::::::::::::::=========;;;::::::::::::::::::::::::::::::<<<;;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::WWWCCC:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::;;;MMM```<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;::;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::{O2_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(^)oJ4::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::_(xxv$z%wwxxxxwvwxxxxxxxwW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxffo fwxxwqhimvxxxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb8l^wxxxwuhQ\qxxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wxxxvvvlGKnxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wxxwm[guid6LrxxxW-:::::::::::::::;;;XXXKKK;;;SSSLLL===TTTNNN@@@```mmmkkkOOOHHHdddlllcccYYYAAA\\\CCCYYYmmmhhhZZZCCCYYYIIIOOOUUU>>>JJJWWWFFFYYYIII<<>>TTTUUUuuuϊξaaavvvnnnTTTwww^^^ԪNNN::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^vj[\ku]]2ciJ(xApxxW-:::::::::::::::>>>mmmYYYQQQ]]]TTTddd͏ŒrrrĈWWW{{{]]]aaazzz<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^lu@1& =40q?nni9Fje7D$jxxW-:::::::::::::::>>>ŋϵ===ddd|||sssĈYYY{{{LLLIIIAAA:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^`E-KKK```8! fqHX0iwA-hxxW-:::::::::::::::>>>{{{ȥ©dddpppmmmmmmĈܒͣІ~~~===:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^egREzzyjjjC+gqGZ1ivA.hxxW-:::::::::::::::>>>ÿIII___ĞWWW̾fff```^^^bbbʜRRRĈȌӄ̘III::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^rg;pe^NCMqmd7Jkb5H'kxxW-:::::::::::::::>>>䒒>>>GGG䟟;;;???CCCAAA;;;;;;@@@BBBRRRKKKAAA>>>BBBBBB>>>NNNĈ@@@???BBBBBB===___EEE>>>BBBBBB>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wt lhqu[a5ehH&}EqxxW-:::::::::::::::>>>^^^:::;;;zzzؘ::::::::::::::::::::::::^^^===:::::::::LLL===::::::::::::DDDڑAAA::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wxwwtcG_rRO*_wxxW-:::::::::::::::;;;XXX\\\>>>::::::DDDaaaNNN::::::::::::::::::::::::HHHXXXAAAaaaNNN;;;:::::::::===YYYHHH::::::::::::::::::KKKjjjRRR;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wxxwn_lvf_3RtxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb7l^wxxxvwvh|ERpxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxb8l_wxxxwthO`sxxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxjuxp jxxxwrkiqwxxxxxxW-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxyxxxxxxxxxxxxxxxxxW-:99:99:99999999999999999999999999999999999999999999999999999999999999999999999999999999999999:99:99:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxW-999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::999888999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::Y,nnnnnnnnnnnnnnnnnnnnnR/999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:99:99:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::999CBBsrr]\\777:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::C<9K>8K>8K>8K>7J>7J=6J=6J=5J=5J=5J<5J<5J<5J<5J=5J=6J=6J=6J=7J=7J=7@;8999999999999989989888888888888888888888888888888888888888888888888888989989989999999999999999999999999999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::433322766:::655pooࡠ444:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::<<s7lOlPv$xx^9IIHIIHIHHIHHHHHHHH```VUVIHI\\\VVVKKK]]]XXXLLLhhhsrsrrrZZZTTTlllrrrjjjcccNNNeeePPPbbbsssooodddPOPMMMdddtttsss___MMMaaassssss```ONN___```NNN]]]cccOOOggguuuqqq^^^gggRRRPPPfffVVVMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMNMMJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::==mAU4[8lfxx^9IIHIIHIIHIHHIHHKKK^^^```{{{ёkkkpppӮnnnմlllVVVuuuɖpppbbbMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMLLJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::===LLKe5xxlf<GIJOOPuCf_(/!^4&' ( & X7mXxx^9JIHIIHIIIIIIIIILLLuuuccc\[[ggg___nnnЗƑ|||˷]]]bbbvvvrrrWWWkkkXXXpppsssdddɅMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMݲJIIJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::===LLKe5xxtT UA4]D5X_&^*m7"gq=*$$,#Os%xx^:JJIJJIJIIJIIIIILLLȒйLLLnnnЅԔoooLLLLLLMMM[[[QQQZZZPPPMMMmmmzzzgggɄMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM><!fq=*$%P2ѯcjwxx^:JJIJJJJJJJJJJJJMMMDŽ˨ƯonozzzuuuɚbbbLLLLLLLLL˘˖זƯǑ}}}zzzۺ|||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM988:99JJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::===LLKf5xxth`#\*[.h$ i;c< \3%$4%Ps%xxx^;KJJKJJKJJJJJJJJNMNVVVhhhɤcccpppkkkjjjnnn͢~~~oooMMMLLLMMMTTTΤ\\\oooYYYÕԿЪ^^^MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::===LLKf5xxx| ~|)i;NC,u;tE*!,#k@jLxxxx_;KKJKKKKKKKKKKKKNNN晙NNNVUV椤LLLPOORRRQQQLLLLLLPPPRRR```YYYQQQOOORRRRRROOOXXXhhhbbbTTTOOORRRRRRPPPMMMPPPRRRSSSSSSNNNMMMPPPSSSSSSnnnvvvSSSQQQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888::::::::::::::::::::::::===LLKe5xxxŀ )z6m:[>`>-|3WA+4%f=f`vxxxx_;LKKKKKKKKKKKKKKNNNiiiKKKLLL۞LLLLLLLLLLLLLLLLLLLLLLLLjjjNNNLLLLLLLLLNNNnnnԸWWWLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMjjjpppMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM```KKK888999:::::::::::::::::9:99=<JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJKKJKKJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK^^^III555777777777777777777777777:::JJJRLJXNIXNIXNIXNIXNIXMIXMIWMHWMHWMHWMHWMHWLGWLGWLGVLGVKGVKGVKFVKGVKGNJHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIJJIJJIJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK^^^III555666666666666666666666666888????????????????????????????????>??>?>>>>=>>=>>=>====<==<==<==<==<=============>==>=>>>>>>>>>>>>>>>>>>>>>==>====================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????SSSIII444666666666666666666666666666666O=4aC2aC2aC2aC2aC2aC2aC2aC2aC1aB1`B1`B0`B0`B0`B0`B/`A/`A/`A/`A/_A0H92443443444444444444444444444444444444444444444444444444444444444444444434434434434434434434434444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666KKKHHH444555666666666666666666666666766\&t t t t t t t t t t t t t t t t t t t t s R(333333333343444344344334334333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444434434333333333333333333333333333333333443443444444444444444444444555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666KKKHHH444555555555555555555555555555655^$xxxxxxxxxxxxxxxxxxxxxU'332332333333333333333333333333333223223222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333443444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxxxxxxxxxxxxxxxxxT&221222222222222222222222222222222222112112111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333443444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxxxxxxxxxxxxxxxxxT&221221222222222222222222222112111111111111111111111111111111111101101101101101101101101101101111111111111111111111111111222222222222222222222222222222222222222222222222212212212212212212222222222222222222222222322333333333333444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxxxzځڂف}yxxxxxxxT&221221222222222222222122111111111111001000000000000000555mmmppp000000000000000000000000000000000000000111111111111111111111111222222222222222222222212212111111111111111111111111111111111111111111211211222222222222322333333333433444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxف$ebɯ麓jߙ[|xxxxxT&221221222222222222121111111111111000000000000000000000<<<000000000000000000000000000000000000000000101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111211222222222222332333333333433444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxx|{ğΫߘ\yxxxxT&221221222222222333RRRDDD222MMMEEE444LLLGGGDDDeeeaaa```GGGeee```===JJJdddfffMMM000000000000000000101111111111111111111111111211211222112112111111111111111111111111111111111111111111111111111111111211222222222222322333333333433444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxyڅ5t䭉洗ɲ納a䭃hڂ'xxxxxT&221222222222222777MMMNNNxxxьլHHH000000000101101111111111111111111111222222222222222222222112111111111111111111111111111111111111111111111111111211222222222222222333333333333433444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxqɰ뿑黗ߗV{ xxxxxU&222222222222222777־hhhttt}}}XXXRRR\\\eee000111111111111111111111111111222222222222222222222222222222222112111111111111111111111111111111111111111211211222222222222222322333333333433444444444444444444544555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxx|ziz xxxxxxU'332332332332333888ć}}}888xxxAAA111111222222222222222222222222222222222322322222222222222222222222222222222222222222222222222222222222222222222222222322333333333333333443444444444444554554555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH333555555555555555555555555555655^$xxxxxxߙ\̪¡ҳݏJxxxxxxU'332333333333333888xxxLLLzzzԌ›Čddd:::222222222222222222323333333333333333333333333333333333333333333323222222222222222222222222222222222222222222333333333333333333333443444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJHHH444555555555555555555555555555665^$xxxxxy鿥Ǡٿб寎yxxxxxU'333333333333333888DDD[[[gggͲZZZƈRRRͥKKK323333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555JJJIII444666666666666666666666666666766^%xxxxx| ˷ğá躟zxxxxxU(443443443444444999㐐899BBB㝝555===>>>:::444777:::<<<<<<777444;;;===:::444434434444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444554555555555555665665666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666KKKIII555666666666666666666666666666766^%xxxxxzĮğȧ洖yxxxxxU(443443444444444888[[[444555xxxؗ444444444444444444444444444444444444444444444444444444444444545555555555555555555555555555555555555555555555555545444444444444444444444444444444444444444555555555555555555555555665666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666KKKIII555777777777777777777777777777877_%xxxxxxqǡ̢ǣߘ^xxxxxxU(443443444444444555VVVZZZ999444444@@@___KKK444444444444444444444444444444444444444544544545545555555555555555555555666666666666666666666666666666555555555555555555555555555555555555555555555555555555555555665665666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777LLLIII555777777777777777777777777777877_%xxxxxxـ"꾟尊{xxxxxxU(433443444444444555555555555555555555555555555545545545545555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777LLLIII666777777777777777777777777777877_&xxxxxxxق)¤Ǫ꿠n}xxxxxxxU'333443444444444555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777LLLIII666888888888888888888888888888988_&xxxxxxxxy~ـ}yxxxxxxxxT'332333443444444555555555555555555555555555555555555555555555555555555555555555555555666666666666666666766777777777777777777777888888888888888888888777777777777777777777777777777777777777777777777777777777887887888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888MMMJJJ777888888888888888888888888888998_&xxxxxxxxxxxxxxxxxxxxxT&222332333444444555555555555555555555555555555555555555555555555555555555555555555655666666666666666777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888MMMJJJ777999999999999999999999999999:99_'xxxxxxxxxxxxxxxxxxxxxT&211322333443444544555555555556555555555555555555555545545444444444545545555555555555655666666666766777777777888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999NNNJJJ777999999999999999999999999999:99_'xxxxxxxxxxxxxxxxxxxxxT%110211322333444444555555555555555555555555555545445444444444444444444444544555555555555655666666766777777887888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999NNNKKK777999999999999999999999999999:99Y+ooooooonnnnnnnnnnnnnmN'110111222333333444445555555555555555555445445444444444444444444444444444444544555555555555666666766777777887888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999NNNKKK888999999999999999999999999999999C<9K>8K>8K>8K>8K>8K=7J=6J<6I<5I;4H:3H92G81F7/F6.E5-D5-D4,D4,D4,D5-92.000110222332333444444555555555555555445445444444444444444444444444444444444444544555555555655666666777777888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999NNNKKK888:::::::::::::::::::::::::::::::::::::::99999999999988877777666654443332221110/0/./../.-/.-/.-/..0//000110221332333444444445555555555555445444444444444444444434434434444444444444444555555555666666776777777888888988999999999999::9:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::Q@8bF6bF6bE6bE5bE5aE5aD4aD3aC2`C2`B1_A0_@.^?-^?,^>+]>*]>*]>*]>*]>+E5.000110221332333344444445455555555555445444444444444444434434434434444444444444544555555555666666776777777888888988999999999::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::]*t t t t t t t t t t t t t t tttttts Q%000110222332333444444445555555555555445445444444444444444444444444444444444544545555555665666666777777887888988999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxT%000111222333444444444555555555555555555555445444444444444444444444444444545555555555655666666776777777888888999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxT%111221332343444444555555556556555555555555555555555555555555555555555555555655666666666666766777777887888998999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxT&221222333444444555555666666666666666666666656556556555555555555555555656666666666666777777777777887888888999999999999::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxT'222333444444555555666666666666666666666666666666666666666666666666666666666666766777777777777888888888988999999999999::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxU'333444444555666666666666777777777777777777777777767767767767767767777777777777777777777888888888888988999999999999::9::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxU(444554555666666777TTTHHH888PPPIII:::QQQLLLIIIgggdddcccDCDNMNOOOGGGVVV999777777777777888888888888998999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxڄ1ݑMݒPݒPݒPݒPݒPݏH#xxxxxxU)554555666666666;;;QQQRRSzzzFFF878878888888888888888888998999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxx宅׻dxxxxxxU)655666666776777<<>>999CCCGGGGGG777777777777777777777777777777777877888888888988999999999999::9:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxڄ.x̰ťlـ!xxxxxxxV)765766776777777;;;]]]777888yyy٘767667667666GGGEEE666666666666666666666666766777777777777877888888888999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxyك3ۊJـ)yxxxxxxxxV)765766766776776877XXX\\\;;;767666AAA```MLM666666666666999VUVVVVIIIWWW888666666666666666666666666666666666777777777887888888999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxV)765765766766766766766666666666666666666666666666666666656656656656656656656656555555555655655656666666666666776777777888888888999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxV(664765765766666666666666666666666656555555555555555555555555555555555555555555555555555555555555555666666666666777777877888888999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxU(664664665665666666666666666656555555555555555555555555555555555555555555555555555555555555555555555555666666666766777777888888999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxU(654664665665665666666656656555555555555555555555555555555555555555555555555545545555555555555555555555656666666766777777888888999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxU(754764665665666666666666656555555555555555555555555555555555555555555555555555555555555555555555555656666666666777777777888888999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::`(xxxxxxxxxxxxxxxxxxxxxV(764765765766666666666666666656555555555555555555555555555555555555555555555555555555555656656656666666666666766777777888888998999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::;::Y,oooooooooooooooonnnnnQ+765765765766766766666666666666656656656656656656656656656656656666666666656656666666666666666666666666766767777777888888888999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::D<9L?9L?9L?9L?9L?8L>8K>8K>7K>7K=6K=6K<5J<5J;4J;3J;3J;3J;3J;3J;3J;3?84765765766766766766766666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777877888888998999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::99999999998988987877876876865865764764764765865865865876776776777777777777767767666666666666667767767767777777777777777777777777777777777777777777777777777877888888888998999999999::9::9:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::::9:99999998998987987986876875875865865865865875876876876876877877777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::::9:99:99999998987987987976876875875875875875876876876876877877877877877777777777777777777777777777777777777777777777777777878878878888888888888888888888888988999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::::9::9:99999998998987987986986976975975975975976976986987887887887887887887877777777777777777777777777777777777777878878878888888888888888888888888888999999999999999999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::::::::::::::::::::::9:99:99998998987987986986976975975975975976986986987987987887888888888888878777777777777777777777777878878878888888888888888888888888888888999999999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::;;;QQQuuuZZZ;;;:::LLLkkkONN:99:98WWVttsDDC986986985975975975975986986986987987987987988888888888888878878777777777777777777777777878888888888888888888888888888999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===㠠===;;;ܒ>==<;:ffe986986985975975975975985986986986987987987888888888888888877777777777777777777777777777777777777878878888888888888888999999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===褤===QQPWVV<;:hgg:86985985974974974975975985986986987987987887887887777777777777777777777777777777777777777777777777777777878888888888888999999999999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===褤>>>rrr~}}>=>=::9;;:{{{hgg:85:74:73:73:73972972973973974974875875775766666666656555555555545445445445445545545545555555555555656666666666767777777888888888999999999::9::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===```:::::9::9UTThhg:85:84:74:73:73973973973973974974875875765765665665655555555555545445445445445545545555555555555555656666666666777777777888888998999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===󡡡>>>:::::9::9<;:hhg:86:84:74:73:73973973973973974974875875775765665665655555555555555545545545545555555555555555555656666666666766777777777888888998999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::===jjj::::::::9::9::9WVV``^:86:85:84:74:73973973973974974974875875775766766666666655555555555555555555555555555555555555656666666666666777777777888888888999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888:::::::::::::::::::::::::::::::::@@@NNNJJJ===:::::::::::9::9;::HHGNML=<::86:85:84:84:74973973973974974975875875876776766666666666656555555555555555555555656656666666666666666666777777777777888888988999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::::::::::9::9::9:98:98:97:96:86:85:84:84974974974974975975975876876776776766666666666666666666666666666666666666666666767777777777777777877888888988999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOKKK888::::::::::::::::::::::::::::::::::::::::::::::::::::::::9::9::9:98:98:97:97:86:85:85:84:84:74974985985985976876876876777777777767766666666666666767767767777777777777777777777777877888888888888999999999999999999:99::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::OOOMediaConch/Source/Resource/Image/MediaConch_TinyOnly.ico0000644000000000000000000000217613216666133022167 0ustar rootroot h(  ^?9I   cL>I=9I;$1$p$ ^ >?@  "L>8L>T9ID9Id$$$$$$ {!#% AL>sL>u9I09I$$$$$$  "$& L>L>V9IR9I$x$$$$$gJ<K=ɨL>9I9I$v$$$$L>SL>֨L>L>L>@<(9HR9I9I$$$$$b%J!9H9I9I8I%$$$$9I9I9I9I9I9I8IH$$$$$9I9I.9I9I8I[$$$$$$$$$$n$$$@aaCMediaConch/Source/Resource/Image/MediaConch.icns0000644000000000000000000066223213216666133020511 0ustar rootrooticnsdTOC hic08Nic10aic13Nic09eic12ic07*Eil32l8mkic11is32s8mkic14eic08NPNG  IHDR\rf AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  @IDATx] `TվBVBBT** RZm.Z.Ŷڿj[UQpG Jd KXd IHBY޽wdpH&,Mf½:d{=seL%B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P$<ٕ(Rzл$4Ϙ̕LјRfp$cKM2kL2!4>əsli\V!o2Uwn|^޽][շP cb {EC dp/'*39Kuqы_7_:++fd"ھl)MN]?ry3A؃@xD^\n+G  b |-IJ4W[5\5O{VߜEIb;ܿo's&$BT{>ihIqjRX`sC0vzބtve*%tS8{7&41DPW y1Nj]՚ YݒA`QJ;~pԝDB@1yG HhI 2%(3 a9ah'Rob`8̲tQD@1|/GW{&7 du:-< l6H:0(_0[=w:`fT$ $̫YXVԥv9l3@`HANPAp/_*=A4 O[LHuw:kYTby H)a 0c$C$kݕKy#xQ5/jc s̊.hw=gԍ(:I~o #ȅ_RQTI>|-䃇]U^VNW0W a^} 8pZR$0 R2'R!E!@t%S<ϡi?-]F=81 mO1)@%퓕E.n!&,`z@O#(TdOVK`@X0uLe8ݷ`Or*p;ބGU u6b|T[w\!͢DiX eaDZ'oW8)+pR;R;Z4x @~J4}+{boկ`<lzUdh:yr! f 2O悙& .Z&0j #un4+NuHhLބ|R؋%ʭ('z2:Zv]_=ޑ;ii{:sGDR4p;ׂV$7 ٞrkwaJ3siGD~JM@}M6%36%Ա\gR[´B@& t3QvIi:L_6jwAts'*+@ &3S$**dRn. :+ʷ cգul wbk;s JC(qN9-lOp HsY o=i?e/z秤z;HAz y{ޞ?ُbW@k}ݡwSլKS48 c?,cx {w  #r9 &FvZU~`馗\R7C4!"ɛ:}2W ,Ci#QWHD8W`+LstLӔNEF$apK>6rAZ?wDNBtD;%B,gJFpWb]$:Ybwufk)VsMWJdꄵc}L_5tjHyu +SU܅Q3BzL4KPc~Q##M_OlID&} ;ja߅`-a &RDz>hd "<akƗOэnpLF 8wR#4W1` LR,'Evb&Tfo.F).^t'` =}׾ق2y,`1#Hկ349d-?>禗b2:ӓ i LE? e pcǗo;I@؈7~-:BĽ83 40q]ǡ:˪L]9)َ_ٴsDR[8gzu*fq!L\HLfo<FS6 6V38+.(G[* 3ˉF] ߟ!V;olŴ 4'}r`].XdR! <1HhТ|dk͚~r f ȦUfv{2*@;G KI_,|f3Pz,HZ ױǯH G:H7n5|ʦen֑r!X28f'i=^DHwF,7uz zS퉶N 2(Cu >h[Irb%Uāe'ل|{a~>w ߀` +O&`^8mJ1 -Ou86Baiӵ܎+ #¼=ApoSbc9 |1䍐5:3+ ,mFE:H7"cmXՈ s\6#-.\>=GUfS`Ir>'_M,@oG1nDdHoxod$N<]w4Ƴ diBQ\}ue;켝(jﲉ.ǞrIrNDN\v9:gNSVkij]Y@x3<yCP|&%Tc9Uײ7 ۅ؞t\4ug)\xf CGgd#i+dvWu muؐrOr40~9ԡ>yp&H)b;FɅ*3)|ֵ̫஀Mq3K:Rx>I2̭~rt!=~J@: IX2y}<؎/~+Hc~2$ "(s+cvJVǏ_0IE'sA4 0 T>Xs~GP¨ATmJ#mٰx.1!rϵ$`'a1hOK'lD[SU+ k r{U=*ʟl+men,⦠#gh ;HߜI䑎?a`?\|襵͍&) NH po-Dr^  &? 5Fv߿#R- `:4WA$ڜ.7{,Q˃iX8ax}`kLid/Z57.m"7ΔS)<GZNe GR@.^QFgJ 2q3Gi!GaGn&W{bÊ=ȟ+rl&`o|-^տjx i +R }eOǎ0/4La~1_Pȷ %,.:tC^Diٟȟa9p/E勣@fFUx?ⅰ|547b>!;"/Bp>]4 ZqO ՄrOҌ4 un.pludA%ED8,x!l/dAL܄4Wc{FָYOh'!sBx._HyILfш}g?~<_FN>'W'.7Fx՘ -EfI߭wQ'4hg'6_f)]sD2Zi,Iyc1j#EB䮌e~qόGCjx Kw\̂8[#VFU3 r_ݞɃ!OopXop&]:mpC!̝.^׉[ q =Gگ¥k nk?5wx.ܵJ]u RoX ^;RV[Ͼ1iA.0 Vv"elN[z޽ɦ`HMW<,pͮ2q3_kЧyՖ.t pf,ێ,C[u&H;jhL&.Y5┶sYxw:VHE#ۆ"6Gj7>7빇4709 0r k~dr3]uiyE+`HPTLZ2@ǩkN-1m68} .9i)]n+!$6g9fSMOD/@)_өRbקgl· `N@xB9t-1NEE}vər,d.aGZ'1Qr_UU~u)hmH,b:[-؇AstHBޓ_Qf˲7s#=iU qƜ|K +UcΜEC<Fbpι0v^bx"mhf0Oh4:s/Z%G{6G=lyƧln!9;ƈ;? gE3GZA)ғG>GzMn:]mNKf-"Xu\=P㴒轹T἞o-6D/-`1#S@I%?^ O0d  ȫ(^hgcg=}]@,~QD-̶V^ׄҒ퍦x<3&ϯtZ;L;K_iG!;Xe)")jeeQw1ChlRud,-?fxv`!%R5nY2Q]ewV +CJg1R|NTMCAЬy*-QF`#9ZɬKGc).\f`,S\K|_y4u&iZ Z cg-ˏq'"Ʒ[PEәہ=Po>V3(mKnYɪ?KYXYyxߋYy8K{ua% K܋Wxh B)-M-j1DzI'܈bA]qT6%;|;PO`W  R%ŵ*Cۛ "DqSnwfn,R zt"[}rl"KRb-\1_iь~>mq ֌154=,VH,I]@o b![ )|P&wh bHk9͙*~e(c8}U~G7j,'4^Y{SE[bB1ݻgHO=GfЬݻowtm'}%/dt]1fmgn*\wHޢ3Mf5;e_\OS./{h]ςW,(v4z6 uĢWg>7;ݠo3+Bm饵KjܬwS~wvV4Y\xCaUXo1,z"V':̲ؖDkyUF /L$D*#3''ܜ4񿅙~|?-tz*) ,L:NlRz ֜쌕Y7s5tEDd[-`LY(aB BM$bX08wdk [)0FȪGSa\@^f"^0f@Vl9!R {C`&[ggKb"v$pgf#Ex7zf'kNk APvP&j}ŭ~12WLb>çm[J7Yg棈ľ%ZHOv8=yh˖.7,DPaߍI۲ 0l ^dK\#Z ER{P$zV=|@uxyXp| 53Mk }:AK.`E02Iڞ,ل3\yV`` a`i[C61CT%@*tH`9= QE a=n/RѽY+rr"KL?-z߀d"{Ęf}Lr#l(EbEI̮:w(N6v#v3DYo *( -& ۉZ Cbi_˿/(sio/cP*Dn=A=4͈h[F99 a1ª5~n7K4@.f^,Z`P>i>PmpDv=zRH;I[d;^4-aݳMeT ȝwYZ:뇥- ɴpGaF\+ !  =STaV)$19'f" =l Smg9Y ںu>J]-#a&j%Kqz-5K!Kڔj[61&LMgPYRpiN^n().@xgO UK3lg#;7X2RiՑ#2'AȻ'Le *NuQ3?J5[`,Ѷ/X@h~;N#:j$d)S؂c@ţs:{!RVi\KGϯH .A(ϲpH^K`PAX^ZZ+ ,]r ?QlXSc/kY#+Yq:P5S MvRw̎rGr23 M :1{r5h?Va$"S#;-RZ>+<=AB 8Ҳ+WgdgVnY8n3iixNB퇉 K_'/Ax8|*SHHr;?!3b ɮŐy{- nGYjW ~{zC26mIp}-Y[z㋈%X0g)FETJ>ɉH#y[xZus B*E-` @D=6b,J+f\Zk̙moz#ѣPpzmlɦ0tHlۯ~{#15搖J:dJ}ַ/B:~0ȊKǵu4E\z(T[m /!wC[m>b_6‘b\u]G97LBZ\F}rCqu,2 >!R7!N+00fTZ@2HO UJXԣK>#1PaN=˾{Usd yݻw͛a?-~0P /qSX #y69NXr.XJb D ⹋ L- 16ӼzXf)3)qCe 8l?yR{#g۷og8̏˕c=ƪZ+qH6D Vפ|JBYmB4hm9ȟ(;mou3RQ;5C7y" d))'_(/o559ݶ,S`yt@sMbR28qD  9vHKwn .ӎxQX`|i@4K̾Xɲexoul}8 B_ '醼C Itd2e.[?n3PDLc i. Ƅ[~|14G1282ΌҋO Lwu:ʹV̲, *I8d6dpkdñc`e_7h @RrP x,P -e+e ]'VGhD.*:El0HSL9$+ w3t1r |1hh$p~2Z+Ex׮1ַ/j=pb`ܲRqlx4 ?7y\l5-]9F֡ ޅu4\¯L샭[ATuc-o5aI~a:.#_@?m|$CbŠ95<#V^43GK26yEu$]԰ʉ9ghf;!jpnbOxV$VcB>S2KVEZt!MdZ/,eQ bwHgЍG#'`4-1x!Tbu #Z0 X-pgKT08|lU w7C՜1˧oⶥ M$d+D]&p#!uI~: "ԴVK2YVRltAk1t2F|ϾTo7CpWu-v({ ᬎ|՘߳n&flͺ?ӧM7K}:eWUA9ؤT)>J]GbP;*>~|2@Pq wFfp4y -7+%2n@S('^ T{ `NxR.nU@mwG_Vy,!o ؓ`Ƕ_jgAT?16L3{q^yݟƍ pD[x\]؇uBBhl[@z.jFv56f}(ͯLE͉'⦙DͭP4;mS.#гfXS*@Xfu9Yakr +/_ (זt*shGVUcN!DF1|PZ/+))d2G@/c(<#,UqDDD DMش@{ ݠ(\4:cQ ߅4Yz .♁[=? eSݤzI(@9\OHp*4]V[N|lO."%|`FJ'I$8ՎF9ݖsWOܰŽCŢoHg8ӂ^:];?t)n p8=Әs[#Pxxb'I Nb`H&C%">'}2g9Z&^qFLK6o7t-dcl(޿4Yj- k@<&r'}' =+B&%ΝALo'A2A1AMSgk5vQnV` 5(O$HÇ+=3[c "x!hW[O .]c\yAבA}1g1ڙhZzzc\  VK['K G~WMBjk]N5P8m NT[y6ɴ f B:~HVG?a+k?~Tixo('Oj=[(XGg3B`}1gO$ѹȩ5E.|$E$4KXT?لEfY־O5~V+7;|$9v ]}x{a7Qל%_Xl' O B8HI?nqbP}L?Z|E >K! !%ۢD4D*y[~n9s4Vu^;=Bߕ gI"lhL uy]7x3a"$=W+'kKvc Xn"l_9v`[Ol[u_pMYj64BI \soyYڰÇÏЗ+`cW{=k\2b9M1m;F^n|۶ mflf@h2|Fۖ`q~GϞ5J&Ԗt7eu˃.y+f@&nrs2 ;ga4FCkk\3P`xWCi5%mYiIׯy"|K_:a wq|1oFGm,,L;V ^-~Ǐq7ƓN@3A6~ F0y U|9 ZvTG=(g b;ї'=Ŕ]v 7=#+^z˯RLoDC>/ldOر=8_@EqOñr xj?hXB9k L?db`kpOT^P(K)+F]o>ʥаaZ4w o_"M/쳺. ~t.@]܌.MYx0|PYuX4Ua߃3s#TyO괾$Z5ƔS6=Ym;odC bmoCguRիHD.Y5nđ_UB@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P(ɎC"IENDB`ic10aPNG  IHDR+ AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx |T=3I! 2JUTL z^ץmݨ[bW0a K+s $, da3dP l7ϐd};$sy{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         AAM@R#`&ONul5Xfe 6an6*]i=3HkyNSZFsF ~oRJci|w߽7屎nTL[}Pbt3Ff6M]۫}(}X:k:mӦ,6 Ж}PX;>?! 8Prz@ UP0*CudK'Ah9Lzi+p*~܃|;,ɷ"t~nuZZcvs(nڡ#^%B @۱' Kmc ''1ڌ6:I'I\ܝO%^ *];e62`̎xCc;MǮQN@@@c(k# LٞfjmrmbLkϕ宜sp͛Ω ] G(Uua:1QUN1 P@@F 8. MIrud;_>_{sIN ?RP[-mlem55{+C @@@{N)Bh5AOi$qrOgd`2sU9e)"o6jʈWZ`|G@ -L @?}Kwm}6MfivGeW&~፛g V@jD2:d6 -wsl0 h7HAEu¸zJ@@e\6 3iPu8zNHh9w|Ϫx 9KgrN.qXmk:;dkj4!  ^%bDO ȧ1O7.˸Mdiry:1GeyQ-3\cs# |Qo&@+@%2KM1FM_ẹ6G.)7^lF[g2@HD6N9L%fE[8FΩղ3,ձzDccka@J@W2<I9;3 MZJMS'c@6Sil{6})! |&.@fT9ڒ& ;qGo W˔1ˢ2V޳ѹ0~=pN ?IlIfc:Z@h- rfrRhS"!!py؄@U1 c&hԶv&;C@ RN @.ud $ɟn<#hPVevc*VE=9"  bS@)Vʚ %4UVhY; jŞ]_FI@R"@ %tC)LVb%r@;"# \!`J˶e6֭*@oQ# hʟ(J1T:YP0!4Qg6@QfQ'zMA Ё'm@;mc h ,2JNPSۇajeE֏ܾyGr'U@ P6 lS󍊕*cJ1X 8<_ck64NBH苀B㋌TF_.mK;샀O*m;0{пNIZ #\@͹RWj.T71PE*fNOfOa,t p > oc#1K]* ^*>ӥP=<*pX dp,7x4Fa#^7frVj/s/$f c2b:9fAz @H8 G*XHs|E R ЫPx>q֭A   XEZ) )Wg]o3J@336ւQ^I@ K  U ٞݡ|PdqͅQVS@ 1J }h?~m˴R̖& G,#34}?&IN X_ZGC?.r  _"VP@(  @JLy׋o( gu t?DQQie2jc4 1 0E8@˘0a)5e扷Y% ome~7+{Ek@)-Ft/$)(ڨg$@ P؀. @'*WNNvnz{ g,ҡ3n~ϙ t A?  ዙA'^ 86N^ !"@@D4FN+\+ H1mzW9E@kԑK 6jUԻ9 ޖ+ @ v<$D D3e&WL\ %kB Rf\a~p# pcMx@ {F !upP8#p!/sֆlC .A!$@w4ihPcF/ȥ'#*@U hkjl8F1$< {dA457r6)˳|/?!b#:dͮ  x1!"@ Eβ,1 3šٓƶXBlJ  (a@scU \@2"G~Co%K@Z@6< @O953-z|yll@0*lƚM$ k@ R?D 7N:cpZơOlO< %R@ r:Y'f$6@(tm3 ZL|jOu@P}oNAI<@T PH>}#V+JS}(!}CukC@(t% I9?R*k̗ $ G>솚*?&HN @(z@ 0-y970I(}zIIf) ZK pcMx@ 4N,trNB;q]# ЕΜAƒn6ûڎ@kQ?lY$op @h G3 .8_7$a(4BAbm5 )r R(@ t @OZǍ3vcO>)W@+q }9W7'@\-4ve%p~Qm A PH!>]# W܉%Zɩg C X5dp<C@F oA._nB&DR/Y,[Y [N}0D$W@r @ ͌Yi7K㡸w@SVw85KV p| wQ@<':nv̾G'`R'^i3?vqBg@ 9L/ $M%7ra^:#/PmY6?T8( ؙ3(#}2˒O'C$UTB-!Id@@ U{F b!=)\ &bvQ^ 8  h/Q* ɛ埪}WV]ݾD @($.@pT ' 1hK޵ϊl\}aL 1!@-2KEΔQ۴2lŹuC.@ t T5/i]n"$",_ʾ#Q pE@ ?9lwI!MI@/׶m/ǩAA*@ 4 7Z&\hWFDkJ:W䚨8 Aؙ3(=}7d/J 3hQFߙոɮ 8 e@<)Д?a6%<A#Zl>7fUjàw@X ǚ p.8T3 /( j, #7 vC.@ 4 "r@g6䟬 t(m~eg6$W:Bx@@PSk?h!A^ ˺Yc(x+>6Fx 0 ޢ O̒e6@OS$--Fdm{)> p< S1@8sߓO5o xq\%Dr@؛:zƃ'ܒ'@8 ;Π4@*fU*3:h[5Z V]+cg(i.XF>C9X_޸4O?2%X+?MueC틩>dP ZEf/М)UFF"hW 4ho.reta%)\pʠPXhۜlVZ(9p7ْsx wgVH>KErk'[WywVáXo>cw9՝ȋ@ML'>I8 8W BYuuqjf@.(tI$V`|eUO1SE'=W>@#or\"#kG%]rfmץ2z۶'aN)Z/%KH@\rƚ93cN/R@ &`0O&ɟf5Rv'ƨqGFbG,b łA) b.-o/jc4OC~]~murEM oˍt@ R<tAT&:4E>?["ϖL{0B!YWa YPTFvk?K 4Nz_fxK Y`#k /  :FtI\y3;E:|0[9e`_/icVŧJZ@D{N{:Eh;C hOjxoɳ @7b 8 =;HJ[r/_ L`|Q^'/b1٥nٮl@ptݒ;6Y.:=8)q+rVcqo@ P5${sCSϲm],Xι&۰Pܽsl0zVІ4}مߑ-@s~PVxLfҌd@V I3e.@#L~-V rw|:ul}F<@VYWYg =N{nլU84MxN`đa)z.xF]d6pנ ^"> Yr`+0HFKT`m엾|'sCp \rrG*cԩ.& o`Zաx6N[J9'1JS"JauК=~ɉ<@ ~gIK hy)QM#6 )<١cO//y+'h͋e+<{y z%^s]v}͒^ { b&XV^2ZO6^R\'PLҼ1n ux (}<_gX?V4ǒ)I.g)@ҮxkqKp+$('pX ke7>Љz+@bl߭@iea2dݘ @d?kz5ۇ+5FÒ`dL$^@ >霝;= @(Jއ]6u|bxVz#%0FY7VunT +e)R97Wd]+klF|xK/~ poB@k$??t^ x# 3&K62`"R.p@isCv}R  @(ĝ48 :Z[ߒY98NW5r mW-I~B {Nʱ=  ~޸#@Y*!eK kKO#{~[E@\㾌PojGs l 0&] <RF4խN@&*B x@t)pP |0ݽtö. ,`&ONo9xwɹ 7@^&"~MJT{ӕ%ySy ;C*NhH=={+ $ j%/rNߕ"|9xtItrtx)2nk~Efe "&yӨʕS1{:7F,!Ծ \[;e1K@|Qzkr~ߕ s|%i!@VhedwMAhʋ,orN$X`폌V!<$@@Pd³-!9y9bG7 j9t~yI"7GIlhʍ\zP2 {?2@U4G6<쪨-Q06=:_>Y2#kD ^Y;4:@s~GAJ%9/`VweP8{qCP %2~z'dʨQ싶@ mk7ϩZ~y M(3m?#Pa314<(oLQٲJۿJZtt%r8KVu #W=QOC!@.Y. pW CrrAߑH,\~zC)BO_My4ŲOVoc[~m'k8G\l@j(=eΫ,+m%,:FSKXKKl@EΖzd`+@L=ǽ؇M@ ʮE%θr0z#!W UF}ّmJu3mv֜jG?گ}¾ o./Rd9@PƽflBk q5 gq/˪ks#qwR4xIԓ:M~%H@~ l2)W+쌀&2v8  fo{BZQ^ycʢ$_˝O1dD˴1Q>^%֚pQO#G6cY[ŧ9ZAP菞 d%]!!4gô,Hd, %5d<tܖP\~P@ iEeHۦ=@+]{Hh.h+&k:"< hsOV}p(xz禤ԚU䑐R"@/=%7egA%w $Lmp0'pB?9o+c_ϸVVYx,Z\M@ @1*~0HFKZ*|`[:eٍ5 q  IVkJ>)8?] @_>M ^+&-7A1muY54>B8,V{+K0I;]!qؠxmCۥ9 S :I#>^jLZ$i,9oM?It$H\̆ySg'}5ڸJz4Fk!UPS~Zċ@($AtŌ3CL T] $ZQFY* h[#jWZ{+jE!mG>,$ p @˖M/T^$004H!-?ઍ)n](МyP C#$*`9~M3E*.4]0 ;9lŜ%F R~wi85G3 н ~єWpK`@~nOhe[' EpAݪcK׾좰%-19ymJat@1s#0'JܦlYѿCcs@8;d-vWs d5Zƾ\Z岑5N$ j1?mΝmsU@G~ne,q9@C6OH`b%$d5֭fQ$@JMa~BNk`O˔#g\JS 'ݙ7USͧ͢5z* \;=ݞqa&O4N4x^@ݾbυ%m̘Cț;#@_#}ّ}qѲeQZ+MO@|&\/zd.E:;6RT69OhnΪq>@8O_rϴ~:; cs:lHj=VuC6e6F+\fi  Pǘ' vEVezDlQ%Ǯkk]o3 g >iOP0]^x|>n ȖK.+[^X䲑Ͽ1GN() .> JY+2ʮc@IDAT>. ߧT6 ~H([H![ G5ԮLIt@ Kʢcs@#a? k| ^[#)1d@JZJ/j;FA@@/K+ Kds?܋@l)*'98l Nd^'`",@./&'e=܅@N[en#~Y{ni972Qq` `ʪG5)M@z+(YӕV$AȈ,y=S:rjB'^z) n6Bٌnx@eE͟WB'$ C ,5|'Bt+ ?JG&NO! m̺OK!O)b 0+1'0jKgqrmnFB%@%~>FFZg{cVm;}>fΐJ;io:wXZ߾eXCty^e,n=܎aJ[|5ΐSAFF[GޜeIΛ4|.wn @Ð1.jAт&\.o쥘 JStMMs# P8 Gs+Z]sS|\9ׯA|6In2fMjRٓf]𡦅W;_ޜY#vulmBbm%ł$\v||?VC|@R O+>%EQ-HMyR䊀Y [!~P8 r2,}e.Ci{F6; o{jS|n(+:L Q:4(;G')R8Ǭil@gr[)l`Ie&f98!@@ެ[R=" b-[V(o=z:k`V)KVV9fx694{#1+gyژ rjDW(8Nq@!]@Jh_L?UT/f7(='[*.OZCNYZO:7ZMZ2vS%w,.:SPm&(c.3}Yϲ숀(#$ 4L}[A荀j>9ĶU̼eEOYȷC:P=QyEomB<9k&>p<9c y-)@#rl3fЀ|O J䉀K:wQvgV7<-%SOTz<LRP &$JL+KQŕe*W8(P84EAK*fy`gO 4O_3=5 69!8fxY J=``} `  K-=.s NʛʩRH*5ϑ`7p}%7 t}ٗ}@ Z}A L$D 0nFӒ>JP6v*gWsO1s7. ˬsdwd@jd#YgdޔyJNr~rC R|d}>"@{V}WJ$b|Z`1zfψϩv>(+:Lx6O iz;"@dyGʋ]+Xgf^ݬe\^z5FgmƶgVgyQrYmqKCmK2kᘓ)+CFl-uw\#S #CYۋ9WscIzxI`榎ܾy& BeڶK2ÏJHV/(eWQ~eӈο QB@2,4Z Ħ H @}|vts5jf%oGRb䌀dv[ƇFxЍ 3W20pJ9ORK*|A ] ںF܏.إ0:Fsef_-c'/ UR9!R@g5lDS|Iy^0e (i[U+Ϊn>݀AюR2O2/tY@cNz EULEM{m΍<*u)7p_tO8D;-#!G.[9sD{*YYlG lR%|,KK_|3UoOQa4$T@njeOg;%@ Y(*kIihtcg#`\QJ)qeyK~c|"!E2z^ve^ +@cKfR&ZFh>"I}(I!?oVThmf_$F<\`3׽pw  @.Z^tm P7H1`\fk# =U%kr\Ty,izCkjx9 b% XCYUtm}5xoZ1]tڗx} М7/rY@gf7p!;Q7AurF-:!fp9ǩi:έ];7ZOͷMtD;%_Ȣ'c2u 9TCuyo7@@ aLWCf2?izd-yOy: o|1$] 8T( r.ն<@1_X<{>=& ǶHz'4EBd5֭rm ?G^YRtj2+{+"'NeYs֭SR@S^-Z響!01뜑7pQL  lRE[y&"p<2( d30wߧlLIkٳo1ɒ XfꚚvoO^#v+E3n18d1vF{2f*Љ;"cwP<@~(qu~+@ cO ̕3 _/k|Q ATgP ZsMxE@kY5y%^#Y @2L㗤84I]˺hk(^)TmL贴Y_dtF8Au%pcWdoFMy* JSOG漂?= (@T؜][͝(mD&0)if|RΣu 9qkp2X@ 'ǴĕO4+|Ggی;|ɸRreT@ΊuLj\5@ ƅ"P:w4g1Ln>ѸN.~㳴H_ { " 0CC` 6gvʘHl Ov M]rL`I9,4Aw h!G -J{ {ӕ% $فO$i u΂iUtrm/2Aȕ@TY6?"<pg+JQڙZk/J"BOhS?Ӟj}_bW! ZcOD 0 QpYi1,P&i\\uO9 ֜ NxI@Ol-_c^X!@D  /Z%x \BDkh+zF otxM`điV{b'^'՝77 '\SNL ųeӤ\1`_P&O 50@4l&}F y"`dfze<'3<4Xp P7d%w"'R5K>#|ufIC #KdֿZ\I1IM7 Lg}[k۲` zσ%Дw=ķ Vq޸í!8[E 1g{j* }'\FD wKF Sky󰳾7"@ .4X`qqՂX͉rdKV=1ϺH@ ^ZVYxB"~ j #@lsnduG?/! ʖ%oe:υh֡*hӢ^  uYٰeNq`@\9i ^bv筮*RJ$[3 {2H@\ԇA8v!h.0D+ΜA |- _/!f/eF5n,>. ͝8>$?2" / ?l,u20ZFz.0oٴKJ5c{["lKKNvȟ9Hib:UHj~i1&C@{(~+~nQ l粖|"`$@ H?o[ %L`@,i @J)"qiFkWĻYK@sބJ;wzE> ljl;7gζ>n`@@@s֭ 8SGd6{*u_YyYFp|eƸφt!pzzx 31M5@ e˧͑oX 4mVQ;h6R/Вj٩@Wkv}zZ~G 4륝'`s`->*|۷~0W9Erz w*JnR̓wĽDo1mWr@f) dQ"V`meO-LP3M 0/PZV9 Z3%C|(`-03RJk$&@D ]^t6GN hn^493Uَ].7773ӷK\*!Lɨڕ>## w,!>O)]홠 ԯKkrAkDcc LHSNQN @I@ ߲{D{69'} Ѕ-9UreY?x @tcܻн[ >|Zs%7\(] d,'2n~AfB䈀?Gd=37x( bҔA cIC U\lڅAMWykʇd1ǭ&ʢ8VE5@FyˋnPHn"DQv33ţ53ܒ^=ζssvllf$F@ heK~fk5C"KQt\I'M̝KJ~dCVAw6{R] mEYVXA(v&D1pcYMp%;? 7Czo@cF}can@\FR)dnUKEqUr0wfFR_ߐS_fd@׸q',k= y9%xdץ^C03+OFDٕъˉuxD@ ۡIADI ´@@XUlV,vw#k*G 5ΒܖȔ$-gL૨MBE /a'@Vkm޷ZZ֭U* FqDD!aB;sD@HrY Μ<{YP@A`>頌h^FDBjO[3r!M:OYAB/i$c  %7|E\ͺt!S**bpsj$nnCh $bLP0ss1QQ8TpD]Ar$\Q8g-L9WUTq !#1MG ?~٥T\$dCwqU%. '镳^p ߕcۃ.&@0=I=#sBm_!8tA{F^Ri_4Z?I{6BYU >IRpu΂E oWCT0)+VU%znQB!15<W3R #Zئ=BCO`ԟ#{MRi 4`(ۄз>@r[Mt4sG2>>w8=I೤֯ddn6]ڼ5}zT>d$̝~4x^oa486>؏Er!ѓ䦏ɮ`mP]c[iywc\ʣmWUh@+#o,J%bZ/+ >'mz8!}ϦevޑA 4B@]>&uܹ})`5pMS+Ԙ9} sٴ7cZ'SMOj-J"H8FP6Y0X備F"Fo͇2ʎ! c VEiv00K9yVef-Е4/-7瓀x[E>_p*)P\+#UQJad<ȗOX$$H ^97ߑQEAd' 3>Zvg$cK#/I U3v J3\AE98uU+ j0 !vpVP{FNTaG4]5u; *'ccCrAMdچZۄ䝋Hx-[$wVq&\ƟKCGV _ P.MOcmL=X_a o 8"ci(,~(U?:H\I'8(A'_s:ر|Ӱ($dk/M .rijC@dћ4BHhJ Kf5#?wy(*#wIH dvGQ@@N%;͖STI 3i:dk<}:CRֻi RҊcA>#0}}' [Yl_6yf= 䤰&y`7x!.عm>~H8j0F,U+eG;7%^~1|!pu+qj1u-\+E20   p68H9j/ 4]ƹIƦOZFaL!L,9K;45\ʣi 9D an p_٤_A(4L&\jvg @ 0 v Hѫg,p538d8*A}ޫ'(/o-)0vAV˨;z0 Yqms}BD&;sA?ld-Ntޢ9>zu!fTNR2ra8qĪG"i0 OVd@[;?z swUr.c~Õ bɼ7TQ!DUM, y!WBAcj\_P "PJwZ0o A]o2:(*9$n"%wYtE|\]n$@_Dx\ui~cf=:C}Ť©߫Ŝ <t),#@ vn20l;$,B\w]Q/E~@{YfAk0bG*Ϝ9ьO_xi>j@Q}q&tO;F4M_]$͒B_ر }6Q4Ń9o#L S  >S?vWhG pikF#ov\ W6mvXl&Eޝ^`# qEY;0=61-7fEOG[A#@_Z[c)G:/,/j[N r_pbq٤MFRHrqO6T\Mv:Y}Ԓ!B/i-TGP @"`wWcDE2K#dI,~g#``=s=BhI̝ۮoygBõi3;G`ç3\;pH|qLgE1F8$@M1 J"~(H (/P E@A=LF(7̭\~ &l\`LdVxWi ha֨(p%pA:45LA<E `)'L_xp]I.cqS%HJ`8zK}/kŤ`E Ū7Ud$ʨ @, YceqqFTH/@@I_l.O%k"cPJ& r!׷||9MTgI3+mE/*2$RP~ 掿MSOc|D`e}+BNcyy b¦%;È&VC#2J n$9c綑ԡ(ޯ}ȝ^ESh!'qʀn~p_vCc_?D#ݠm'lRU^0br^QGsvSƎm>U@n?;hI ?EE|G󇶖2zhf,S+IY2.~T U59?5>n.xa)vbLZp/Nc_z1\IըM&; _ v+Bt(@|G ڟ|1ϧ@HY.n+H0@q`/ʦ7g"%0sհ~"z^$?MֻDbt^g.ZWcCL \\cKYxzY_4߂ο,o9)wU;})\)?93{9 hnc ;L$@N3$LYD qcg>W;Oi{fA?8|3XOrFrbkBg:ʐQ 8׈p*z r !ry)cg,դ4l/ZAE`g{EmfL[3j.?#Z$ JWl<n2/)0<|\" hm(dܾݒ(|9{.ey;~cp3ẮWӴKiVA/ĂL!P~)`r)_CbՖ; Pߒ?&Q4}M 13͈SP& 1  6`&8N ,Pu7'\ ` EEw'pvC?3,,E՝剳v6n9K HO ܨ+[F/oFO&&h(&U<T5J9PYE[q @۟ti.M>nkt]Fݥ!@@f*q3ϑY:F{ _D1r-4 B+RNTcoi H8^#Ehucq)  `A~4Y`&$z-0&>`kf4r^/ތQB.2@]mοo$RcQp$I^OiifNO,i yt4]5E^'p.c ^ Č@`=%z{!Ű|R n P84sZfN!`]35j}"T)cOmQLoM& |`2.d QM;yԷPE$pkK @@'uCR;s_οJ!Ņžŷ&b=1lD ^oKx@ʞS": "@˷hM"N0R61ϖg'p@&}D57wmn~W>Amȝ^|^}zHuS`113-ڸm@:?WX#XA2ߞH\+q3qfWK]>~^7/@ >,YaU@aG\ y8y p3Ume$?! b":HJcaSo{&Vm?1:F,O[8j*T@B EeMKi{`Bl%ۻz@$/xaLf ,T(la%pcXܡqsd|!zC@ QWw|TFP9"&$Ԣ`1#k4-x{ONB` o8 @O"S2jOH`f@|C 8-7kdD`};(m"@76swnGZ@!pPʤ pXH oՈqLakȅjvЃn+U~ xo@M'躑 -P.mh :0?`,JSן3|ͣ٫sVˍξSp@m(/LXk>̃zNfDш;9g-ܤ+vc6P4:U+*2#/); Od Fhd\ϫ(Uy$yOIꑋ}"wD {߻P%I ڹ##MnOLͩTj^OɅn+ظfɥ_\K@%1: S6w4hdŲ$MZ'ԭSpjM@P{;ӡFUbGNA}E';']^%hѿg(+ eF_g5 Gեum%8N`B⾚/Sm(]3t ~ ߠm.ܸYai sa9vX89zi۩Pv 42wn0#věŷB;2O喌f*T+x@ns5%p.X ; xX5II8,!0 g,1N8eZcj&'gj{D9U@B"@>6֝a낭#&6a^I TʫVZ A9\0F 0Erwҹ1LƮXd4}(e6W6 ߟ\{[TgM,rd5=8x m~ލ㻣mL!] -PT}}qil&A·Wɕee c#fUt*~5J )iގV{V_D# +. BJ\/;'Wl/G T쟾cb3cf.|afFf¾,bi>uX܃@^C{=&)(x)^]URpS,^Eh^Y6atIUXdz߽7-  В2wni8vcO*2ļZrV[_[zupCY9űYulګ{$>葛u[{2En bA]ʔ {,vxWWT51 oiCtѷ_( ض NU&J;ƫ%%X!6FmI N_4Dp~3a$ YMdr4ItHX ٔ zV;_gGI9% ؆U]±၀4 Pؕ'͟s?eXIًl^^-+I $`PJWiw(͡w bi1jKal7MÜ}XcZj2dռ6@IDAT=ʡq!W@A8ʬ]۞=4^@ Hs~BvcE [NP3X^!_@kZZ3+] zd!gV강^s~/V^n]>._}6q"0za4bGvjՋ.X^GX! pcfnƢ1 }rɥx@c%E5=/iYaGj(4Rt8l F|I䍳]󒍧uAl#@oڵ϶9t#si%X*%!N `,YtmtsEzN_O`m}Ev2dyFXA#L# PAߞo#NG@KzJJRhULl*.L_="ZNPԌeccT'pYM1:@""̝~QMTj^'"L' nYЌ=N 2QEmC1\D@4d fL$2WoI-{@u6"~eӴH`C0#pɘ/<@Jzb)jM@L}_h* LBB 0 j\':*|t6cE6[/y;J;vy #_DQA>@8= a1qB)ʕW|N._ATp[B75 fo̰sD`_DT@@m1"\6'X%GO_4̣9־'h' p -NXFp>#p,E $L(%vV`E#Ʊř[ZQm=C!Unbk8?\9sVBy $  K㊎NH NN6B()mxô7Ě4>+E@ hg#* #y7YgBhg@*)H} SOjxNURP1!Ƃ)VAy  `=fx?ym~pؑ8ذdW7aXx,(I:}xq!&XMB\T0 >"|r"."(1mxǟ5α^dEdx 0Nv1n~$[ <XzGMa4jvKzlm]364Rl,@ o=F_]BW͍`A |U%h44` JVC+,**W)*b] Ƒm%Y @[R5쭐" ١&e+L8W{/Xza[@uŤM/RlL# z0fL!@ btb F@@ ;6ij (/-Xq}Y5Xp16xs=SRg`d^ )>|pWX c p@@RJ}FI* [q%+iu4>@ X 鍋. à)E|7S xa@Z!,rrZH(G`kIAceiMdGgl$'錴myWCh ԭjzwJnCt Z(H#Rp;7T,-|>Cɏy#"E!7/o3fzP{ቦPMŹ@$착` @"@[" Զx^oaXV/ 8-fmGԯoMQƸ!ZpS$kf9aM ]}j{\ڏ @;K 746}NQ\ Yň9rMc4F$A@҆,,Q ϾKղ11#hJ{=[EiO j/b 8FHS% Sw ~tQ Nk^樒8K?USg.09S"8d!-N!8;=wI>/H&P&P]_9_L#ru 5P诐v٤3&^ IGQ+`g8=W۳﨓hgD ())*ͽW=lc8 @S$N8I yQN .ł V~>dM \T.- !V.k.z\Yj+&m0Rg!]o$(oͬoFzTHW@L Plo?!S4 8908nEX,#k>` "@*?g!D /y\\E 2tׯ $d<! #̧ 7^(Z1 +$r+Q"m0P2}o9"45& @ԠB>>:pF 4—iIN7F0˸.=Ju0&\pW0љDStP@#@wYqOm$VP  q6A@? ʄ[ +Wm5V PSdk Mmug  В@P}2-8 `1UB ȼ`/ tZ:g;F;oM!pB v&ZE HH #PlJE/ȑŭRrKHNl5f! [@@Fl:cjHx K|+I4ȫҟs^ßћuIAFV22,ISfucHX AB"@n5..pvHjMB(*ùdHԸ y_]W'b}GP1,$O{ڪHphqu0] z!\ WO- N=50YӿnDCOm~ҺD8@uYYYɚvJ.҇ aEkZgRͬo~Z7ڕfG7g~Z$s1gc:t@hPʍ( $t-wPWzNKaLw|˦]H_>,jz#d0*cp@8ߒ㣡hť29G1~XiA  _آ:}9ОcS==6:i$ gz=#5y`uPncŁGRP "PtuR99߅mk[MgʄM=HF1A~d<HB e@!?%GM۞^Ըĸ2 1V]eo ЄIyXtA `dt>b܊*֩^S-&U NB&@SQᬐ+ XK-3wm{Z7Xg8f-ktu[2,iR M_3=JR0̄A )%20&cpmԻ=u`SIcGJK6O t[iZct~ PreΝ[)ӎK8&C ^ʥy'|AV`!3Lu@Z &RSYAށK43)鬌GR""ߣ<=34}FS2<<(m%r9Xi7cpD@Qسd-NL 3 R8@@@.v>s }֞c^~Zj+ʷ !R.55bB_p3ܢ#:Si[i2SRy$.Waɼ=LIW 9cR[Ʃ/zL4 QY v҆/ p@~C(•)5->4:$m'X+@bzcrbɼ7i"/G#OtcQ&X2zWLU&0(SeWQ4MV)Qؕ$Dx?_tἂ$)F0RS&֕QCx~{apG^5[(60wp?"(pxw8 µj6{R1.ש10:P|cAF1vYt_S!8Y9ι@[Q!{F vu6;Y +c;999:2=!5R۩˒0d[SSSRRI&r*;^tLjƗ'үdfB FqHF r@N&@8.2;g g-:w ~✑&1GbkZjﳲM 3m(*қeT䍶(eÀ$ 4PŒ{ ~Խm t,pmnŴd `5m[.nׂ \IDbU%v1o+?y | "%*M/Q],l)@B+":~ rr\ ިYY ]k[8&pڮ XtLR@Pk;O*_m$*<Divu!XA@ 4]u 뛋ܢ5~Aߠ~MpscaT.LJcHy-nD]lq/mA'QKHXMKKHM^͹ILK ǘA WU=={$3xKJ/SQE"uz@ 1@f2h5oԗy8uG+ C ָUWi[@UXѲGFڼn>4,x_,e/=PwH4vpr-ؑ022ON2<̹@AIX,/^WK>k<ܓ_U4hwGpڲ%(e&;@i]2HMkD4Z` p7s6Ѽ@ S[rg,BfqyY`B@#X  \pHb""DgsLŠ t"/Ziʗ]Mk/<`c: 4}oM23 &0- 'I9[~G ʖJOOIBLg׸(ۃZP}KOMZRB*QQz4 PD(QETjA`٘k-.iь1 z +?tun].4ߟ:0(IOLߔ< ̊( N/h֫\ yy6o X^ *FX7\ӔE \h( Jbݻ4B@"DO0TbP,*+lczz r3c=Ek^%bIJ Ƒݏū`!߰M̕h'*xi!uL9!G0@:$nwӓM0!X4X":5|jeDQ]uD]J\V' pή$;5hM8Qaѩ VNZao6-"9mG4je~ࣨRX: m\%pdSF$hQ Ok.YN@i-1Tc]>N=ñ9;I傓 " ĭnы@+-|-b>]iN+X>JWB\Nf)+3 :L{~i ko ׈1DLAd!@7U+g,zҁi!t |N%3JQpnټJ.E4AVMzl}n=` ߛ @" @#voU=9:K I蛅[ !@5Gsܪ9V^Mm)^m\>#@|E8?~OR/H_S/qilY˴% C]YZBJiŹT-ZR1í@gbU= H|LKI}uye=#-]+{>:*c΅Fy,$\s̹G&5dkg7‚U Ĵ  L𾴴iojS&59:ZaJ\z <֒FM9 ~"HlԜ9jQMao8 ~D n]lYG ( Q8u ##irb'\ dFJ `/1ډKt)*LLjS8PϞ)a/dȖ5"&{ ɐq  CKRSSQEO p'E/?>~"Lݩ )B59@L*bqf:T"D tV/ݻx_ "NK'Afdww|gUW1_ ]:;n&u'Bw:K@SDgs-An&K9܏ ~Q 0`gM}k׮ &ZK_|ErZdwfǗiaU& -&twhtHm@_=C02*BI U^(5BMuL)\p!bJd&}MǪ6]t,zܤ\0|ODhzG?(?#-D 0'LFOקOT&g>5.IONiqO]wO7 #rX rv''#%2OvD| hzy| ;&q,ek (4g~ZZZ>iHL--#2;DE7|H'qmA&_~BP"c ,45dgwF E tC D yk?ϸYWZF<陀X ̼a)K>H$ `>Tsf#@zJML"G n${hzjM] F_MΎ*j$ <3a|wXQr S,  NЅ\z:x.N7:nOKKPPF*U~Dr\-Ep^$Ϲplx Jv3H<0ARB1_wt8IOf%$7X0q߉&j `@ &a#~>`@$" bM e[vA7!@h[5,hRrEl5ɔ/uC&9 lҁ޽O~z4&]gygcSnp{vXW@~쏾I  Y(_~$i6Α0)HO@5jUz)0J8@'=ue`B% (R7jFQ2OEk{:@@n\\M;Li)I̴ܳ [ q 1^M3faڶlÔ<x'7K`xa@@V[ഓ []ؙ./t.@D `ND,tϮdH?yN@ ut W{3q/-\J~6>h$LjD" J]HYV'020  totS:]HOIPҩwz@=^ ȖX8-~{ڬ&@0w_ 5,#=,  CNIMdee% J7nNIIqVY4VɢGZ @s{ڐbiI}k#p@{uW:M.͙Shn-V.>oxj CeeW9lhi;m vte 33d?}u.r:lsa]v3ɾ/d.[~mܸر0 QpïERۏuK ֏x5%$'1c_B,bm)  0C T2k,RPb W&tM a? ) 5k6&L艾GN8g\q{|Wg\yj\W}dՎdFNBHզ&:mA 矄ZFF 'ٵ~;&&v  |b.:]sul Y|5K/---e ;L*Q>Q`@XZ8iG^Ιx6(D>lFZ  ]GZbd  0Mvk.GfiR-{f$qْUYa<):c3OVv49 6й۳YmE&۸KaP5pL@ 1 dZlο@Tl]U E7sG[CeN~^xl1R6 w4'#K3rqٚĭ*[C;TUպiD>b_(A$BoCv^%&X>`@D vz]('N@^wob&NtUNW_s-~u hF&M4b$5-_5c5vghe  @ha=mT$222^MvnݺK6'bi>?-l|!nqIVrrJ'mݐ^ޕN % Oh(,BcꌿB1%1Fp  gR$t=x-AI W+o`#FL:wf[{I$DTC tGBQN+=*JS$,`@h JF#lC G !@ǖ-NL@O;Lk3>N򜂂yv65xJ6=nރ |Ì$# C ԡ?p.-N #Z@qF8 !slY CxsxLQ\GjLo(]Vg͎*D ړEolhO/*AiR Αe1 NvJz~@@Mhd[tEoPV75lZ7ϕMUzg\{U.|eWa| Għh{MR.MaH}fؽfkJȇzٓw!XB ' |ڽKHJHCݵLDǹ{H=R82?<.J{zKvZZLohntեuqJ8T$Ny4}QW 5cdm9 RHIP:̰Z ],;a!GAMoT1f,|#:4>8 W* *SLjeHÒ+D_L`S8{n˧ȞPζ-\hW1 =-@'XNp]ce^}9b){X GTb*@f5W0u1 u {3>h28C@ t/{w6ԉ湧Q2UŢȭƺw~i))CC/!.--Dw V7T7zl'Y4 !}}J ؀r1a|lԨaG؝w`-RjL{lރSpز u`;]5՜ Kx!.4 BC"[pM-Q*ڥFkÏN®aovŎձ( ԩ3ޣ{:Xe ?= mR1'V Y ǐOт?_h0$Ll{s&4hͧ9S-p?\3ܿB nzaq->r(6p_| hBvlm*6V8p 4y Klk$#v]%Jڅ$wQY'Lԩz ] O=7GVTЏ.W S)4t-i8z#(8pq^{f r s ۚ0[nFū_M6M˞|:`0~m~F.p6~+r!Ԝ;#Fx`Oa(/|7|EUZۜlF\5O!W*}B+@V%esqzf.g3-QGN}7lIlӦ+_&MEm+TlGS n|>;K{uz8Qab~\OlU  )T{>3vnVB>9p+^<)j0L !h^xoC-O㌓hr?| 2{T q2\@H8i~-\{]K}hܘf}OY{NN%v}bkDjjt#lM`k#3٬CM]hh @'3HЙnDv3Ibk!)igyΰSd깾HDSLҀ/9h,y/޺ lia /t@2K @@kpqt(lݘ֯uW.]>|O/n:hhhPU\jgS =RY.F۠pOkOx_% p.H @@4S&L]anmtc_Yle7hH5j>7%== ;E&4`E*#L18OI?>HAĘ/EK@ (-(M@43:1nd֐ǣؽ{7XkTeHDZ jWO+_>ا}? )[F5 @(4K4 Mpk3dv4m4H׾j-s.r^Q֡F#Gs1>Z ϟ]s)`nyKB84Jc@A<@Y۽9f"M+HDҠ=zZHu6o6R:wb΍Q8"'s#ħ }U;TElaԹ–w chTD U@@D@eIp&0?̌ZHuly-rV:P[kvcb[?B~YѲ^]~N1́)m44imhת}`WYw ʀs3vΝKE֎b"AeC]8,ҝVL*W5tEK@"@ݦ=faE捥$Ǐ5:7G q@mmm4(qJ8<Շ,E$M~{')!NMR4a aJq@ ZW0lEx9w@gX@›Yok }zv)^ ~Z/[+.hdv=զ>OW*]@dtJR@g6N0Uh. Bzycߩ-/ CQwSzJFs;:HZh?W5h㧼^g du̻b-")㼫$c-%S ɨ8=­[6S6'u0|MĴq,/vIYKA2w]cSO=hiJ80aiٴǺ>iwYv>Oe(I8L@_`O/h WW瑖 d45rz$]o@7t'P~w]S8j*9i"#aTn:،"oV E&0ԙgh7oV?|y)qY pZwY P*hzq9RI7E).Eo7Z{ sG'D@IDATD`sQ`Ȑ?)yw'`Qd&;56@ 2V@)3>Ҍ]u0aBG2 y$ᖘ:VtYc5kO2(|)]S]U9l߲u@%7R-{i.k@ n}o1`%1ET?P uu %e84ZZSjof{qϑ%8ϱ2gP?7,?" @.n9HtNSg?95+ nZu]KmP"x^oȸD&?H@ҧ"[!tR7rD8(y׸$_qЗO_fg??i(]ʚulYWsZIbCX}LJk(ɬGNJxD(ʪ"@dZéi\h QFԧ?Zqzp)7J;eޛ ~o0toZL'! h닽irR1I~^\yYsԷFh1#Y<|xY%L^1Ɂ$;C i9öH)'~I\0jyz{U36H;ULiF=P{^l~DI9C|Ǥ gTge'(ik|MW7)@Ў0HdΈ0qƩ@ͺУMcr߳_o~%eY:+j,XӕUJKp$\ 4` rǐ ;GEu[ޢ,}Hu-BVw~% hK6|9/))ےi- TmzsVMUcTXy3p H|s&Be \5Kf›!'Ru>;ch=Wr]ٽ^H+* q0-x@r"]'.q{'7ַG)wX[[K՝sG*sy#؇Y75wyьOFhW|)IH)|"HRs⒖ww5mٲE뼙jN6i1yeLgzH4bnAa ڑ pLG y(Lu ?\Ib@@!JSWuu{[5㜳ڵO5*]:)~+V`ȱ+=㜗+Q7=C*'2[#.@ &4 4B(;.|7OQ}WwscPh~=ztFyda)fgz,Mu3x3`@ `6rA勲{ҤI&sړ:U_-ٟB/4"r"F-Z$es=˼ɔ9:9|ߛNϻ=CFE_Dj8i[QwEy*FLFpTeeehQoݺUMlw{g e=]+K p_|#9d|L@k7wh 2Og'ް%<>tLm;Ƹڹ3Rkf5CG)wst/㫤wI@  8>}#m. \,WC^VV?Uc#+^\&8d5RVI-椖- 咕22YI( e@%ի?iCo5c'pB >?Y ihr2H^@+濷EXP$3y!Z/2G)oIT@pTi#Co5cx]ߪv&G z* 6`S7&!RIj}[ɵҢl E[놸@>@ oϱc=u. &sԮ^d9fb@Ȳ"KyF<[@3o ^E"Ъ׉#m@o.++S%Ԩ]v"Z/@`d`s4MsΊ򔒸IO{RT86XiӤɜl. P_>2H\yȐxv1c({˗/=M Oò r/wӒ|cY|Z?85}m`\$싀z !uݷp 9֭DקVN];bR/1h7h2N~F%n@ˠ`u2X"!8a6xc[x 9*7mH$M^ƨxp ={o$l~)=ai_zJ Qj-Gl6F+:Z~";wDח@Ǯ={v. Co9vPz ,OBpq? >nRαi(+eDb.}^E`w (|>vW{, 'ˉѺf|O o`ZcDZh ؓ]"fO  j8w@Ãw?lkkS2'^\iUǿοl)Rnm%e f:yreCNFqƞ֙$54uwS9y&J9ɞ@/mّ7(W+h^O ֖V JD wfR%^  w_j&皶k dLֻ/Cl q0:8?ٮT>0B/w3wꩧ۽kWE]>\2F:FF{Czڷ:d@焘Y--ϟɁ @B̑"nhhVUY aN|1/_lE?uV=nſiQfd".ŌZp'-&`O/khi[\ă Ч@uäI7m&޷E? ;D/G 2uːkP5c3B(u(Q: =LJhh~m4 q$ `_WeVG&B PV+KK*`7&.xX0Њxct1# 0qeהve@}=,cݛ_8V{)ɫxOO?',CaڦȨhc2(`DZ`2e ,'D퍍[cmbl s/er5m0}D<  dsy5njD?=b9 4=;{D;q}s82o4;M!@kYQ@҂mg-_>UC)-H:CH!dC>d>8 ߚe]5Ob `\zDUM2{H|4cL>u}3W/8IhCO$D% 7ۧ;{A?w(_'3G .0yu%kQs︣T8<$ƖBʋl0J[5Vg~Wظ ӂ5n44o .RFC@V+_Nhh]PdG =Jo,=wb;zH#EZױw{j%we\{P_ygxRT:mM%@D cX+@) 5/76/+#KHP28E.ZcRyI з@ ^b^0CX~tx@n14EXE55+o0^6c{2CD@2 4:Jzfp6$  =h0o߾Gɀl@xmZZ-pI99>\]svMke) +B"BBb%ϛ㽀j~!w^ocirWbrcyHDA CW1DT D[q]^`l `6SU6h>( }5XŜ`&M4ʜb$Pҭxtzy(hln^:7(mcsβur *"tY#$afZZf{TWҒ0 f  ^tI0)M@QꑈY}YDE,O|$4Iš, "`sxctޥX* n: Ů#v 8 ?g@˔)e]sͅ@s2#mmk$*fj(fØЖٮٖp$GeaQ< E܂usWX r@WX0?@ aЮSlo$c {Q ر-%IP M+kLE1ƙhe`G՝w?;iYh\?Ć"ЕuXR DZ V7*I T*ʖ ,̈́_[c6PȶvO|<Ͷ@i䵷uL>OQIJnC;sE S,>>PYQqmVH (@ 8ڱc_^"G Y2ӕRſ4Fk[G<Xԟ;gs GG @>mgЭ=q hǥ:+jܹVĒ .~Cxc,/bgw>-7e<鰧@ AUG[ͫIK9EA r7v?Ag;X@PmO۾'ifԵ~z %FH,8QM11 >/Y2KJU.bU*!uvY, .)! rv7y'OڇGDF ˵>RB."$[$SVT@Š=dST.~K! @i,t^QØL^| C>W\+]T'(a}Q("w,"486~IwZۙ:} Gž@PLZ[׍,K8]Th O44sgɶunwN޴ an5 gfK;Ӭ+QXyuqPaF}4Oc/hWw˗^4@HfYVIi1.m+jHzcpwIcq}Rkg<+~Uپ}W>oH86%@PwA==60k=/6Ͳ?J|[V)?wy? 䃤CN'f9R藜کw{XWxiʝqF9c?VEdLs|'$ÂW"J\TUϗ?\|@#Zkjw "Gݓ'gիL5Ȑ-ܚ([6+b@\Q1Y>"$ I*S"]_;% k/t}>+9]V5ȀmwkNVzFc+]m7s%GnD{&M̻ΛdoR7^A$S)`b5*uk*+oB@6I@klj6&]Y 0ԳysW܌Y5IA עsWn%@qS!c'(FWJ'k2=Om+{=2/ToYP߾4Q/x QuPE@{cJQ}ppF@zd=y=C_zIy1NQL@Vp û'ǖIvgG~Ժ(FEuV+weqŸvi'W o\!)3Y `kV_HQ[鶖NxZƇð\?aeF>rس V{nPq/a7$IFஐ+Gq[4$;[oO05S||u|s3oJO\be& $U[;KIC+2-\oBZx(o[؁ H.V%E(OjuyrZYe-lQu뽉WyC2e{ΕyZ{B_@cueySRH -lqF¹@4:25nn$/Ϟ-b+ LmSڹ_2//? ?d`$S M>QH<ӽ(P>s(`CS˯*?!p9~"t;['Nr] Ih7b|8(ȽӦ)7z)ipl"H?GK,ucm"JBT?QVVP޿?er!k xm(jay=L8u=n|< RN9{Hs0lB GB%~A:JՇr-I@Zȭ O>8)Is%,cQK#|/f^uyzؕ{uZy7{c,YU2ʘ<Ƙ0 .-:1_UT_vpx} ȗc^\; "pYe;:$ i rO}di*pCoygeH,?#K0ӧ5vxk]RB'M2ygnM+?f8% Or3hxDz%7͊B{$ateťw^Avߒ˵=qs<mܤZ~KcX%o(@d=;u5g,2.Y`ɗɷ ,ʉ^W_O"gs@i庽#r\21!ٜ4%~` Kq&aֶbw76!`L\ԇOqtk0V$8Z};|TugKz^Y^P}"MM4OH'J c{h%r>Xu#_ذ{>1 ^A[W529:)""|w_Xnݽ躺Pn$2 pmUe{BB2C~g|/)5UDQ99Y bk] IoQ}ȫkڳC~H$㟿P+}LYIҘ[+ݜwn?zK8%{N ;GOafh'e oױ(=hfu?=3>ʜ)qݟrOcV KvmŖ@zȌҷ,Zt-dL։b@WEC.. #wB? $IORܪUbI/0Tѫe9C3?) !4\jrFw8R {w U.Wı$E-%<'#c'I D19-bUA &7yNLwpdϛy斑[[n Joy1't]+~S1eӰrcTMZϮ- scs_d(3v  㥀dEgpH>$ORvdLgnv?ټy(E`2^i뻲ߐ_߇Ġu_hQ/eŐje1SIZQ5|LHZA}nsMkUݾL[Y+qT .:w卑}p Xor9#l|x4Tn[2w*sy|eZkkC'U &t3:'VOp,5΅M I.$eA 7U Ɠx*DksL32gK@ة$2g΍|/<8 Flyv SΒalW7j:} 2ZNx9)^/g6o6RǍv仏]4"qqzw3,ȼ6[x*{D9m2'!gڵVskTo(w@?4Nx\c~$A]wm|Ɔ'?3:SRzz覦#F DZo'R[Ҫui#Jl0ZuRNpsV]k$wݠgSz'(:':ne+KdL{ nwM{R/ȿAESArЈJ7׹kff슀Zdkp\rs3זt<,`Tfԧ_rUY㦼[`UP 7T.'}-7~o:1;Q3R9gv%덣vJfvsejc߳zRU\,UU9\Z4'#H}mcS<$ 'Yv# g=YJ@ ׷r/5NF+Drar]Fuh*\-0bMR'. ^2iQ*c oF߯DأRņR.W0F/ wp将qD_J"S`I~fH[/1PRR `t| r?8o6rT>.ҋ 0Pa[]T鋀7A|IDdHcsgY q(+[aEi0ʚlpK/L@ pr_Q^%'9?\fАUM;-nyy Kk4&>?x$iɩ & Յ3[Lڤ)S*L/sG[vx !_Uo̵|ܕi!`Q˲\cǎ6 #(,fk)9g/79>GKr.}QDZDd]JtuVb$ @ ev[>!8Z7{wח۞>i5gɒY,3` pO'2^DQgeԶ6 ;sOʒauv U;`ng5,@^#ǫ*+ڥ ˆU 9[U'>$D.W9̃bMMS|H׶O̟z钜4 [B+ˋ!=^~[]a-A ` =ׄ%>_UYMwYBa[.޶EEh _32 fٳZ)W♏LĤ1Q`C1Ae6zl = ГϹI~I !huQƜb¢㜅,1q.sbO}4TXuÏR1=HḩcĢLZjsFn7]~ƨdWe%*e c |` 5^X~ 3"fp-\6M(;W^"!S1{48 HT{C#F7h"-vA*rs?#tLC&1[Y?~G:v 䎟61UG4pir7M+vœ`$u@r \#KW9dT KW74^lRWzHke۪вeJ ),9eŪ !fFUy&C͵EUTo޼&Ԝ H \o6ݲDߓ4 vMQ߷.' DhQV%p='խ>]ٳfK@n*$2=#mNuUuu! @ ,lhhh>[6L9k+ tObw4:Zp@!'I6Kia| u.ykiW)fuyPE!>Դ7/@c,%9N}0MCrWWgޚq x3xȧ01>b/W|Wx"Q O@;b9 4xjcؓ;vd/?QUDa@_u7gWUTQ/iRJ@}Y>a86 ^6cdӝF&ݺdҿ-X H+c62~ _V=D H >Wlcs8$' hh&>e}܋Bv H|݃gڎSvdY5 QdBG 0m9=4Jԍw6#fD!@@(^Q]9|Q7xtِd%POīb!IԜD[֨t>MfAt|0ЄBc++wX+!yK33gK%ҁh@`d%ֹ݆]ys|26@gު+WXNokb^Do*No`U/~2  \wo8ro7VY",@ z֝Ų\d !M+vo5Ze"𷲊ܕ[)2Fl gr@a nR5|sXϚ:!@ zTN\[^H  u8z++i97V<|ϥV֤GgN`YuJG[ rO(W,)jzt-gܺaV5:$d@8Xkx6%g$7$lD7|CS$+`~ho0=zn y|*cn@ DV{$pݲd໕6?ǯKEʽEg; *(E[r Y𡚃~Er!Vm,/\[vL8FcfG.zG#l@|gЁ$'K+/.>^CϾV(~^ruR JDz]ko[үz)'ժԗ-z]KB2&)Pcs!g86@ }ej#*>+KA}Gl`_r*dȆmΪ-.^Z{GFc2Bu+B*n^>/)\~!   mG.|1c~)5ah m~̝h{0@e;]x&r毋Y3&Lw?"؜̋2|&qi`"u@haǎmZ!p<>]x픙ktƦB K 0r6R\xbL>m7rNux/y0|)W;#ֵ]C  `YNI~9|Y˝"kd9?I!Mv+թc\^Hǽgۏ~άɼ ku$T6K>[v_}k=I_ț#N Αq1yWȤQ[JyԶT[eG^xVC4kΔ;m]ƘKKބc2|ݯ[l~nyՎ5^/C6@ {Qok"՛ 1*z3^ߕ7hmm=XCGlf2@UFK@/,E3V2O'X`𠡟t_Z;d0|:sdR% h bh:Nhu];nnllY!$x#p{X[8cgߓ/y„!&5F- bv;7Tl_48@ y6zkBϖ?*/?U92:xyт _AX_;#AfF c爋ٯfXCߟ!P^v,)? xPJ@(`K@u&#ʩRƴ&1X"wȝX!\/!}vM5EICo6oޒ" =|@1Vo_OGz^`)7N^ec>ǔ&Z]9'9e lIDAT@hIc`; Mw552_쫝  p6d8|&p1 H&W)1Hr2e#?˵=)KH6@>4Nsj}Qo%fY6ݝz& @h(-YM蓴1F2l$)+KՋWݗܵ*Io.=ZYa xleE g>:}x.]'AzR?- n8~mk `sN6)LVbs;ILƁIql2w6ij4hQ9 $@ LWZ+™+\̔)7'W~X >A&0+ xw{:QHJ01j3X=X֯>j#䧖\iI^ǘvu*w=]]8]uJ|?zx@/o_'r" B`w|Gʍ]z}YC AE {X]{_lGp3<$M@%=7]ߤ&`Yj 3珬x40wMat P|װ! @κk:y  ++x  8A}28                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               %`MއIENDB`ic13NPNG  IHDR\rf AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx] `TվBVBBT** RZm.Z.Ŷڿj[UQpG Jd KXd IHBY޽wdpH&,Mf½:d{=seL%B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P$<ٕ(Rzл$4Ϙ̕LјRfp$cKM2kL2!4>əsli\V!o2Uwn|^޽][շP cb {EC dp/'*39Kuqы_7_:++fd"ھl)MN]?ry3A؃@xD^\n+G  b |-IJ4W[5\5O{VߜEIb;ܿo's&$BT{>ihIqjRX`sC0vzބtve*%tS8{7&41DPW y1Nj]՚ YݒA`QJ;~pԝDB@1yG HhI 2%(3 a9ah'Rob`8̲tQD@1|/GW{&7 du:-< l6H:0(_0[=w:`fT$ $̫YXVԥv9l3@`HANPAp/_*=A4 O[LHuw:kYTby H)a 0c$C$kݕKy#xQ5/jc s̊.hw=gԍ(:I~o #ȅ_RQTI>|-䃇]U^VNW0W a^} 8pZR$0 R2'R!E!@t%S<ϡi?-]F=81 mO1)@%퓕E.n!&,`z@O#(TdOVK`@X0uLe8ݷ`Or*p;ބGU u6b|T[w\!͢DiX eaDZ'oW8)+pR;R;Z4x @~J4}+{boկ`<lzUdh:yr! f 2O悙& .Z&0j #un4+NuHhLބ|R؋%ʭ('z2:Zv]_=ޑ;ii{:sGDR4p;ׂV$7 ٞrkwaJ3siGD~JM@}M6%36%Ա\gR[´B@& t3QvIi:L_6jwAts'*+@ &3S$**dRn. :+ʷ cգul wbk;s JC(qN9-lOp HsY o=i?e/z秤z;HAz y{ޞ?ُbW@k}ݡwSլKS48 c?,cx {w  #r9 &FvZU~`馗\R7C4!"ɛ:}2W ,Ci#QWHD8W`+LstLӔNEF$apK>6rAZ?wDNBtD;%B,gJFpWb]$:Ybwufk)VsMWJdꄵc}L_5tjHyu +SU܅Q3BzL4KPc~Q##M_OlID&} ;ja߅`-a &RDz>hd "<akƗOэnpLF 8wR#4W1` LR,'Evb&Tfo.F).^t'` =}׾ق2y,`1#Hկ349d-?>禗b2:ӓ i LE? e pcǗo;I@؈7~-:BĽ83 40q]ǡ:˪L]9)َ_ٴsDR[8gzu*fq!L\HLfo<FS6 6V38+.(G[* 3ˉF] ߟ!V;olŴ 4'}r`].XdR! <1HhТ|dk͚~r f ȦUfv{2*@;G KI_,|f3Pz,HZ ױǯH G:H7n5|ʦen֑r!X28f'i=^DHwF,7uz zS퉶N 2(Cu >h[Irb%Uāe'ل|{a~>w ߀` +O&`^8mJ1 -Ou86Baiӵ܎+ #¼=ApoSbc9 |1䍐5:3+ ,mFE:H7"cmXՈ s\6#-.\>=GUfS`Ir>'_M,@oG1nDdHoxod$N<]w4Ƴ diBQ\}ue;켝(jﲉ.ǞrIrNDN\v9:gNSVkij]Y@x3<yCP|&%Tc9Uײ7 ۅ؞t\4ug)\xf CGgd#i+dvWu muؐrOr40~9ԡ>yp&H)b;FɅ*3)|ֵ̫஀Mq3K:Rx>I2̭~rt!=~J@: IX2y}<؎/~+Hc~2$ "(s+cvJVǏ_0IE'sA4 0 T>Xs~GP¨ATmJ#mٰx.1!rϵ$`'a1hOK'lD[SU+ k r{U=*ʟl+men,⦠#gh ;HߜI䑎?a`?\|襵͍&) NH po-Dr^  &? 5Fv߿#R- `:4WA$ڜ.7{,Q˃iX8ax}`kLid/Z57.m"7ΔS)<GZNe GR@.^QFgJ 2q3Gi!GaGn&W{bÊ=ȟ+rl&`o|-^տjx i +R }eOǎ0/4La~1_Pȷ %,.:tC^Diٟȟa9p/E勣@fFUx?ⅰ|547b>!;"/Bp>]4 ZqO ՄrOҌ4 un.pludA%ED8,x!l/dAL܄4Wc{FָYOh'!sBx._HyILfш}g?~<_FN>'W'.7Fx՘ -EfI߭wQ'4hg'6_f)]sD2Zi,Iyc1j#EB䮌e~qόGCjx Kw\̂8[#VFU3 r_ݞɃ!OopXop&]:mpC!̝.^׉[ q =Gگ¥k nk?5wx.ܵJ]u RoX ^;RV[Ͼ1iA.0 Vv"elN[z޽ɦ`HMW<,pͮ2q3_kЧyՖ.t pf,ێ,C[u&H;jhL&.Y5┶sYxw:VHE#ۆ"6Gj7>7빇4709 0r k~dr3]uiyE+`HPTLZ2@ǩkN-1m68} .9i)]n+!$6g9fSMOD/@)_өRbקgl· `N@xB9t-1NEE}vər,d.aGZ'1Qr_UU~u)hmH,b:[-؇AstHBޓ_Qf˲7s#=iU qƜ|K +UcΜEC<Fbpι0v^bx"mhf0Oh4:s/Z%G{6G=lyƧln!9;ƈ;? gE3GZA)ғG>GzMn:]mNKf-"Xu\=P㴒轹T἞o-6D/-`1#S@I%?^ O0d  ȫ(^hgcg=}]@,~QD-̶V^ׄҒ퍦x<3&ϯtZ;L;K_iG!;Xe)")jeeQw1ChlRud,-?fxv`!%R5nY2Q]ewV +CJg1R|NTMCAЬy*-QF`#9ZɬKGc).\f`,S\K|_y4u&iZ Z cg-ˏq'"Ʒ[PEәہ=Po>V3(mKnYɪ?KYXYyxߋYy8K{ua% K܋Wxh B)-M-j1DzI'܈bA]qT6%;|;PO`W  R%ŵ*Cۛ "DqSnwfn,R zt"[}rl"KRb-\1_iь~>mq ֌154=,VH,I]@o b![ )|P&wh bHk9͙*~e(c8}U~G7j,'4^Y{SE[bB1ݻgHO=GfЬݻowtm'}%/dt]1fmgn*\wHޢ3Mf5;e_\OS./{h]ςW,(v4z6 uĢWg>7;ݠo3+Bm饵KjܬwS~wvV4Y\xCaUXo1,z"V':̲ؖDkyUF /L$D*#3''ܜ4񿅙~|?-tz*) ,L:NlRz ֜쌕Y7s5tEDd[-`LY(aB BM$bX08wdk [)0FȪGSa\@^f"^0f@Vl9!R {C`&[ggKb"v$pgf#Ex7zf'kNk APvP&j}ŭ~12WLb>çm[J7Yg棈ľ%ZHOv8=yh˖.7,DPaߍI۲ 0l ^dK\#Z ER{P$zV=|@uxyXp| 53Mk }:AK.`E02Iڞ,ل3\yV`` a`i[C61CT%@*tH`9= QE a=n/RѽY+rr"KL?-z߀d"{Ęf}Lr#l(EbEI̮:w(N6v#v3DYo *( -& ۉZ Cbi_˿/(sio/cP*Dn=A=4͈h[F99 a1ª5~n7K4@.f^,Z`P>i>PmpDv=zRH;I[d;^4-aݳMeT ȝwYZ:뇥- ɴpGaF\+ !  =STaV)$19'f" =l Smg9Y ںu>J]-#a&j%Kqz-5K!Kڔj[61&LMgPYRpiN^n().@xgO UK3lg#;7X2RiՑ#2'AȻ'Le *NuQ3?J5[`,Ѷ/X@h~;N#:j$d)S؂c@ţs:{!RVi\KGϯH .A(ϲpH^K`PAX^ZZ+ ,]r ?QlXSc/kY#+Yq:P5S MvRw̎rGr23 M :1{r5h?Va$"S#;-RZ>+<=AB 8Ҳ+WgdgVnY8n3iixNB퇉 K_'/Ax8|*SHHr;?!3b ɮŐy{- nGYjW ~{zC26mIp}-Y[z㋈%X0g)FETJ>ɉH#y[xZus B*E-` @D=6b,J+f\Zk̙moz#ѣPpzmlɦ0tHlۯ~{#15搖J:dJ}ַ/B:~0ȊKǵu4E\z(T[m /!wC[m>b_6‘b\u]G97LBZ\F}rCqu,2 >!R7!N+00fTZ@2HO UJXԣK>#1PaN=˾{Usd yݻw͛a?-~0P /qSX #y69NXr.XJb D ⹋ L- 16ӼzXf)3)qCe 8l?yR{#g۷og8̏˕c=ƪZ+qH6D Vפ|JBYmB4hm9ȟ(;mou3RQ;5C7y" d))'_(/o559ݶ,S`yt@sMbR28qD  9vHKwn .ӎxQX`|i@4K̾Xɲexoul}8 B_ '醼C Itd2e.[?n3PDLc i. Ƅ[~|14G1282ΌҋO Lwu:ʹV̲, *I8d6dpkdñc`e_7h @RrP x,P -e+e ]'VGhD.*:El0HSL9$+ w3t1r |1hh$p~2Z+Ex׮1ַ/j=pb`ܲRqlx4 ?7y\l5-]9F֡ ޅu4\¯L샭[ATuc-o5aI~a:.#_@?m|$CbŠ95<#V^43GK26yEu$]԰ʉ9ghf;!jpnbOxV$VcB>S2KVEZt!MdZ/,eQ bwHgЍG#'`4-1x!Tbu #Z0 X-pgKT08|lU w7C՜1˧oⶥ M$d+D]&p#!uI~: "ԴVK2YVRltAk1t2F|ϾTo7CpWu-v({ ᬎ|՘߳n&flͺ?ӧM7K}:eWUA9ؤT)>J]GbP;*>~|2@Pq wFfp4y -7+%2n@S('^ T{ `NxR.nU@mwG_Vy,!o ؓ`Ƕ_jgAT?16L3{q^yݟƍ pD[x\]؇uBBhl[@z.jFv56f}(ͯLE͉'⦙DͭP4;mS.#гfXS*@Xfu9Yakr +/_ (זt*shGVUcN!DF1|PZ/+))d2G@/c(<#,UqDDD DMش@{ ݠ(\4:cQ ߅4Yz .♁[=? eSݤzI(@9\OHp*4]V[N|lO."%|`FJ'I$8ՎF9ݖsWOܰŽCŢoHg8ӂ^:];?t)n p8=Әs[#Pxxb'I Nb`H&C%">'}2g9Z&^qFLK6o7t-dcl(޿4Yj- k@<&r'}' =+B&%ΝALo'A2A1AMSgk5vQnV` 5(O$HÇ+=3[c "x!hW[O .]c\yAבA}1g1ڙhZzzc\  VK['K G~WMBjk]N5P8m NT[y6ɴ f B:~HVG?a+k?~Tixo('Oj=[(XGg3B`}1gO$ѹȩ5E.|$E$4KXT?لEfY־O5~V+7;|$9v ]}x{a7Qל%_Xl' O B8HI?nqbP}L?Z|E >K! !%ۢD4D*y[~n9s4Vu^;=Bߕ gI"lhL uy]7x3a"$=W+'kKvc Xn"l_9v`[Ol[u_pMYj64BI \soyYڰÇÏЗ+`cW{=k\2b9M1m;F^n|۶ mflf@h2|Fۖ`q~GϞ5J&Ԗt7eu˃.y+f@&nrs2 ;ga4FCkk\3P`xWCi5%mYiIׯy"|K_:a wq|1oFGm,,L;V ^-~Ǐq7ƓN@3A6~ F0y U|9 ZvTG=(g b;ї'=Ŕ]v 7=#+^z˯RLoDC>/ldOر=8_@EqOñr xj?hXB9k L?db`kpOT^P(K)+F]o>ʥаaZ4w o_"M/쳺. ~t.@]܌.MYx0|PYuX4Ua߃3s#TyO괾$Z5ƔS6=Ym;odC bmoCguRիHD.Y5nđ_UB@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P( B@!P(ɎC"IENDB`ic09ePNG  IHDRx AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  @IDATx`Žgf$Yݖ%nnAJx)x KRI /tlJp` 8S$ْnw.ݽYw{o~0F D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@h޺䔚Ř8ZXfiy̎f1St0 8ϲm˹Je(2$Q3猧32@ Uq8R#҇W #5HQ-?!:%?a᳁HuD)vTF-LYeDӪw=W"@Yp0tt ZsHt]wA?.;ocO+2 ė/өs'SwE݉Ο.q0ɠ0ԽjqyWsB=8 ި\oڤ:HQ ϖ->>0 c$ҝKe/(3^+te2al.󺎽Swޣms;nxw('k>VfU20l0vVg`|;|'7;rvF_: !)DTQBW_$:="F, mryt׮뗟@D) V#*06&(DJlX悝;E"@|BTd*c-ҏr7JA\:׏uGtufrwmZhPb(;6CCKF>.(/D$)Nwm%t:HT4Y񐏞o:VRmYrc5hP  Iwn6NWt"fvHSl;et2э yр(?;jw{3Y'ٟ }  :=a&SڜQy֏crCʄ  H)D4p`pgnތðNOs੟;'( ,ZoHlt/ qPL񲤪+X?ɏ ZHp{ |&pӀ,!q1ُ@t1 1j+)Fڦ e+Zb.Z!ߪ}UӦ""@Mv# N@ WQ#$ j~tD:~(uB:C@?h7oPʡ/3fnswʕ:kEEP>lsu@O@;(fKݚj;v/ij (o"U"\cŘ.A4?Kώk$!'ZI&_bC[:!RbH_̸%#B~ P'["KAl}$@ =R|_TjsFt2I,8S79'sY0U0Pa,*:/!M$)8)g23DQe^}L!e މFqf + a`We.%?~4=kC - @ @ Q"z ]e0MP;&m^1b=w߀T/<^鸳mhKF(')*-dQ@٧_%'+ V^6Qw UC1xH\8г_a8J8$Mp~ ʀHX#qF(/ ${|PD* Rb2!gPS\q%7gbҺ?@HSgۙe@2pX1Nr9mvcʘx)$c##[7bR`| $^]@x+f|ZcFOIb3b\ ."@Gӯa.ԋ^*عKCw$!@ @r];8qLg C؆zYU3-:hwb  nDQ=\ 6(綾 H/1K^|`ekܹ!C)~M* ,*frcS68/֣SZJjSAT@XAc ,"|V;wI4tG"ć+JE@AA&K˞ ݜLpRڅM7"JL͵L]hStpR\T$ 8&dbP:@q9zA(5UW-x8ߚ'q!@ @\RD * Gsr @&)gܒU@oTŔ+bnݛwzJCBAZH@Q%Xeg-dd}4t|Z%bgmH)"4N@J} F1%'LUA'?huBnN7!m$@ @eD-bZL k- LN|2=CR؃y[Ak%G"+8;RΆ!">ʁ阣Z#9iJXH]?DLɄ@o F8-X0;ap7_8ЇU/Dtz'#U@6M )a! mL6z"8M0a@7:)DG~}X1ЭZ*j# @ $ZRlSS} `!Hnퟦͯr>۷&W2{*  jʚ͆ 1JY4-6Ѡ*-eɇlT)Cj*(#qqq(bG -L~b,h)Ճl>r,ǖ5ɗ$3R\T6" _g`!~ X J?AoxI>WnOI1XSq`zE}?+1:si$n#8m5O6~iG'ُHcR@+ ~NP@~ET4Б|z=5VlW~_/~$Ā@EL1q!Yb4FY4[%m;7#0D}Hh?<4ր YQaQ,uzN voґ^$@ k2fbhAAƉ !2)0TACr9v_e+QK(\mpDkQ^n+JV<#kmux%6E|h{j? ivv߳=$^!@ Wj19W(ɉZݤ❙;̸\N‹uz70cA*?؝8-ƿFh,( +|_JҶAW8tդ, lY'h?whsO#Ŵeڼ=ґ$^ @ ji[]ˈ#LG uPBg}0xЏk.?^o(>Q'qZiM䤏x@?}gXdws5LJ\C;VPlGȚsgAõ>؏t(elOJE`=q+ئEJ^+13RsG8jBN!t5c:y7ё'| J+اQWa"SZ监=%[mCnye܆\+t^4b 3@7A:AnZ@`܌ g!If$vU@sS a\|O'El0mw_'vZAkO/m@9a=a|~ Ac_KH<ճga3A}P‰W =Å}޶mMR Nm/嗟)Lpl!FZ,_gJZ':kv:P6H0|gwo4($PQg&F)4%HK|iʥdc_E)R) ɼz#g)^ Gu>LPhZc%8Kj']JkX፼ý>;k.42V_碀apZ%+G[` P<<t-/)'?  N .{"~Wb{iA:~*j@O:NB6eJ+exk餵zʀ8(.) ޭPH6fi[op囟jcVt Jܲ↘F;zߏ@7f1 ^,E\e&SkL] CdrdP (̕=۷Q֔ `d^ kF b1^O~ 1 lG!u@*C{J|ԒֿƜ鲳ٯ3*,t_c `_\ʯJd)ˆ'9&?G;9}g |;2KcNNRyQSx,]8ͭ1afX٫oy,'WRpL*)ʗ]j))Io0Oz7J)Fzvڬ(}r|b@ǒJi,\Mz1<sתVfk>d p_Z@e%iGOJ(Hh!E!,(?ݸdFtg2G@sڊEM|-wJ 6 ~<0}>7O1)z=T_ss)V/.)4s{uʚ`?mNh湯Kʀ>~*+7 B @+\R)Q hyv$ѧH8Kz3a|hx#t-ug1cCDV{fǯ&_6tEBm!$ܶ=wmAhn:NFjx%p_MУB "# YÕӢk ŏe+ OB=, _$0=/o]N)IX $ˆ]9o5bF'I@@Op.^¼_.}GBzF/zJk{^8@V #@ PO\2aȯDy/,šn"Qa.Bj UI{ЗCswSZRΧj-=wP50sLx?y{ 8Y'2xŢ7$K/wbJt砧,zGr jd)Lzu@oAZMKB2D[y%_MxVbٯ4\l$t1 rw;KXniIH9䵒t+E& ]doMY8"<ÿ^\~{CHр>/aGw;KL@J)_0~q:^E%O}./yz^73d 8;'7|c@:ƭl^HH QۙѕDYAMqTm%{pɄ,Ԝ__pH.9; XlXsÖqo=rh$F^px V%QZ ]fK\*3h餍s='p)r)ih%WGn۷owx$J+Z(}eh)C24ߊVAIcK2vnĕϰ[GV̧ܾQ(,>1X"HNAޏJ[i Qs"R(]TbL~0XHoCH6 ^֒qlvC}\n*exWĦwx$itEsE}M]Nw W*{u.o})*^-kQDZɱ u~'C}\b=Գae"zРH6*8a7$O )=`;qɰͣ?5gJ< (C,.]:|bJ@;ھIS8=m҅g؏4 +q.v C 's ^dȽqgcp>9g(VP@ |~oߜށrk+O&-1,Ba}Zt 8KR8>%woz<]*"lN3)=$mz&B/*~[/dW&-:IO6zkEK>6OI(5SV(RWs쎁lvCZlh xs`- ɐt# |lI)IT`pw3(H*WvL_8m\Pڐ?LYz;Xzi)\Jqˀ>Z. :ܚ%_AI(EpPKb=thˤb7I@2n0U*N@x_Sx]~d?zVFz㙍shz7z:RQhz]LN骿i8rvN48O2=]: T# --m]2L]024>&!}Kut8;u gQt5y}Dp~XI6s=ʕ]ńQ%+pmb_7!"C3CF2""]P6BFaQM90}Ȁd@ˇy6w{Lz~9J ZQaj_lF_Y6~{.Y w3`Rg# 샥߱+\\;,vC6czN'欥F戱;xt<һh:\.$m|W CzmX$:2"A 蚖V҃;`ݡ*Г=Dsk\G' ŠԽTPDoIy岉>ԱrWs;f!.㚨j-wl{>QMAˆH3k_wɆTu0 m\mojꭶ%Y}62Ncᘸev\(ρj@_ x6R "KjnL u1T-/ő¾$ ,HPBP60Rv۽6gD@K~q[1*՝cfo݉E{76[Ѐ>D+,YϢ殚tO|jDʨ  Ul`.Aaw(j I?i9G/p"MKM\ 2RƃE~9oT@,&./Q޹9T`ҡ3ϳӛp ceAadUBYI4 ^9<F{my[2F@]ʃ1p1; Q?PZxkJG\aW/po庬,* @g\: Iea%?41%wGrKG$Mt*`.|7q#|R@(5@aT|IWՕsgm<>"0sLX׭Y8t)Wr,7P.&JXDnGđ@%~H9լ_N p%8N}8eSiuJ:3jѡfN9LmP'.(1a7BXc f!Fqpg<1WxfP7z(z ߮nu4w\Wz?eEQ?qq'Mx.6Rss|viFu(Y33ȿ~o \kYj*Mv (/hCTތǤLt2,.m!3;*x.2.bի{:4 T[mM8] } z*2MY!,.Cs^a Xm^<ȯWrnvI柂5_óQoН0jƛp U('jw;E[ʀL3F [͂5g|!&m!kc`QQuUu6wqqq(/0cM 1,ns߽Y IP}'A`Qݸi@™A!Q:s25L @;ѥ'P4d d8 >YN芶KoZ,FlLg ЖFk%@tܱ[Ґ bK @fP_ѭNxԲ&[匥\s]iXM|^cB=S@Hh3:0V& ZYPI٦4^v'4SC}nF'hi` S,ze+_ė@/$ MXw<Tq$}0DH\RCH ڇ\V8AF [*}E$~ V>(ϔ.d!UF@t@;rW ?W6~S񺍛oOM,m!#JL7?[ (] L.<oY,!4' ~W,.]a_c̼xaH论i4)d㯴5TTuyrԢ{NJJqKVZwQQgE3JW0Gӎ-{D)$3ݥ_|Gq*jc:AлrbebNRruoN;jsLhE~~R(1%֟tIX ^9zh:bC@+Up<%p|;67C}L, Y[M-S'U٪S01))X~(r.Q,L4-ZK]SCE 0<|b~ܐV7߉Gh}^ez;iy:mj,do襁FSl4EN"*ߎI=x3xHS ?0n?6fpAրS3 QبE{)80Xy< ^e JMXemөS[RR}WK. gک-5O5UvX.85rƻ7Fswzf8=rwDRĄ@΁ꝀU3.{tZp4Zb޵Nz 6ΎtoZ~Ym;WY᪗,$i h|&j? Վ0#(@S'P|u0e?=JէVŶppĢ+-o\Uѻ}AfQ_-Rwpz߫1# @cT _ pj{ +tV0B kfٰ[ew ,.]}u*K~quL/quwOyu]ԝo߇H2/&AުH};w fTICOT-liӔeh6mAfK`k%f+.\RjV乪kV`4N%*&NPerQL~c &Ȱ|\/s/:ZF `Vʖ]To~df5'qvSK*S0Uj@O~u}\G\ yn:' ջ<"GMp+@aL`7 @R7I@+w9Ģ;m2q |Id*)k\o,DGV̈ p2ͧn #Ȗ`If_uxz-`KSOv72=[ aDBfdV4GLL%d@rY:^%*is4m'pjLeWGUd5a4=4m8lD{AMStVRH;j/fOө^~߀?w ACAӎO5a |A @k*y6 !egKD'MP]Ѯ Δ:Jڜ{T y>'VlFNNlrn#l |SDqA\n*k\Vm m^̹,\Arot>0g=pF Oh8SJݟʆGwZՀIDj;⅐2~$w%-/'T &-z0lP (\t4N~ ۶#Sy,j߬(41K)]=V7m4֯ߝԻMk9cFG^$Pq5=@sŹHz НνcǾ7m>V+]W?Z9PQgp-K!ɿ#yC;uj-ˇ,L7G΁gw^k&Sy~1dØ Bҟ~Z">}wl&AJ%%s2Lv># }!k;3Ǐ_+P `F,m-S oAYכ"X~$i-]: L0Eo !|@*!Րֿx*oyNj!E|< )C0og-JcUv|[1>#P9tǨNnDJ~@+z*AQ8S+%+sTee_aj =#BRz+`r)}OiӹZÿ*sE$Z==-%0jX08D|qau~u~ԧ6z@@!f ^&z%*otW@'̐1➊>9TG-)/NT `` NHwli "DP|X8׏}~mFR-zS?e'GyXXUr%Ć+nS>-cbd 8ZPQY |Ok^Us srµj< 2\]K zKbA^;Q=_OXzywT%Qz#Cȗ^"HJ'+@|hurGo*z`Y Jm(Z Q[~D2| F1RD,̈́Z?ɼVAcL(1꩕/߰[i)ˇ<ƷH W}\}Ҋ\dFV?лwW.!pL'NO` Y]voP>\ 7_( nC:z\jyp/VZ+ Ҍ 6.PJ燎햿x_6s_^^ *\I`*Vºok_'W*#&<]06gBǂUjd{mSNEè'm?)CU|AߑLz@vǝ+{`z#:O@wz*`2 ]-q:~7:dE/ꢛRIK}%F9LܸxܺgR 8Я_aa$}lن=`۶ZZW(%W=[FO+ӥ{~Ş:jPݍYp!!;ŷLD䪃[#6޽ٜ/\0^A{V/G] bKgq6ח+A&>婢Qӟat[ʒ'9S / )OO-SFOGLC/v: r2&ūolyg"^lb&H0bƣYWL+6D~xwߣ-bkM@rfe?HIع,fטɈx(1 nhw^.W!` B@{|S?<{`W?; _eWIˤ;!k;,~AWGO}곧v7+Ƭeu2x|txP7q0Um,ؕ5Zm1WO}|xF$t`/̜;D[r`cgTDq!NEnägi<+7c\3M#7 r+mC蹦T5MDX)i=Hˠ}D0%`l(9!wvC +۟rp# ~r޼ˈ0͗R 1P3$&Oci3wp:@{81q!#===y%ٳ }+,'= J]0I6lʃc~q{өeW7ULæag?#d<[d+# ҧn r"F)ձS˧|m`]c~Av?8%R@ ^/z^`jareAbI@o#4^1{bw"Z2M_©7IƐ}NȜK9Q1|z:R@])=ze mVܘ7-ìdw9'Xg!%FM{. LՏSji 0Pg >pND [DgcyOֻ6ӟFqy6;?*x\%sT2$3=v#p2s՘eca/ q,XCEZ| %/j|-נSLf) O [$|,A8nR~J[0?*2IҔb`egD3._ˤx/(:@OY聒/KmԪk0:u<}O\2daWH8˵J5~66ҙxW<$yV6J?&9ʗ|05:o}+nR=LK)ǬTig"`B'֛oFe e7U۟E S,]aq!@ ۛvj-i]tSy /KzҥC-Ҍ>` _2~=Fo0+x#VMX '3dI֭?sqVq똖,=ףr.!l7#{ظ=NvqS`"CgF27H̶ïGl{Ɔ-f9'TWY .0%_j:h,={bYN _W7`ӎ{C l6[:DŽvޫmk7hyn ;g\ c}@hRdvʂ@s2x)bܴ`YGV/4>O G!ɖ &e6go -68G"P U ]ۀ&Iuq+@<烈46|餵ŗ&ZLԽ>'FdQ;u؍; ^,i6mE-$X +/*\4wc5!bƜm<׭>u#*ƭZr?Pˇ* na%a} ^B]4'nC!9Z}C²ͮ\Xn0pcĬHÈV7#cQ :4bY:H4?t!ҡXaɅKoKfBٳU=#-0WW"c^xX5hS/D1X6;ܻwƾO91~ش}a~+;Tj-/[9ﬞT̓ j.^|d7άOύCkOV[`V5^|@lE}ׯA)~%2Сut@OA#i\tVc'5YMJF_X֏-?~thgt.`-utT8Jl#Y|Fq#@n0͢/+^&'Kx_UTk@@=n){l[tSE~lՂMYV.UoMJ6CMb p &1$ :cz7̔F^g Ր_Ukz 6(Duplk( dYpXeErY:g*0w5 BYL~s:G/s0R&LjߢMԎ[JE/=TnI*mM`.ڥx}u_v~JX#9z>^߈GL@̓-+YfӒԔ&U &aV{hj/e7YjeGs~^)GWE^Wǭ-#t, {PC M{Wbsv.<"Lߒ@P &D?gƭ-I4xZ` c2<~H& <^G|(2PU2?Ԅʠz-Yғ,y7FX&,.P2sN뫥ueFў=0AzKK“Ңt'W')1?ENHI`ݒYHUZ9~P/yF^HmWYlyy}'#J @[Z3]7dȴɠA @2k]Yeiw*+2J:ց -%^yK ٳ}> j*B2(.N}PN,+;;;?//0??阝~y+((c_D7k)OXFʎ>y^tz`D-{+GV]DoX`:w,q>Bn}޺z blG\&tx_ leð Q 5vp^vVl7F٭+kF+!bbR )}siF*V"`;Ej'{!s2ЭS#/e=}b *S-jfꞏ| :RQgfuvX|K)$qSg';uquLq<7;c<$ކUUUېֻ=ftұcXFytYU% <{9XȻ\"!+8ZuHo'?\ZH VC:%uI9X{̒2ؗ]Ǭ^vPMOݡG89/]J2'Y}Z}ZO&BU49l0\^u\@oh4NM) i0HH8`龰 6境1x0u @nd̵\舿CJ5;DKeCPU6[&77J L,Ϫ%Mk-=F TLB NxxqUlzUMH>=" i tM* ι,QDvs2gfC5GFf^nRa؀yz)g+ls0i8_ i`ªB 0ĨNdz'v~2'D-BoB[o5i,;''\1{sz^ Εw]; G]w2v1t%q9K9W ffV`rgǙBbuB"::5bOF$68hkWRXm _K_FX<*D ~F/ esD#5/"f61dLNӣoUvz%)--zDdIrw=fDro,t~Β`mKޔh#[^$YݛyK77_W*/{7!m~\LEz˸t-'"'^`j\J*OEBJ+s83|zI fL\)99&J᜘r.f/梮_xv6(Xa>bYnffR{iFŬp ;4_'K -,I*@AX9zSv"f9a ٓcc2;x<JiCP'> 1RqT- g5Y4\OP(gt&)F /c1jrZs 5pxvFg𔛣Ξv<%[uDE(%\?ڎb2<t8qS*SkAA@/ D`O1=\ff^Q,;KznŰnoܽ4wTCܾp+[ʏTeU>L4D t)hHv{OqAu2/|>个캿cK'1UZ5NaA@kJ8hV\̈%$ RΒ@K 'UB'QX]4Ywm;%l.Juiq[A\0zwUf#R`"?.uu,4 /=0Q^gHg~3nŔO|@ƮʲG$Vy-؝nSW6]o|+(@u $eh%InRݻgS%EX3:?hrS,AX\΍Kf(YUh\Aɮ?!ۮ,$;\YfgvW%wXpumx`0~VF!k_aܧ]p,=&U-'V)؂YP<. ['YX'a @1+kܰ Sm'?G{vҭ0XO!Hp+NJÍRTز/xt$kf۟Ete h%uC>)r~ ~&Џ H'<|}+3Lm0v t׵)(Y,p=|9a!<) :HsvGLgP߂M`,ƩMsgEDGbH4}+, 6sNz)-a4{}BN#OyMI@XcYgUx $~=FGJ@`ُ`?_KE(`Iv+ _^cR8fcun;RĎuy~'@)j3]$+՞]Л9~#\[xݤ`ړ+>|R.[!j[)Y"UBnQQ8wk=xg cǎWBVйedt`E}MM-;\YώWUcǎ5, bX;TlTnvYGxdNqŮANj-Wo֎c7KmbKlbH,\l2[-`C)@6@{iW4aF_l=; [^_Mn %\tO>=+w~,-DiJNʢbPY__2,Uf PZv5 B>:E r?)#(%$&3R@k3@>GNuW'-V'Ό⩧Ӄ;/D_z套Gf>2]{>֊i`*tL"I`",ܰ`_D6]_P㩁"ͨFh ث1ӿѿto㮻ԩS,sd`y)X>R cTٳՠJ3%O_g3涒踱[XPkw\(}\ ( 'LJxp31UUSs x%.ߗ0Oy*.n03f` 8 U'0>kƲOO>0ǁCENCc9"ݰڃ`5AnmiDT)Xi <(bTaxS]?tsb^^]p≉Y+8`(isu dІ psy{a=]mZYnyX))7du|uZr]hޔ+&1OZTTy 3l0u 7&cǎII/u;]2w6qo&)^FLmFz٣#4b"50lci.r`S. f$pDh`?mڑ*q.F)/'?翠8sPd@AJ7u֧pvUU5'CmgQq, ܖ 0(j+5hڙyhߺn&\ ])ң =u߮hG ׯFʢɹk׮Q˗/W_555&(-)U&ORgB80O}5_V=ښp }ɊI:sԨaor}ܵV*Xswojo-h м{rV=+ʼ% xf8ij@2gc.֪7ꑇJeŀ$T1| $~oW/jɜs$ tbwRq)ꙹoB {^LHPD82˔ݘ>6찚kgEzP" }o=S0$]hߨQթRfj5 z]K}. ASc$6C9T9'DND~Kme5Uf| PXic SpukDž`~a(K%ssIR `1=YQG&O=/d*Kq(lR2fYOGٴ't}b$|`?/`'Rnj>ɖ㎎ZrIz)8&uK cC OeH~Z5cݏ|?`.{| AeG'<ȏYĖ\U,4`X <% q;cβN=_]Гy(Rۨ|5{[ ?(>M dSٔqbnbK,(6w! \ӂ s!e 4 n dJ6tLE`sT׺LI u]WG4`FUUI|v׮{2eN|Ի(~Mh1d|Xyޱr-6l%Z3gf"2*v/uC1:QY&#IG $_ ˑQ9kaaGy@ǿ)ʆKOա/.;_|'#YSNR]pTkV&]#eGCHNOse*֬`]A%)k']ayL 1 tYҟ鷜hu$wYOW^ye@3t֭Sz*EECd܁MZ#R8Hdo%4[2s\wVfs*ھqL[\g ae_(I$l;mp OPTGO}5}&a2?>b:`\y$fN,;L{&J>N#M4$T:4Y2np<mE }>Xd ?X8+wRg\lNBf8mde˶J籜c/*6{ ԓy#`t=wJ%%J)yOy] NNme_sr6 Гj+yj:hgOOP1qc_ V)ʑ0~kooW?W\qeJ]%%2$n_,shgv9|" \@ oŢSg@sJ. 4yo%U"m d)Soebd+=,qx]ǽoa=T-X0}Ażξa5pA1Kvafb>/ Ȅ(|phpd;bPء@}ʔ);RO*I6ZWܩX-{%<)iɷ̽jQ@c9F11 6S>>'~hyI@`JvOi5HؗUa/os8L ՙdJ׫_L#6K(n |xuݘv|b1߻pnBP:yվtMRX>&)?z7qpp+>Yy}x$`b@m6 @(J9I,,([Id 1~! sYr֫0-@b%x-DI供nE׭Olj;PaK& yY8W4VQgkoj @{`qp-nԟ(rNT ~J-KF҃NO>%L)e_Z'ec=%19S $[0}НsbbmxA-@hVzaƀV0b3D" SVJ;aCڴiV]|qʗ_ '~ A0^9$w0|aǍeZ67#o~&`x|ٓII]`ނ20kVgEew$09p⤥tw WdI{Wgik5u7'KE0W===3P" Pw"hXYQN ,b7p3d@Bq5u3i#)=kv1tz9_٩oazS #"a;{cuPWgv9 ӮB5i=OE*|7|)P(~J/w?c=݆![k|]]tQf'.TW^Wjժ81Ψf@X@1kĞK-wCV  _'Ѣ}jFaU.# +W:TpOK@ y :+>߲QW:#|7\/ZUXkP ~_7n%c~ }~w_[ך>{q?2-^e#ԋBS&e2g|bZ C^>ēNRӧO?Yo7/nA" CB  67g+"Mkkv^vKg(0mVy/ҲSBs{PvxH(FA~i)q+ XT43">O81P/pu?QwyGb Lmnu9q8d&, ZF W1$SN2Q[z$_c}˝z3÷=@6H-MZ @uZo FB+g9dM|2uoK8 f4ʮrIXn0LHB5[-ʬ[:x{0e7wy,ty],zI]Y.+F H; 2(D2 *Z E`vnW0( ׃ [J,8yMu_y~?V90bO /k=6*)=˻X'Yuw7UW,Pm _@xŰdp܍[q߻%&9H d!W) @ IvcX^&l \,;L<., Bd%.SI nٯbL|l`ʝ\g"䟶+1z@qQ]wޮ _qʗ^Jz` \XWDŽ޳U$%a&Ն̀m)L`ͻ!PqhݻcDZ;OB eB9;V?.8gC^72һ]tP8)o 8J#JqhI& TSswұ `dk2n t-@_Sd0Y0ذj۲G;<̫9\Ce#:BPҲbx_i TVV&}vqqqR+0N@_UcoEt EjweهbЙt` re:$02,z0+u3I b0iZ,@ H{ߟ9 ykT ~Jl~'hzrv0bh7y!㘵~nsdw&޻|\;a0}8]έrD+f)4v9.4j"(nIXp"#z/)e~+dJcrP 6vL3 odq2^oll Tw8ܳpߧ3eXNK*X(Y{&Nٲ,SedkJ-r -Z6HfLvk+X EUҸ3Ec6fi8DU@=%㾸_Y>hѥE>L$Bpi{g Cc(F F>j$ķlUk\'׽[$/HbLA=[ţn=g3pagu8$C a*Z47o~VЗZ?ʦƶ탵?m%r J^U&a e෺z!+H }n- @3aWhy mMexp& 0]f_JY:@y{fӇ#zD@ ^+ n/#k=l\0-{Gq?I m>'"]8 ϗK'_'f} t.anaA h5s۠[<>?dTR(䝭c}>f${fĥ#1K=9>9'Ezt϶r},"E#/ Ƚ+hO",l0Ab2xI:^tjĖ*hɏOKkH5YBnK\%|A鉧7WvN(Ցq/%gBS_x->GJtH?|3='3>eQ^(/} |{&u2m[_zu0U(Yq於3@צdTVWW<mf@a_ r~eaKz+3z:r ]t6e[Ӫ eh-[O;v|qf/86jhcbLƻVW0<J[Ъ%g4 LX&nK!_O<zq3hGݚyA8f콮H,z:u-|svhͳG-4hgo\r֋z/k>7P0ҹcNtk"茛uW\r[@ ؎2?mC¶]lMMd â-*9%zF1(g# ˑX2w3Lw,yɘ0bxB!$E0r)ҒK,8e' `_;:hҊ&MhxwW 4<~ުfa3|1IDAT8Rhyed(OJ1XGހ_S݀%5ӱmΝ]gz/qUCMj;H[N-*4 \sǸu&:p8Dr,^: [,,LY 3ŴS0EKXVKl٘dv 9:@ԬPL@#8B̤JhI1}W;GNbmu S82·;|>nv~q׌e;m[垔0zJʭ9\EƳ>ٰNZ8ƃ|$KbAЫL*һaC~ƂpTA##<`"Oqrf0X\)47AN%֮ {@!Pw EǹqwnIDfMcew;Y+m@NC'KFb`)reӁi|ZF:Mr+]ru$XX\)A2j/%l4*6Ank;׫ ??)e1m@xNx6?Ug#sV,-3lʜ'͜ w=w-Fl%VfOܟYX;(蔯{[|KyQ`we/?Kk)d^YQoze ƞinQ&tvݯZqE98lR:| !Kb>_u9n[v&(uȻ~%' ,7?hjoߞ25[N*%  b s`+ВyLUUq{ӗEfV pܪ&~?e,/u/q-SpԹT:U]>6]!f. ~AfkYS*F~Zۧ%槴 &CS$h+Dd~d]7ϵ͓\K(Dsb>\g(F :I m2f܇jצ1 \G_=Z}R¬(r}So$FX!VXY1J8YڥxB4 $9({Rf4ءэE|0xtʧM4:"&'-Y1?[vIq|U {L2?׻uhԎWz|-)Ih My+Lx7"I >>S߁I7"謏kl97W4SDU] EH"0mzY3;)QJpcv=}ﵭKE²]V /&<j?ߓܩ2ڗΡ5,Ad-\=r{-~?5pՎMObj`YE{ # lk)/Ot,󋸦P cWqt췳9uV--+Jm=3'2C*uֆHBzq, SG?ljZ_fwIfd%K#/!9A> 엇YVi{Yt^.:7aS\}{M`QtO 8yv+ \ Xt00uuC( plA{ sE={9|ZT^^:&b͏! MZ2$:hCd7,*aȝ1.<$egK.XJaSլʸѾ4Ƙ؏(m`{+ z 7ӽVMԵ0_1Ka(vi״j/~ۄxoclqmwsVeL͑_(/mY}\roXW{cK$vt}{v%ҿN'Vaȗq,UL'7Ծ^ZbF+s?)b~ 1"7rcvּүNUU`,7p<Ϣ:~OE] Zv: oC$Lx ބ homW=cäL y-8haM4[_V6-@jBAl܃ ]x$$oBGyaY'tV致{?y$f6$}WImmtv?1Y4hDcUkZ^B+*krLH&Ѻuʮ_OO-]t@x4~ JP dk02vFgYK:\@ J46FÔ!KoU['sJ5 S?wK"cp 4ʍwV[g_ǜ  ~u>>VEǼf-&yē_F؏}wяc*m^R0Ux< d@):paX)K+WEi7Gּ߸%cc??a_8!Y>hGFec'C,>.Z64 ﮿F%߁_7j& /0\th{qx!=/>_oO]b_G~9}P|g[ZܿBA("Q6%goA|x>]1~A rmpcS!qNMv 5j[$:N:j0}wS\txoCAI OH Fڶ4A!,~,af̕X֨0bSSϿ/\vv7X(dR5F8'drᇤ>1c*@ k\Ћ޴ox f8uHX+v*VҳpT0&+X,2ًkN}E"-lb"YNlknܾzC/ѝBKc?2]}<{C*}.Wz_z-PfX NwSFr|.I(ЕՃ-!ѻ/>$:z|f4I =;o:eo76ulʋ@0?]v<fצc0s֔gYq,kvƜ>ز-5$^)籠F8?ւJ4(#1g8ӬėwX*.:j)b?O`n<{[^Rd|>" cϠ[tΚ_HbԬp?"RTN޺#B0  9/|jEOlr̙{&9ݯQ.3!5 AH xj\TcuW!דu"                                                                                                                                                                                                                                                                                                                                                                                                            76ʊ*TIENDB`ic12PNG  IHDR@@iq AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$xIDATxZyt{兼 aNEA @! ڣH=bնZVO]TjP H@+!e $~/l7'lw͝;R)@ )RH!B @ GZ*(O;NofBff4!M5JO{/ |^b3%WPaLAFB}bgݫOu$ pX<* \+Lv1 b(hrs!H̯~]m k=U-/X`$Jέ.L b)uSb1fPue,}X";bMSs1}NrҁH4288K"$s|pO]wun5cCtF| IHh/?hK͝xUvѫd8W#aʲq^]QQ0@Nl Z݀{5&{>DC*{I>pE15)\C´Y5źр 0JJ'|E,?;hS%6Hh7& *PbnNMնkIuXZ O5, YV7po r,7;:gy@cؙ0Sv?Tƪ6{* 4äEs B;%CpImwM  5yǡgV{R&BgѦGUo- Kt:V qFߚ5[&l'qm pv̕|T%k$V[ %%L,SJ~WC_ǕK!øDquh.NCPDsk8+W`eɄ;m7kxZMr2t{Q\4t>lW.ڜa.mPs hg ,C5|?K[gT,9 )ad#jW%R/ru14x$MYᶸlbh dڲDkm?("3>})"-+B`ʛ)~"MB o~8Á4@>h+ ~tۺ[c< ҍ Ӓ@Z` w</(fu-.wgV:c:]f?eizL!Ȓ ; @!`gQ RЮ̱q\ѲX}o#(?ֱ l|:ʰڬTζu5Q\0pF*dO嬯*;fP9%oBq96e ='sOvwEvg{vg~e{{.IņY +H?aoD]o-L1 56v(p0^X;Qvdfb@9 can˂[2 *߶7|fB,G}<.6ʣ![Lۄ`$@Iup%bEIS;MHs7~ny)Gbp8!Q hN$sD6r5s|ݏ@n4(vZ:f;-?૳`0}x^l1[z9&(BrF[4\ic")I]n֠,2Vq>Z6yk-+*Mnh ck(r&Z7=o%yt c,|њ@ӴXgf PLT ']$sxt8Mvqiyp$-r,R!ٺ eqFF6E*P@`Gbp,3X3nwl+[ك͟b8%Cy'$"#BMQ :WG%U3 dž 5L]x:'>.W:>Kq $E]é'Zkl] ɭpGNYAM!*Mdžr5ܲ[HB+`b,m8dxK  45%z X*3+47i!c毓eucQJ\_:qGү7'w3^na AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  IDATx] `U՞$dc " _a PZWj[mj\kVmKP $E@šlowŗ-`ǻw̙3gΜsfyYE, X(`QE, X(`QE, X(`QE, X(`QE, X(`QE, X(`Qk-SScJ%Ŧ){4C0d+gړ1qɸB퓌y9g5LUR索B s%?^z)Ңud&z6>I9Z,-q`*H@^D^Dyt<>G{;{Gi_%H^GgY&&c0ĩC= 6 Q߆ob߇{`rW[<] K B˄݃$f$Ql`;U|R@lӘ*2/ბmy.y'*[J 1zM\ʁt$F4M> —]g`;I"D+T 8kA ?hdϥK tb(>o",1,0ڛL|"^ۜf/v<#b94Af9+بQx!&) |~+|0yHA`M Ib+HQÔpM4)T~Q'zݿznLZ3rg!'S5Okz8>"s Іϥ5,+c8@K3*sE· d ''V"^oBXK+I;) b1a\ 4#9.p[iK(u.US'mo=cPgxk6 6aynʉE-Ѽ`#{6uj-;@'/UucUFZԴ'bǭH`gRԭ VOa(Lkr|jn4/Ng 56O0DgG+ k 703=-W~ͮ`oS7ˈŐ(ROSWS¬#^tU]b\rpFp.`|2pF]0ĕ/GJL6!SLp Yi$,Y D@*IJM$ Cw(WBIclx8mmN_9y羀 yGRlIn:ۅǖxVdk3]}1W+UGUx΋VTβͯZ"Yf #] ILyꤼI;4I6zg_ jݵi(K@bZS}sV 1v(oR^-b dks'QꭹᏋ@uk;E2iŴMQ۰?}A#`4`W;˿e@#C2@8[-cm-VFrwnR<ߨ2&Q9yA66-͋{ru"&u!h]?b!h W?6eհk}SQ%(gZ'MY1w1鱴pځtll]T9+D*3Sc0=M&V1*6fmw'JZnym·6Bmt_2 #U E>45(R 1lfSsatQ+m5u2$X-h .MԚ&ֻ| - y&kFJ&^vɬ47k l6_Kie0|%x|y[Eddcupzcv+b;ī.s\̉y;Z1s iɔ@.c,gH؝}1-w+}b48O^t %[3&KՏI:J_ <퀙 0Rqc?p ^El85|rް®"#UP G?7W >~_Hr&w+(87m2f,Nԗ)sxl(:P:EG>޺^MG0Ѐ'XS9ЫS>wYfq` Bi$# 5]&DSw9,ot;C΄{Ek"1kaOhRضv_qhOzÑvTD>(kru^^#zޛwfzek/鸑axqj&FS|83W4"Ybgj-u6d*7q~idUJܐ =^\(ph0["I`&ƽS7~`Pk߱9jK^’^i/aZjw;//.7.#eRQ $]i?kQK.Jڭy1f^nx$H9zۃf{\R,N ^<nLlb}ѩTlf.~]N֖cWjfXrNU89n' ޸"6kh33 o0-TゆPJ#SF܈Fsy'oVdn^kR<KidFB@&ϟ^l]~ɋTu-FѐGJ)F4\@cs&nYA\kkk+aT֒QC8fƴ!PH8Lo̝sn߁Kll4V%OBnU-T,т8Ԧ1zB]0Z)&iHxo~.1j J@vkZi\! C4LX1i.HH/Yn~oaD aqF @RNҁ%.rf{Pc~38R_~9px?_\+|5mMBhULCFgZ2|cP|*bJĦ(HnA8Aߏ(%''L=~Qu(L:|dcRF"QVva9nPlD@LsRQU n]ePz?T罸P0Hu 1bT]y65%GwLNXm B%#t_R[cCa0W 8\ )deL_% +v ]?zDFdgWo heErb\8E#1,a=!*E C\nʓďy;'Хٚ`wn8;%&`?;8B8;&&. nS[XN)tx.[JcKQxJi'Tg4\ iHMOMD]_.fp&dDrRro$Bb&%K#r3C M>`@+'mĦO=p0SSt(PK Mkq7 x Wa*KŤ*Iq(]dB@T'P712\ tf~ѥ=)HPHJJ >;\c(rjS[[˼ذ.P>Q΍`׭B[ߔ~\|ivYװ߿1rd#RE駞Tx' rfRRՍ4yq$[Ws]qQAmv8 `Poâ,q Y (@ȅ C@#;997:ӧ$'wd|{=)|X }7!5mk8mC5@R('+xy&[gǛg#UYyk ]@Jq$޳McNΝltvl]w2(̞3]s͵`AySǓs08IA r*oxߣn!p8Eִ֮@{5к؅6@ju#@~={؅ lѢخ]u6v;KMMeP`=CjޕC$-N%ZTb4 Z*&Zt?kiAy2eP7chF_ګ9gs3[a=СNz/oo*@iqso > R,xm}dxE!?> ]SJ} %ƽOw5l۶p ~lРAzdwH [p0 d9t_ XsM ج " Nc{\k/諝 p0w81{+Ilԩ$ CLW/~Z`EEEceeeϐ;zS\PgeSx~+'o-1Wc8g*iNTUKf $B֕G{-XPgعs1m*ۺu )H0Z}yh{KLt?.3+qbfgpAlÕm6N!C1ZoD.! ˁMͪ[k8q[0o.ۿ.P0S.g[ÛN4 ecJ:9\cl,ljj7ۻ~\nM wױBs`j:\Y+2Pb? 5G `pgdن:{v$]Gz@c9Ja##T]i///gǂx8#]rŮFKtdÂC`- - 75_oQJl{ T$ͣ@'\*d6K lnݺAfN<~Ӱ+puYl0Ul0uu;a(wK]euC" 40Wՠ-u,/w–Ͼ t@0au`[cl}j66M*Meej/[fo("TBr5!TW}r Qo]АZg; '7T? 8_u ?w\%FG/H__ G@ZBY cw}5u~!;̽+@r!3HDg pe&&D=}M?t?   (Kop|T:ueMBg 42Lr" eGuS k(7eH $.~~eC8455b#U/H~#nӸ(mR ʰ) kj=l`}ّ(T69sH@XrreD@:F=݈6һkjnKwr2mAɱ0zK ?l܆.\N( Z[ñxЌåɤ|hЏRgaSun T)0L~Gz#c-vY=nxǒBf'MZ$.F:ZI&ߢ{J72y лI"ԍ:(]hrkb| 剉 .2+ 0U-,F93i)_R[c+Y?K>f*I>H;ioR|K*,YAS$~= ;ȣ({7t]c/hv;(P=***vh"#@آw_)>5}/\baBUz%f+ao"G=!*'n\ lz Zr~׏\b%6_~~3@o*s^T=TϐE8~DŽ+."d1"U~1"dTm`ߖ%3x4 (1p_2g - WGF;-aμmQM!n!pʱcM5QHR .,cBN$w) jQS\ .\=nufߤ@|mG v;5}W pȥj?Dj]l3gwɒ9M#wG#oᲨZUm~B)/BިΝc/4IlN!.\PZRRsPd0}.;wvl-30} {K`QE, X(`QE, X(`QE, X(`QE, X(`QE, X(`QE, X(`QPC[VcIENDB`il32 @9IJKKIFJNNMKKLLJJEHJJHI JKIILJKKMQJILIJC@A@9JJKILJ>??@?>?@@HJJIIJ@>?>=>>?AA?@GJILI>=3@=?@A>@ILKH@?@@>GIKI3 @?B=ILIU^h=@>FINI'}X I=>CJOI,>=<INHI E^?>HIF'>=HJ @=MHUIM !  ! " "ƿ  Ŀ  '¼ſ  ɾý  NJOM9ż  LMLNNLMMJ  PLMMLMLMOPMNļ  LMMKMNOL@¼ PMOOM! MMPLż]fLOKFɻ &|WILLN̽  * LLKɺ   C\LM3  ! % KL   KI̻ '3"%&%%$#'#$'%$"@&%$"9;:9:97"%%$$%%$9:==<;:;;99;'$%$%$'8::9 :;99<::"$&$.<36:9;95%%$&$9::9<9$%$%$ :9:9#%$&8:9;9%%$%$ :;;9$%%  9::93!$%$  9<9+'$# [e 8=9$%$ ${V :>:$%$  ( 9=8$%$%#B[ 99.3$%.$%%$$&# # 98#%%$$%#%$$%%# 39+#%$'&+ $33"l8mk0f{ubBUj& Wɫt*4r: @̴,% "Oh07( Z i[ی5-(ݺ$DL%? G+K^h/Z$P!;#XT 1urTpNBme JNh;ُR:Kv A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$IDATX V[lE>gF zWH mlT(&*OjLHL$D,b (ڔ˥ r3mSk[tn)ef+ 彌R$ZP8Π4ZjyV_W2 C ^#$(&gIGGGS|MN?ruX'h@i= @d-dz$徤+{ @QcQtRQ>Ȑv.I!ݧK/qK^$ &2A}G) 6TH7rL@dP!ɹӟK18aA\'[-(B ߝ:bN<'+S^ZQϢYq@9`6-SojwҲ8\}^Ec ]ʹ}G#H@\~iw]%Ȥn7]*5R-CB+@d+]rWaAhJVq좀Sri)sDȟf{Si!! +53%v\FtfP-Qi%v.eC9K\ ߨ;vf)%?ψZJ|L1XV}lء"(oNH$mJͷS.pS+ANIgCfΏj)/!ZFMAXr"Z]&)Y44@__}cȕN=iר4Joc*PTc@#^ς@4={@뀾XO}#* Hkkk.ZzD+ {ShG* '8M_ͽgW~_W1} Rq \_]ZAS[a~#M^X_~Qݳ~BgیN/!DdkCSALpƦP lݝꠌ5OW1L`dp8fL-%0R?}rAGiZwu@+xf`ge_Ie~"IENDB`is32² @IJL IJJILI5iIEDEJKJ4C>A?@;KMHC<@>>HI:#@>LHc=E>KI* J$&$$:1uJ4;:;!$$%%2;9#%%$'G69$%$%% 7)8@%%$# `:(9$&%%&$ &ε,<$ %# :$#s8mk Xo. BS9L>*:i0-0'/RJR>6!.xJ~F:] OHFD,걁tvQ*,ic14ePNG  IHDRx AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx`Žgf$Yݖ%nnAJx)x KRI /tlJp` 8S$ْnw.ݽYw{o~0F D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@ D"@h޺䔚Ř8ZXfiy̎f1St0 8ϲm˹Je(2$Q3猧32@ Uq8R#҇W #5HQ-?!:%?a᳁HuD)vTF-LYeDӪw=W"@Yp0tt ZsHt]wA?.;ocO+2 ė/өs'SwE݉Ο.q0ɠ0ԽjqyWsB=8 ި\oڤ:HQ ϖ->>0 c$ҝKe/(3^+te2al.󺎽Swޣms;nxw('k>VfU20l0vVg`|;|'7;rvF_: !)DTQBW_$:="F, mryt׮뗟@D) V#*06&(DJlX悝;E"@|BTd*c-ҏr7JA\:׏uGtufrwmZhPb(;6CCKF>.(/D$)Nwm%t:HT4Y񐏞o:VRmYrc5hP  Iwn6NWt"fvHSl;et2э yр(?;jw{3Y'ٟ }  :=a&SڜQy֏crCʄ  H)D4p`pgnތðNOs੟;'( ,ZoHlt/ qPL񲤪+X?ɏ ZHp{ |&pӀ,!q1ُ@t1 1j+)Fڦ e+Zb.Z!ߪ}UӦ""@Mv# N@ WQ#$ j~tD:~(uB:C@?h7oPʡ/3fnswʕ:kEEP>lsu@O@;(fKݚj;v/ij (o"U"\cŘ.A4?Kώk$!'ZI&_bC[:!RbH_̸%#B~ P'["KAl}$@ =R|_TjsFt2I,8S79'sY0U0Pa,*:/!M$)8)g23DQe^}L!e މFqf + a`We.%?~4=kC - @ @ Q"z ]e0MP;&m^1b=w߀T/<^鸳mhKF(')*-dQ@٧_%'+ V^6Qw UC1xH\8г_a8J8$Mp~ ʀHX#qF(/ ${|PD* Rb2!gPS\q%7gbҺ?@HSgۙe@2pX1Nr9mvcʘx)$c##[7bR`| $^]@x+f|ZcFOIb3b\ ."@Gӯa.ԋ^*عKCw$!@ @r];8qLg C؆zYU3-:hwb  nDQ=\ 6(綾 H/1K^|`ekܹ!C)~M* ,*frcS68/֣SZJjSAT@XAc ,"|V;wI4tG"ć+JE@AA&K˞ ݜLpRڅM7"JL͵L]hStpR\T$ 8&dbP:@q9zA(5UW-x8ߚ'q!@ @\RD * Gsr @&)gܒU@oTŔ+bnݛwzJCBAZH@Q%Xeg-dd}4t|Z%bgmH)"4N@J} F1%'LUA'?huBnN7!m$@ @eD-bZL k- LN|2=CR؃y[Ak%G"+8;RΆ!">ʁ阣Z#9iJXH]?DLɄ@o F8-X0;ap7_8ЇU/Dtz'#U@6M )a! mL6z"8M0a@7:)DG~}X1ЭZ*j# @ $ZRlSS} `!Hnퟦͯr>۷&W2{*  jʚ͆ 1JY4-6Ѡ*-eɇlT)Cj*(#qqq(bG -L~b,h)Ճl>r,ǖ5ɗ$3R\T6" _g`!~ X J?AoxI>WnOI1XSq`zE}?+1:si$n#8m5O6~iG'ُHcR@+ ~NP@~ET4Б|z=5VlW~_/~$Ā@EL1q!Yb4FY4[%m;7#0D}Hh?<4ր YQaQ,uzN voґ^$@ k2fbhAAƉ !2)0TACr9v_e+QK(\mpDkQ^n+JV<#kmux%6E|h{j? ivv߳=$^!@ Wj19W(ɉZݤ❙;̸\N‹uz70cA*?؝8-ƿFh,( +|_JҶAW8tդ, lY'h?whsO#Ŵeڼ=ґ$^ @ ji[]ˈ#LG uPBg}0xЏk.?^o(>Q'qZiM䤏x@?}gXdws5LJ\C;VPlGȚsgAõ>؏t(elOJE`=q+ئEJ^+13RsG8jBN!t5c:y7ё'| J+اQWa"SZ监=%[mCnye܆\+t^4b 3@7A:AnZ@`܌ g!If$vU@sS a\|O'El0mw_'vZAkO/m@9a=a|~ Ac_KH<ճga3A}P‰W =Å}޶mMR Nm/嗟)Lpl!FZ,_gJZ':kv:P6H0|gwo4($PQg&F)4%HK|iʥdc_E)R) ɼz#g)^ Gu>LPhZc%8Kj']JkX፼ý>;k.42V_碀apZ%+G[` P<<t-/)'?  N .{"~Wb{iA:~*j@O:NB6eJ+exk餵zʀ8(.) ޭPH6fi[op囟jcVt Jܲ↘F;zߏ@7f1 ^,E\e&SkL] CdrdP (̕=۷Q֔ `d^ kF b1^O~ 1 lG!u@*C{J|ԒֿƜ鲳ٯ3*,t_c `_\ʯJd)ˆ'9&?G;9}g |;2KcNNRyQSx,]8ͭ1afX٫oy,'WRpL*)ʗ]j))Io0Oz7J)Fzvڬ(}r|b@ǒJi,\Mz1<sתVfk>d p_Z@e%iGOJ(Hh!E!,(?ݸdFtg2G@sڊEM|-wJ 6 ~<0}>7O1)z=T_ss)V/.)4s{uʚ`?mNh湯Kʀ>~*+7 B @+\R)Q hyv$ѧH8Kz3a|hx#t-ug1cCDV{fǯ&_6tEBm!$ܶ=wmAhn:NFjx%p_MУB "# YÕӢk ŏe+ OB=, _$0=/o]N)IX $ˆ]9o5bF'I@@Op.^¼_.}GBzF/zJk{^8@V #@ PO\2aȯDy/,šn"Qa.Bj UI{ЗCswSZRΧj-=wP50sLx?y{ 8Y'2xŢ7$K/wbJt砧,zGr jd)Lzu@oAZMKB2D[y%_MxVbٯ4\l$t1 rw;KXniIH9䵒t+E& ]doMY8"<ÿ^\~{CHр>/aGw;KL@J)_0~q:^E%O}./yz^73d 8;'7|c@:ƭl^HH QۙѕDYAMqTm%{pɄ,Ԝ__pH.9; XlXsÖqo=rh$F^px V%QZ ]fK\*3h餍s='p)r)ih%WGn۷owx$J+Z(}eh)C24ߊVAIcK2vnĕϰ[GV̧ܾQ(,>1X"HNAޏJ[i Qs"R(]TbL~0XHoCH6 ^֒qlvC}\n*exWĦwx$itEsE}M]Nw W*{u.o})*^-kQDZɱ u~'C}\b=Գae"zРH6*8a7$O )=`;qɰͣ?5gJ< (C,.]:|bJ@;ھIS8=m҅g؏4 +q.v C 's ^dȽqgcp>9g(VP@ |~oߜށrk+O&-1,Ba}Zt 8KR8>%woz<]*"lN3)=$mz&B/*~[/dW&-:IO6zkEK>6OI(5SV(RWs쎁lvCZlh xs`- ɐt# |lI)IT`pw3(H*WvL_8m\Pڐ?LYz;Xzi)\Jqˀ>Z. :ܚ%_AI(EpPKb=thˤb7I@2n0U*N@x_Sx]~d?zVFz㙍shz7z:RQhz]LN骿i8rvN48O2=]: T# --m]2L]024>&!}Kut8;u gQt5y}Dp~XI6s=ʕ]ńQ%+pmb_7!"C3CF2""]P6BFaQM90}Ȁd@ˇy6w{Lz~9J ZQaj_lF_Y6~{.Y w3`Rg# 샥߱+\\;,vC6czN'欥F戱;xt<һh:\.$m|W CzmX$:2"A 蚖V҃;`ݡ*Г=Dsk\G' ŠԽTPDoIy岉>ԱrWs;f!.㚨j-wl{>QMAˆH3k_wɆTu0 m\mojꭶ%Y}62Ncᘸev\(ρj@_ x6R "KjnL u1T-/ő¾$ ,HPBP60Rv۽6gD@K~q[1*՝cfo݉E{76[Ѐ>D+,YϢ殚tO|jDʨ  Ul`.Aaw(j I?i9G/p"MKM\ 2RƃE~9oT@,&./Q޹9T`ҡ3ϳӛp ceAadUBYI4 ^9<F{my[2F@]ʃ1p1; Q?PZxkJG\aW/po庬,* @g\: Iea%?41%wGrKG$Mt*`.|7q#|R@(5@aT|IWՕsgm<>"0sLX׭Y8t)Wr,7P.&JXDnGđ@%~H9լ_N p%8N}8eSiuJ:3jѡfN9LmP'.(1a7BXc f!Fqpg<1WxfP7z(z ߮nu4w\Wz?eEQ?qq'Mx.6Rss|viFu(Y33ȿ~o \kYj*Mv (/hCTތǤLt2,.m!3;*x.2.bի{:4 T[mM8] } z*2MY!,.Cs^a Xm^<ȯWrnvI柂5_óQoН0jƛp U('jw;E[ʀL3F [͂5g|!&m!kc`QQuUu6wqqq(/0cM 1,ns߽Y IP}'A`Qݸi@™A!Q:s25L @;ѥ'P4d d8 >YN芶KoZ,FlLg ЖFk%@tܱ[Ґ bK @fP_ѭNxԲ&[匥\s]iXM|^cB=S@Hh3:0V& ZYPI٦4^v'4SC}nF'hi` S,ze+_ė@/$ MXw<Tq$}0DH\RCH ڇ\V8AF [*}E$~ V>(ϔ.d!UF@t@;rW ?W6~S񺍛oOM,m!#JL7?[ (] L.<oY,!4' ~W,.]a_c̼xaH论i4)d㯴5TTuyrԢ{NJJqKVZwQQgE3JW0Gӎ-{D)$3ݥ_|Gq*jc:AлrbebNRruoN;jsLhE~~R(1%֟tIX ^9zh:bC@+Up<%p|;67C}L, Y[M-S'U٪S01))X~(r.Q,L4-ZK]SCE 0<|b~ܐV7߉Gh}^ez;iy:mj,do襁FSl4EN"*ߎI=x3xHS ?0n?6fpAրS3 QبE{)80Xy< ^e JMXemөS[RR}WK. gک-5O5UvX.85rƻ7Fswzf8=rwDRĄ@΁ꝀU3.{tZp4Zb޵Nz 6ΎtoZ~Ym;WY᪗,$i h|&j? Վ0#(@S'P|u0e?=JէVŶppĢ+-o\Uѻ}AfQ_-Rwpz߫1# @cT _ pj{ +tV0B kfٰ[ew ,.]}u*K~quL/quwOyu]ԝo߇H2/&AުH};w fTICOT-liӔeh6mAfK`k%f+.\RjV乪kV`4N%*&NPerQL~c &Ȱ|\/s/:ZF `Vʖ]To~df5'qvSK*S0Uj@O~u}\G\ yn:' ջ<"GMp+@aL`7 @R7I@+w9Ģ;m2q |Id*)k\o,DGV̈ p2ͧn #Ȗ`If_uxz-`KSOv72=[ aDBfdV4GLL%d@rY:^%*is4m'pjLeWGUd5a4=4m8lD{AMStVRH;j/fOө^~߀?w ACAӎO5a |A @k*y6 !egKD'MP]Ѯ Δ:Jڜ{T y>'VlFNNlrn#l |SDqA\n*k\Vm m^̹,\Arot>0g=pF Oh8SJݟʆGwZՀIDj;⅐2~$w%-/'T &-z0lP (\t4N~ ۶#Sy,j߬(41K)]=V7m4֯ߝԻMk9cFG^$Pq5=@sŹHz НνcǾ7m>V+]W?Z9PQgp-K!ɿ#yC;uj-ˇ,L7G΁gw^k&Sy~1dØ Bҟ~Z">}wl&AJ%%s2Lv># }!k;3Ǐ_+P `F,m-S oAYכ"X~$i-]: L0Eo !|@*!Րֿx*oyNj!E|< )C0og-JcUv|[1>#P9tǨNnDJ~@+z*AQ8S+%+sTee_aj =#BRz+`r)}OiӹZÿ*sE$Z==-%0jX08D|qau~u~ԧ6z@@!f ^&z%*otW@'̐1➊>9TG-)/NT `` NHwli "DP|X8׏}~mFR-zS?e'GyXXUr%Ć+nS>-cbd 8ZPQY |Ok^Us srµj< 2\]K zKbA^;Q=_OXzywT%Qz#Cȗ^"HJ'+@|hurGo*z`Y Jm(Z Q[~D2| F1RD,̈́Z?ɼVAcL(1꩕/߰[i)ˇ<ƷH W}\}Ҋ\dFV?лwW.!pL'NO` Y]voP>\ 7_( nC:z\jyp/VZ+ Ҍ 6.PJ燎햿x_6s_^^ *\I`*Vºok_'W*#&<]06gBǂUjd{mSNEè'm?)CU|AߑLz@vǝ+{`z#:O@wz*`2 ]-q:~7:dE/ꢛRIK}%F9LܸxܺgR 8Я_aa$}lن=`۶ZZW(%W=[FO+ӥ{~Ş:jPݍYp!!;ŷLD䪃[#6޽ٜ/\0^A{V/G] bKgq6ח+A&>婢Qӟat[ʒ'9S / )OO-SFOGLC/v: r2&ūolyg"^lb&H0bƣYWL+6D~xwߣ-bkM@rfe?HIع,fטɈx(1 nhw^.W!` B@{|S?<{`W?; _eWIˤ;!k;,~AWGO}곧v7+Ƭeu2x|txP7q0Um,ؕ5Zm1WO}|xF$t`/̜;D[r`cgTDq!NEnägi<+7c\3M#7 r+mC蹦T5MDX)i=Hˠ}D0%`l(9!wvC +۟rp# ~r޼ˈ0͗R 1P3$&Oci3wp:@{81q!#===y%ٳ }+,'= J]0I6lʃc~q{өeW7ULæag?#d<[d+# ҧn r"F)ձS˧|m`]c~Av?8%R@ ^/z^`jareAbI@o#4^1{bw"Z2M_©7IƐ}NȜK9Q1|z:R@])=ze mVܘ7-ìdw9'Xg!%FM{. LՏSji 0Pg >pND [DgcyOֻ6ӟFqy6;?*x\%sT2$3=v#p2s՘eca/ q,XCEZ| %/j|-נSLf) O [$|,A8nR~J[0?*2IҔb`egD3._ˤx/(:@OY聒/KmԪk0:u<}O\2daWH8˵J5~66ҙxW<$yV6J?&9ʗ|05:o}+nR=LK)ǬTig"`B'֛oFe e7U۟E S,]aq!@ ۛvj-i]tSy /KzҥC-Ҍ>` _2~=Fo0+x#VMX '3dI֭?sqVq똖,=ףr.!l7#{ظ=NvqS`"CgF27H̶ïGl{Ɔ-f9'TWY .0%_j:h,={bYN _W7`ӎ{C l6[:DŽvޫmk7hyn ;g\ c}@hRdvʂ@s2x)bܴ`YGV/4>O G!ɖ &e6go -68G"P U ]ۀ&Iuq+@<烈46|餵ŗ&ZLԽ>'FdQ;u؍; ^,i6mE-$X +/*\4wc5!bƜm<׭>u#*ƭZr?Pˇ* na%a} ^B]4'nC!9Z}C²ͮ\Xn0pcĬHÈV7#cQ :4bY:H4?t!ҡXaɅKoKfBٳU=#-0WW"c^xX5hS/D1X6;ܻwƾO91~ش}a~+;Tj-/[9ﬞT̓ j.^|d7άOύCkOV[`V5^|@lE}ׯA)~%2Сut@OA#i\tVc'5YMJF_X֏-?~thgt.`-utT8Jl#Y|Fq#@n0͢/+^&'Kx_UTk@@=n){l[tSE~lՂMYV.UoMJ6CMb p &1$ :cz7̔F^g Ր_Ukz 6(Duplk( dYpXeErY:g*0w5 BYL~s:G/s0R&LjߢMԎ[JE/=TnI*mM`.ڥx}u_v~JX#9z>^߈GL@̓-+YfӒԔ&U &aV{hj/e7YjeGs~^)GWE^Wǭ-#t, {PC M{Wbsv.<"Lߒ@P &D?gƭ-I4xZ` c2<~H& <^G|(2PU2?Ԅʠz-Yғ,y7FX&,.P2sN뫥ueFў=0AzKK“Ңt'W')1?ENHI`ݒYHUZ9~P/yF^HmWYlyy}'#J @[Z3]7dȴɠA @2k]Yeiw*+2J:ց -%^yK ٳ}> j*B2(.N}PN,+;;;?//0??阝~y+((c_D7k)OXFʎ>y^tz`D-{+GV]DoX`:w,q>Bn}޺z blG\&tx_ leð Q 5vp^vVl7F٭+kF+!bbR )}siF*V"`;Ej'{!s2ЭS#/e=}b *S-jfꞏ| :RQgfuvX|K)$qSg';uquLq<7;c<$ކUUUېֻ=ftұcXFytYU% <{9XȻ\"!+8ZuHo'?\ZH VC:%uI9X{̒2ؗ]Ǭ^vPMOݡG89/]J2'Y}Z}ZO&BU49l0\^u\@oh4NM) i0HH8`龰 6境1x0u @nd̵\舿CJ5;DKeCPU6[&77J L,Ϫ%Mk-=F TLB NxxqUlzUMH>=" i tM* ι,QDvs2gfC5GFf^nRa؀yz)g+ls0i8_ i`ªB 0ĨNdz'v~2'D-BoB[o5i,;''\1{sz^ Εw]; G]w2v1t%q9K9W ffV`rgǙBbuB"::5bOF$68hkWRXm _K_FX<*D ~F/ esD#5/"f61dLNӣoUvz%)--zDdIrw=fDro,t~Β`mKޔh#[^$YݛyK77_W*/{7!m~\LEz˸t-'"'^`j\J*OEBJ+s83|zI fL\)99&J᜘r.f/梮_xv6(Xa>bYnffR{iFŬp ;4_'K -,I*@AX9zSv"f9a ٓcc2;x<JiCP'> 1RqT- g5Y4\OP(gt&)F /c1jrZs 5pxvFg𔛣Ξv<%[uDE(%\?ڎb2<t8qS*SkAA@/ D`O1=\ff^Q,;KznŰnoܽ4wTCܾp+[ʏTeU>L4D t)hHv{OqAu2/|>个캿cK'1UZ5NaA@kJ8hV\̈%$ RΒ@K 'UB'QX]4Ywm;%l.Juiq[A\0zwUf#R`"?.uu,4 /=0Q^gHg~3nŔO|@ƮʲG$Vy-؝nSW6]o|+(@u $eh%InRݻgS%EX3:?hrS,AX\΍Kf(YUh\Aɮ?!ۮ,$;\YfgvW%wXpumx`0~VF!k_aܧ]p,=&U-'V)؂YP<. ['YX'a @1+kܰ Sm'?G{vҭ0XO!Hp+NJÍRTز/xt$kf۟Ete h%uC>)r~ ~&Џ H'<|}+3Lm0v t׵)(Y,p=|9a!<) :HsvGLgP߂M`,ƩMsgEDGbH4}+, 6sNz)-a4{}BN#OyMI@XcYgUx $~=FGJ@`ُ`?_KE(`Iv+ _^cR8fcun;RĎuy~'@)j3]$+՞]Л9~#\[xݤ`ړ+>|R.[!j[)Y"UBnQQ8wk=xg cǎWBVйedt`E}MM-;\YώWUcǎ5, bX;TlTnvYGxdNqŮANj-Wo֎c7KmbKlbH,\l2[-`C)@6@{iW4aF_l=; [^_Mn %\tO>=+w~,-DiJNʢbPY__2,Uf PZv5 B>:E r?)#(%$&3R@k3@>GNuW'-V'Ό⩧Ӄ;/D_z套Gf>2]{>֊i`*tL"I`",ܰ`_D6]_P㩁"ͨFh ث1ӿѿto㮻ԩS,sd`y)X>R cTٳՠJ3%O_g3涒踱[XPkw\(}\ ( 'LJxp31UUSs x%.ߗ0Oy*.n03f` 8 U'0>kƲOO>0ǁCENCc9"ݰڃ`5AnmiDT)Xi <(bTaxS]?tsb^^]p≉Y+8`(isu dІ psy{a=]mZYnyX))7du|uZr]hޔ+&1OZTTy 3l0u 7&cǎII/u;]2w6qo&)^FLmFz٣#4b"50lci.r`S. f$pDh`?mڑ*q.F)/'?翠8sPd@AJ7u֧pvUU5'CmgQq, ܖ 0(j+5hڙyhߺn&\ ])ң =u߮hG ׯFʢɹk׮Q˗/W_555&(-)U&ORgB80O}5_V=ښp }ɊI:sԨaor}ܵV*Xswojo-h м{rV=+ʼ% xf8ij@2gc.֪7ꑇJeŀ$T1| $~oW/jɜs$ tbwRq)ꙹoB {^LHPD82˔ݘ>6찚kgEzP" }o=S0$]hߨQթRfj5 z]K}. ASc$6C9T9'DND~Kme5Uf| PXic SpukDž`~a(K%ssIR `1=YQG&O=/d*Kq(lR2fYOGٴ't}b$|`?/`'Rnj>ɖ㎎ZrIz)8&uK cC OeH~Z5cݏ|?`.{| AeG'<ȏYĖ\U,4`X <% q;cβN=_]Гy(Rۨ|5{[ ?(>M dSٔqbnbK,(6w! \ӂ s!e 4 n dJ6tLE`sT׺LI u]WG4`FUUI|v׮{2eN|Ի(~Mh1d|Xyޱr-6l%Z3gf"2*v/uC1:QY&#IG $_ ˑQ9kaaGy@ǿ)ʆKOա/.;_|'#YSNR]pTkV&]#eGCHNOse*֬`]A%)k']ayL 1 tYҟ鷜hu$wYOW^ye@3t֭Sz*EECd܁MZ#R8Hdo%4[2s\wVfs*ھqL[\g ae_(I$l;mp OPTGO}5}&a2?>b:`\y$fN,;L{&J>N#M4$T:4Y2np<mE }>Xd ?X8+wRg\lNBf8mde˶J籜c/*6{ ԓy#`t=wJ%%J)yOy] NNme_sr6 Гj+yj:hgOOP1qc_ V)ʑ0~kooW?W\qeJ]%%2$n_,shgv9|" \@ oŢSg@sJ. 4yo%U"m d)Soebd+=,qx]ǽoa=T-X0}Ażξa5pA1Kvafb>/ Ȅ(|phpd;bPء@}ʔ);RO*I6ZWܩX-{%<)iɷ̽jQ@c9F11 6S>>'~hyI@`JvOi5HؗUa/os8L ՙdJ׫_L#6K(n |xuݘv|b1߻pnBP:yվtMRX>&)?z7qpp+>Yy}x$`b@m6 @(J9I,,([Id 1~! sYr֫0-@b%x-DI供nE׭Olj;PaK& yY8W4VQgkoj @{`qp-nԟ(rNT ~J-KF҃NO>%L)e_Z'ec=%19S $[0}НsbbmxA-@hVzaƀV0b3D" SVJ;aCڴiV]|qʗ_ '~ A0^9$w0|aǍeZ67#o~&`x|ٓII]`ނ20kVgEew$09p⤥tw WdI{Wgik5u7'KE0W===3P" Pw"hXYQN ,b7p3d@Bq5u3i#)=kv1tz9_٩oazS #"a;{cuPWgv9 ӮB5i=OE*|7|)P(~J/w?c=݆![k|]]tQf'.TW^Wjժ81Ψf@X@1kĞK-wCV  _'Ѣ}jFaU.# +W:TpOK@ y :+>߲QW:#|7\/ZUXkP ~_7n%c~ }~w_[ך>{q?2-^e#ԋBS&e2g|bZ C^>ēNRӧO?Yo7/nA" CB  67g+"Mkkv^vKg(0mVy/ҲSBs{PvxH(FA~i)q+ XT43">O81P/pu?QwyGb Lmnu9q8d&, ZF W1$SN2Q[z$_c}˝z3÷=@6H-MZ @uZo FB+g9dM|2uoK8 f4ʮrIXn0LHB5[-ʬ[:x{0e7wy,ty],zI]Y.+F H; 2(D2 *Z E`vnW0( ׃ [J,8yMu_y~?V90bO /k=6*)=˻X'Yuw7UW,Pm _@xŰdp܍[q߻%&9H d!W) @ IvcX^&l \,;L<., Bd%.SI nٯbL|l`ʝ\g"䟶+1z@qQ]wޮ _qʗ^Jz` \XWDŽ޳U$%a&Ն̀m)L`ͻ!PqhݻcDZ;OB eB9;V?.8gC^72һ]tP8)o 8J#JqhI& TSswұ `dk2n t-@_Sd0Y0ذj۲G;<̫9\Ce#:BPҲbx_i TVV&}vqqqR+0N@_UcoEt EjweهbЙt` re:$02,z0+u3I b0iZ,@ H{ߟ9 ykT ~Jl~'hzrv0bh7y!㘵~nsdw&޻|\;a0}8]έrD+f)4v9.4j"(nIXp"#z/)e~+dJcrP 6vL3 odq2^oll Tw8ܳpߧ3eXNK*X(Y{&Nٲ,SedkJ-r -Z6HfLvk+X EUҸ3Ec6fi8DU@=%㾸_Y>hѥE>L$Bpi{g Cc(F F>j$ķlUk\'׽[$/HbLA=[ţn=g3pagu8$C a*Z47o~VЗZ?ʦƶ탵?m%r J^U&a e෺z!+H }n- @3aWhy mMexp& 0]f_JY:@y{fӇ#zD@ ^+ n/#k=l\0-{Gq?I m>'"]8 ϗK'_'f} t.anaA h5s۠[<>?dTR(䝭c}>f${fĥ#1K=9>9'Ezt϶r},"E#/ Ƚ+hO",l0Ab2xI:^tjĖ*hɏOKkH5YBnK\%|A鉧7WvN(Ցq/%gBS_x->GJtH?|3='3>eQ^(/} |{&u2m[_zu0U(Yq於3@צdTVWW<mf@a_ r~eaKz+3z:r ]t6e[Ӫ eh-[O;v|qf/86jhcbLƻVW0<J[Ъ%g4 LX&nK!_O<zq3hGݚyA8f콮H,z:u-|svhͳG-4hgo\r֋z/k>7P0ҹcNtk"茛uW\r[@ ؎2?mC¶]lMMd â-*9%zF1(g# ˑX2w3Lw,yɘ0bxB!$E0r)ҒK,8e' `_;:hҊ&MhxwW 4<~ުfa3|1IDAT8Rhyed(OJ1XGހ_S݀%5ӱmΝ]gz/qUCMj;H[N-*4 \sǸu&:p8Dr,^: [,,LY 3ŴS0EKXVKl٘dv 9:@ԬPL@#8B̤JhI1}W;GNbmu S82·;|>nv~q׌e;m[垔0zJʭ9\EƳ>ٰNZ8ƃ|$KbAЫL*һaC~ƂpTA##<`"Oqrf0X\)47AN%֮ {@!Pw EǹqwnIDfMcew;Y+m@NC'KFb`)reӁi|ZF:Mr+]ru$XX\)A2j/%l4*6Ank;׫ ??)e1m@xNx6?Ug#sV,-3lʜ'͜ w=w-Fl%VfOܟYX;(蔯{[|KyQ`we/?Kk)d^YQoze ƞinQ&tvݯZqE98lR:| !Kb>_u9n[v&(uȻ~%' ,7?hjoߞ25[N*%  b s`+ВyLUUq{ӗEfV pܪ&~?e,/u/q-SpԹT:U]>6]!f. ~AfkYS*F~Zۧ%槴 &CS$h+Dd~d]7ϵ͓\K(Dsb>\g(F :I m2f܇jצ1 \G_=Z}R¬(r}So$FX!VXY1J8YڥxB4 $9({Rf4ءэE|0xtʧM4:"&'-Y1?[vIq|U {L2?׻uhԎWz|-)Ih My+Lx7"I >>S߁I7"謏kl97W4SDU] EH"0mzY3;)QJpcv=}ﵭKE²]V /&<j?ߓܩ2ڗΡ5,Ad-\=r{-~?5pՎMObj`YE{ # lk)/Ot,󋸦P cWqt췳9uV--+Jm=3'2C*uֆHBzq, SG?ljZ_fwIfd%K#/!9A> 엇YVi{Yt^.:7aS\}{M`QtO 8yv+ \ Xt00uuC( plA{ sE={9|ZT^^:&b͏! MZ2$:hCd7,*aȝ1.<$egK.XJaSլʸѾ4Ƙ؏(m`{+ z 7ӽVMԵ0_1Ka(vi״j/~ۄxoclqmwsVeL͑_(/mY}\roXW{cK$vt}{v%ҿN'Vaȗq,UL'7Ծ^ZbF+s?)b~ 1"7rcvּүNUU`,7p<Ϣ:~OE] Zv: oC$Lx ބ homW=cäL y-8haM4[_V6-@jBAl܃ ]x$$oBGyaY'tV致{?y$f6$}WImmtv?1Y4hDcUkZ^B+*krLH&Ѻuʮ_OO-]t@x4~ JP dk02vFgYK:\@ J46FÔ!KoU['sJ5 S?wK"cp 4ʍwV[g_ǜ  ~u>>VEǼf-&yē_F؏}wяc*m^R0Ux< d@):paX)K+WEi7Gּ߸%cc??a_8!Y>hGFec'C,>.Z64 ﮿F%߁_7j& /0\th{qx!=/>_oO]b_G~9}P|g[ZܿBA("Q6%goA|x>]1~A rmpcS!qNMv 5j[$:N:j0}wS\txoCAI OH Fڶ4A!,~,af̕X֨0bSSϿ/\vv7X(dR5F8'drᇤ>1c*@ k\Ћ޴ox f8uHX+v*VҳpT0&+X,2ًkN}E"-lb"YNlknܾzC/ѝBKc?2]}<{C*}.Wz_z-PfX NwSFr|.I(ЕՃ-!ѻ/>$:z|f4I =;o:eo76ulʋ@0?]v<fצc0s֔gYq,kvƜ>ز-5$^)籠F8?ւJ4(#1g8ӬėwX*.:j)b?O`n<{[^Rd|>" cϠ[tΚ_HbԬp?"RTN޺#B0  9/|jEOlr̙{&9ݯQ.3!5 AH xj\TcuW!דu"                                                                                                                                                                                                                                                                                                                                                                                                            76ʊ*TIENDB`MediaConch/Source/Resource/Image/MediaConch.xpm0000644000000000000000000000321413216666133020346 0ustar rootroot/* XPM */ static char * MediaConch_xpm[] = { "32 32 27 1", " c None", ". c #EC1F24", "+ c #ED1F24", "@ c #49BC39", "# c #48BB39", "$ c #49BC38", "% c #3E4CA8", "& c #3D4CA8", "* c #110F0D", "= c #EC1E23", "- c #0C0A08", "; c #595757", "> c #282624", ", c #6E6C6B", "' c #787776", ") c #EDEDED", "! c #030100", "~ c #100F0D", "{ c #0B0907", "] c #575553", "^ c #A1A0A0", "/ c #110E0C", "( c #0F0D0B", "_ c #757473", ": c #181614", "< c #110E0D", "[ c #464543", " ", " ", " ", " ", " ", " ", " .++++ ", " ++++++ ", " ++++++ ", " @@@@@#@ +++++++ ", " @@@@@@@@@@@ +++++++ ", " @@@@@@@@@@@@@ +++++++ ", " @@@@@$ +++++++ ", " @@@@@ ++++++++ ", " %%%%%%%% @@@@ +++++++ ", " &%%%%%%%%% @@@@ ++++++++ ", " %%%% @@@@ +++++++++ ", " %%% @@@ +++++++++ ", " ***** %%% @@@ +++++++++= ", " *-;>** &%% @@@ ++++++++++ ", " **,')!* %% @@ ++++++++++ ", " ~*{]^-** %% @ +++++++++++", " /*(_:**< &% @ ++++++++++++", " **([:** % @@ +++++ +++++", " ***** @ ++ ", " ** ", " ", " ", " ", " ", " ", " "}; MediaConch/Source/Resource/Image/ajax-spinner-big.gif0000644000000000000000000001524413216666133021461 0ustar rootrootGIF89aBBLLLzzzܠ!Created with ajaxload.info! ! NETSCAPE2.0,BBIT̻qֱUalK'eޠar,+0X4^epX!Gw@YfT1xRNJ*;gh%]~[5LIXLs{_}Rrul_^Ld!;a|]_k,qMmn8i-9~oi.)^)M.^?xmip-p%PX_ +O]{ XP A0B9F@!)N\ɲK?b6$89zlr ͜8m JhŒV YcL-"M&m:US7UQ8b~(`)+դԔ"UN'ֶN]q@Rkjkgoq1>uGu|f!xXR֙Ipaoʣ2xC _LPr`Dz/8͘BfIeY5E^%Gߜ}^8 }Nzczi$0Y@MR BT<! ,BBIT̻!qXalKfyV&ޠaTd0 l*VBAp@T |QNJTJ`Y%` slGI[GpkV~zet"G/,cz5awo8S)A!&hTdj7kAgBsj&aˀ#ԭ9/\훷 u}K8x `@['eq]>!]o\dC8sɳJ{JB@躟 Tg(FPJF96cT4Q<&\S*F"pT5eg]bcCo.V`Kx&#խUì@I/5GNtqhi-` UZqHZz'낗.d>N!UwWU59##/p/r7ڙ$JǍ{B_)E#+M:4R`OVW K4J\! ,BBIT̻!qX`lKVA8h|Un*R8 ,' %ep8Ni'bBIXrM^n5&4r`MqIMRl&W{x[{[1.di"S0no&,Ubm8U9"ASf&ȹIɌhơ)׾dD`ϰ-ÍT\sdX@@~* naxD˰=`aE-ԫD 0pE I͛8P)1g@FI͂H!ɴӧֲd(9$jHS*])jNe| *nIw({AD׾!(l .XvE#5o@s,F/L&F>Yz\j3f3ش+ѿ#LGY//DfZh_ 4[E1~Rқ/'z|y㾿GKw?u: |RzQ{_zy)( u_E! ,BBIt̻! pX`lK[%ĔI8hk}PR(X4M8 Pag'QTHRzz*0PiS1 eUK\)t0k)sZ);_`XpNv,od",vY)B~*Bgn.@RqdƟ&M-YCXY&bS^:ftU7NȦ+uk""FdGCs e >UBH!y_ʜI%5ֻ9!ϜO҄s ϣH*52fÌ!(bgȕW,0GQ+X"4dpUW eiNw]i#ykw-^SmT vwb )gߊ|f7FƳi!iͰjn\I֒T﹄"Kڷ A, jJ/Ro]\h@-q q\/wwk-8.|t+|x'9ן 1UimGN! ,BBIt ̻1 X`lKV@8( +E^nX U DAPaG4P6Qo2HVLi 1lMЇrm0 ys0*HvXh^fHYn]29)/C|lO8sHp9TfCeSRŪbécU{qdRNᚢS:ȹZC~A7)l">&DGc1"^G @8Œ.OʜIEF,rsBʐ"FS А}*]ʴ)=-c93Sb1ej6MwإRҺtb3պYcۓ"BrdL!^ikjp Ve O3RfH& iI$Y!J ̊$ՙu`@q_ Y3_ʾ{yᩮ79-oHx~*kƝԖT&|مLY^Ez! ,BBIt ̻1 f!,EU@8(<2Un@*Q'A (6I'N&*%3@F nb./<`J[LYm_sjvxdOu+YVc|6!r+uR(9Nn8ufmD9¦s|!{uRTN޺5dÚtOUXHWd#I JHpmaC/'Eo;hN\ɲ˗+IAき67賨ѣHyRgG:ٱz%Qx3#FN&G 0M#Zp"֚4r@eRDגօ"ԉ:)fhPyX,1@AIwtl V3:#?jwc[rA^\Lܼ|ͣVjbk8 ryd}'8K>x dD|,E'wC܂QL ӡ<! ,BBI̻Q 0X`lKV@8(IUn@*FIɚO"FTb=@)!|RB# ea ^-؎sdM[QNnV~iI/huQfU9c?u8_@:cp8v?.,s~l_!&a^ ~!#.)S޶6#"ئr^&++bG.F'F1tqE1$(S\r0[8 eΠS=: J#Icj$3xTXҟŞ^jS3\e.,h,CJG25[oIe+[y-VvWV9{[q ~֚\MR9Ϧbj%@u]]zْ*|@p|1*Ʊ3*>@ O|c@E ] *|-Ȭ$¦\Nȿ拜B/cHk썭pQ} v]|OPBd㛫egw6fDV\UW Ĝ=! ,BBI!̻VQXDalK[ޠhSE<n *Q ٳhpIL# Ti&&mSfO=pRZnP`{/!J3Ve.{bA!&9_HC8#`]v7wfl&C):D)eU-@{"ڱIT.a7FF3Fϋȭ=rŋ3j%G#' cȇTI˗0cA - 8@h){г\m2uX)x2;U6D (alDu]۔Kʧ1.VxB Yx/ps/Wvq'X0eW  )YCh[[a'U eTYxI=-?3sN5;38>]zSb'i (Xpb+Hfyy/lX_oi>WF]! ,BBI!̻f,%njko=!EX@;!J7Ś@(\<2o TptmNyiM Otysc'}sxQYr"T+D.S`X R#P][+RDd-Rj^G4m.^P?> HפvHP0 J%Ǐ CHRd SxHI3)c~yI͛0j#y`Zyv @KwфmםU]! ,BBI̻Yb,%nzm 4Ujщ2XF ļCC2&@ўtՆ$5! w"2QL)\5yD"_lQ5Ws@zPXe/Zx<{+y5Pz,qc-qn!`!"M([ѪAۈ˼΄+f$U-:rE[xg7z2nA]aȱǏ,\ē" (9!ڀ/_6cI͛]ȉe$Kde@J~XB 1z疨V;jkt<Xh\H;ςE;;')(K@8脽2 \=t@Y*4F m옂љ@نF(v5Е< a +3&|5䤏) eH7hE%ƌWV0z$cCžf}g5B\D`:! ,BBI̻qf,GUHޠϓI60XO =$p(CկPZY{(0DF>A{54:,F=KfY{kw(h8Uz}-vz\7HdCz+hCULlQƤHLy7'Lv_ּԺvA7=  S #( _:L0->4S^2ֈwaEiH\ɲ˗8$˜s8s>' U0o xѣHZU}zZ 3UP\H0N3xRNN1\Th_nޞ*}妉ȓP sK`9{C > 2Y2zq耴PjլIo(j6vDxPdM%=G s}K168v#qGq" hfU="ޱ\H5ßR1D^TQ#3q7]8_S N4O5&BQ;MediaConch/Source/Resource/Image/MediaConch.png0000644000000000000000000002466713216666133020345 0ustar rootrootPNG  IHDR\rfsRGBbKGD pHYs AWtIME  ;s IDATxy|Uյ뜛yaA (AApھW}}-ZjPH$ Ldp^Њ 9YχOL﬽^k                                                  tg)4lNmCQbCDԇP_g=@85@43WFIMqPiÇs_r#̵Z"\LCZ#C "Ahځ33 :~ jc[!`$a4jB>"F""}dIGc8F1( H&@' j2@S^yАW %%2"BOJ4f`*8mJ-̴^5\A!C5-}u|@V>e{edEnx-yLM9 lR*;?W "Bg9?nfg=߄q5,#ݠ"~ZL|F7ܚKJNȊ]y&%Ub{@ :gp.n@XZ  tAI>|yT_uv<Uz਌ꓒMQKLϹʊơN z1 A>ޜ`zG'HNo^Diݯt2"B'iFly pxsA =~s]K{0}_UxU׌߸-:IUB51 8|Й*o'·4M$Ijcz˯'@J-χ"B'LH = ^, 9_1j$vK HT :"TAqf|fʮSWQ;'VYn=-a+1sІ5vJ у_&6Z0z] es#D5[ߎvk%`+rXSJ|Uq3ݬDMUVV-o@.`?=^)Uzk3IJJ~L`v܌X C3@rnw5%(HwdtI/P"bњ} 3z^t|M B #U>Jjqf?@W qG.lzZT#"5Mch2ofm+Ş>QXy;IR<5OA]'iܿk1~ۘxC1v空Q~u37]rb R9^+ *ƈtMc`R~i_% o8n'+]V=LF^EQpۿq} ~ r[xPAj3Qo9Q Ƥ>eşzH4v.,y{g5A<%UqC&0it?5rLp/pv-Ku 0s+52Є|gp6b 8yMNd۳gyMN|=# {,njИk鹪>H+P|Z7ԉܙzZy+u'zkW&+D2W`YxeFjqsKe4: _G `#@v O7qJI5؁n Ɂ > Ln&ޭD}M!#ZϨq L&`.S ꑥ@|)KJa }ؗdAXW|%egiy |`0N-|cr}Jdd U!!rl?^@r.%ZyE{qO?2LċKg@ocyzCc3_ øn/I ,Ҥ'+;G?nbe7? qBkflM_q{:x>%^-Badx|5Vu/=X(^0%էxrn9l]0^2%BAXqb@0foU"HԂ z(zOW+@/b] S x@W-Wvދ=qI[ cM [*E|}^ZvX8R#݋A#v]ߒm q$3zi5 ; l?-G{4#V999Pa'^WAFZzt[$˦ % W^&0R0֐F?/ОB<ўE U8Ać:DtϞڼ36NLxߧW+HaZq>zY=z^(Lf5c1aCh"bڮi΂E]M{;IDwKiyJ"bX`}'<>^2lg 5sn=Ӭm\Fq^49W ΠuoQHO)=#?+c޻AGU7vVFPwp*oDA3ӞRU0)4Ju=/ %Xt'E<[ЖLl7{ҊەGbp |@qksN}rz\b  V _pW41c<[qILX^GϷ`m+0w\^GܲB,k.ko^?;:Wm)>wLȜƯ eǶV9jf`tu,*'ɧ}#h[>Uw Čfgn#?Vҍ}geγ~u>EWMs3(r2&hbGA.pϨ0?yiRa`X&ZnAܴY|Ƞ6E|FW'Sa(ztp+UDH]wPEfRF%Fo+_{m!Ѐ"AЖ.is0F=wPxg[ݸ@g&l4Aҽ%ZX:z5MxI(֘ UT۩VB]bcWmT#y:뎶()\bx@%(F< jوl%[rl6}qGr&QPO$>i y+CsI=A }taIJk6d\LLαJA]x|K-R:.K-,A?@9eٖ ٙog2T/a''( %Fwi>kQf bP!3ymܴ'?>HK`ṋnWrF' ]E3&| @Tl]L6'+kfl7acz7f,mOif-UneM1hߛ.fe^ KVjULk5cp] ! Ɯ~-{.{ƱAui~N{E[3=z<XD{X!@s[+:Ffds /{*R<~[v)G:(p/@re'c n?6-_MNfzm6b叝7maA8<|rpfDA].ImXT ZL˗iƈG?1akUl ܺvm9 `Æ;f/|] CոR>aCl/ZJm[htME :+Sz+geO 6qvK&{0;n=7&vצ-;@o-9 Юgs:C%KLܴlL@B-M1S#/ߺvA: {#f?T#r0@ 6{P98q9ӌT~"yJS Mٜ^pZ煼0[=3~ Fs ӼQfIELdk}c@=..~:~;^^ w[dV^x(DLfǚ[N8SAeCqtuYg#~{h$_use= 6]i;G EwHs q;hWHh P :&Ѐ`T ^^^`GS2Ump]SӶYgyLYhGV I#6_#.]awMNZDvH?#`p6"#@XfuuuU-^T17m[n`h/WP W@,~)B[_\︜jP{x=@@I((ghvt$E=!ce~-> h||W @<pmdakxIh*1v9#>J VRnbQw=f>p(0,tߧ)N}1!6u¿mWdĖ>,~ JM?SLK'$2D:Dңŗ3,]3_'&* D;#~h7u75LSәK-z@5%PCL2nh 222{H~늊Xejc[ޭ-,lzh8ai:ntfltRPVnPgUhGdlXȍT]]8VpEFҠepzC5R;\pӾoϹȒoSf45?AxS0}Y.uplA ~G( VXagJ1k:`{Vi,kȑ 鼎|p+ bL{jjLU/K Cu!@PU^{t:ta>9mMIYtLN¡H]o2}ӟ4˓u0X[zo[) o FFƬmE3 hDJfs?)~4T)KtRn @tT\3{,gؓ|?Xt iPfim k2ہˇ \ WMZ+OsEF$+j3`_;!44 駟٪N~ddA;?0)#U)C,x%|f*xl!JGh `@ 63fG~QG---ؐ*l6 2a ړ=4J0s&.3GVdl$\ S]7ph+zi7_̕=f1FZe@̀&nu\oϞ_fF.M J3-۱=s[Ԃ̪\ oΘuy35wF B}L b5e0 #X#p: L0By軘<9W^}n^0issۚEJj1!'a&ekxU囀 N5*㒒-"?xwx{>.yusΰ&/s=}0L=h5?p„GɚՆ{خikαN |1kl7TZZiSP~_|O\|㼿{MX[&0'tVQ7Ǭ+pD۬C/2ϝϺ`+>sf?8ɓxoFav7v uAA3i{N5n\*O6#&fx׭^׃TϬz&d0s}W7OW&ٸ&n@\_<{SUU_k&`;aZ{,{^5 H˝j*R~ @Lf<.MrrAM_|MNtCɽ6gJ? PO={V;& ALw2$.ȑ{="aoVij{Ӫn"{mJHa I,|sRn}n8֓~nh-W_5a-<fuc64SU6Nl"ϊJt:噸C_zEk6k[΂ГV=&Z' P#bcc>o#f8q㖥$0;U.TtXu[hMS`e:vJܚnw~F |e9pr ]* ޯCZrc!Z S;%fΊ{8/'i=P=3[34=&S7ǔ96 k9`jbI&*̜1cV\qW7*rsg{A2 D-glK j?Mn,i3Sϓ9A;Y 1jW.i9=iZ]S'O"'gհM!˄ qC/*O;HTUU(R秀/>\l.%q{3Е,ja=-?j 9Q t&p~vԩp'P|落cݛ`\;-Q^ZM]  dUoc=1,|/U]JMDG"++ +IDATiqC.IHv*eTnճuv Ф}3Oٜ@:}VY7;* ڟ[3fڢ=~oΏQYYite}ehh'nƇnˏpgMb6b3Јa!ܞ2۹ӓfgV] ̿GO]צZl_sd^ة BPY6oClENg;" ߫@gY0ShXgC_곆[t5w϶SoN @e]zsu c\ƚ6UnHq00G#Dw!0P=BC. 9:TA߫>!Ӂ!յ K 6i=jj?$ .ȖӰKq~:ƮgRwF $J*Ad a LeZ ] k L mp/8 M/w>rKԟ~mEs30' ~rk?yWr,66$X &iu-XKjx`t)4(g=dr<fu}Jk l=}ohr:|Vm/ܸ W|()tǀS8~g9p21lqWc[AarmgvvcC) ;p'a#GxdbO z@6P@Իѥ#\Hyq4 v;OrWЦ_}sDYf}'2!.~v217-!Ng 5`mg#7>p×, WpE e$LjvCCiP}oo˻ Kٜ=Ŭs &o1E#~6):!NE爍' p+p P]%KzZ'\]אr'KVb_]'+A_O+ U#&;uv;΀^IQ&}|m[Vkt9#~}„յu=]5񗫏[`酛̸ϴWF'1ִ|M<'"PTTTd316}ꛂoi((-raG (;cCw}@ ְ^[vp yKŴSstVuU^769L_vf_?e.s1˥b0^%E%n`ŋO-Su8P6^Sv0 *ÉqT#ugkk#Z0Tm}}}=Vn;:ڢh(-=*                                                  Ow]q9;rIENDB`MediaConch/Source/Resource/Image/MediaConchBig.png0000644000000000000000000013570713216666133020765 0ustar rootrootPNG  IHDR+sRGBbKGD pHYs22zDtIME  Dh IDATxyua{& a IPcH2[F$!Azkk]zk7fmVmL$% VTd$$3|~iEd2xx> 5g;= 0^ 8'Nw#[iv,G#jS4LJivJJ2LL)ZI䈔L(Z215_I>qI;TpIJZNZM$hM$dw]i`fOjt.m g}.9'޹sgLܛ:&gגzdIy}dI}}d)<$IS3XJc&M)Sk:;ZÝ}ӷ|ޒt<Y9kʜγ[̬U;yVIyNJf$uf.$K7;5w{RrWI4Ρ7[*` K)'ZOJII}A0B*jrsInꔲ }͛wKl;ó{ŭRN '?wW}F$$lfCO߿G0i5iukSSyIZ0N %PJno~!7[n+ FmsVzqm2/ɢ$ӔJrsdMɵzQM1T5iZגd2 'ِKd5G  Ǝ#I55g0vamyUIf厔zI.q $cv߉ir^9[ dmK%p}sM~,5?EIZ@dwM֔s]Iz-``Lx`։͞%5ye7rQ6oG [g:!K?sLQ=uCesϺ{%m&/My5yUCU$}rQ6%X~" J%MgڿQ ;),9?g& $Ij)ln>3cNn$?dqFHtJo5V/G cY=4'SsI=IxLM$YZ/s<ޛQc¶s7M^[kyuIf(є\Z:S/+6 IQMڹ7g&qN)峥䴁Mז!Ffnvd-I)e ~mgC|j 4E^mÄz-`ԫ}})IY|ǷnXj>=c/cNH:+5oHҭ|͔\ԔǦqۗ0wGo#:]/wU|j-n}ꈻCz;f=6ymyc+KMK'60kUɺaU 07úZINTg ؚR?Jǎ;078jӼ-5JRK'Wq Ƅ;J͛wOJCcնG_]K~9)+*``+ZM^VK}[RxuW-TilܸUj;S/W'||v:3ʒTI 0j; _Nni)?Lb5ͩ ?w߽K!)?ɋԀ'vI'ꝷ `Q&esk{"NK+ڳqV9 0fpvO!E ӵzoqh {]I\E uJrq-`Q3Lra-$SR/-IC}}3o7%wo`Qg1̩g<Ózt5`~'7Mޚ,VݛS 0:--YROR jw w(OoNۿ `FgϞn&H-oIR/]Qg1ǽ?%?dl-7m`ߕ-`F9&9}o$<7tսe*-0*ޚ\[RfY5dv&9R$%Rs_{R}NRtL}nW}זR>P5iUj3mOK 0TS^`Ny6t&enJ֚cLiJrWJfK-5Ҥ3->o+R;XOۗk)o 0yŢM~~+Ě%U{S 8?zTgsk-[ENZ˓8%4C}E_Ԗ19{:\e\ ۇ+jj30Mϭ\$a4zpqN|$?֤^Rk7\⽠K_ߤ|(Ϫ9ivm_00"E]/(oNC>s{O'OZzír0Z=S%iRb@#8gKi~.)oL2Mدn-\r0G޹gO'W;flb>s^ឭZV%pP~o(LkW~=z0Rm;v8)>lkj^=`fe KR/$ԬMaw3sN_[Ff=sQ3Ԁ}A `87'q'sV/?`DVϟ0NoTv移)Ȳ+O{Ai:>F[S'Ꮾ]r0R|Qݩm=?",XڤyGRTFGK꿔>%׮󑂌'S$Հ}v(]o0rSNK)))cPMfb/p0m3&s2ؗ` IPj対캯cv߉IVh5`/ =7`:NܕƯkk<|Ǭڂpm;MBV)|Љ[n+ǖ_`Qij߲1)Ԛw?}rp =֮dOJ#|)8sΚ~&?|ԏ zŲROuWt~|M7JFek寓,TOO=JꊕK_uwA)X.5`]k8}RQeW6^QSޒܐ%_"ˎ޹?Z>doגl?屷{F+ܰhϤɟf"r]:ZV 9^VS?dϭjOOۼGlE R:LB5[-nkz75'9\ no``Y|æw~Myk ij]ٴo6cO.MsYn5`{L@u5 Ϯ$0g|v~˾x+I.O2] Iѳϥˮ>mZgOEԿ[~{͙}a1ǽMңv;|T 0pvy毓0J(jM 3zpֵv?@yeMjkNyPm}8B `6ͯ]vƵ+=V'w7lS 0-_I6O_K_тg[Xd_<\jyuJW\ݝ?MF51n~kǜyƀ>"vIֽR}5.,~"%}j7SUg<`IQ߽y/#x4³vNZo&i)S[V-V)x:g{Z-ͪ$Ϳj'᜵Ω)9E jMu{XsQR.Mrߎ Ln򈻾C 0d_KH#';jjS58gjLPl936mM 0\>Lޚ65I-ιz<55DF ovyek+Nn$a5Iyת}X sRViJ}]损V |W/xU)S~BSKK 9}_Wj OqĿ([xf繚-SRdvdR߽yKROjOLI9] }fU=+ݸU ~4}Հ|8)Ĵͳ^_nX 0+g9If_S.t5Oj8ĉ8%Ԁ|@4͛wqaIGs6ZoK)O3L0euSՀ~H=c3]w^Rީ3PJ`] ȃ3><&}j~wÄᮗqwH1gʗ&5v?x5=NS;d}If2zWv IDATS 0ˮZ״zՍN5uR }K;MguI&ݖNs֌MnFo 5`D849RtoǕ0i7wKό+צ#I&0Ҟ$맆ۻ|ŲQdzoEjޭyykRSYsk0(K.O^~Ƶ>\J:uoٴR 0 W.T&hM5FJ??#3Mܛ+RԼg")0Gmﹸ&/U`tJ^aHNn.)ǫDԼ{SR`D:窓]] uc)引K"YsZr}5'ǧ g]cjFk9L)NGݹdX 8 Z5޹K 0ˮ<V$jf4Y;M߲ʔC 8p#@{~A `?[zтΥq9 Xοe|ێ9}KJSK-?WGYxnJJ1vĕg]~QRm&%)5sU xo ל3%t0.P(/,j$;nn* 5ORr~|Ÿ+wG8c:է$IMM*R߷c_ k>%`\:sVB {`5n ~HR`9g7Z>+6 /OqS@8X?Ss,|SI>),6{:Zu 1m5CZ- ՀWz ఺O,_Rq4!s/^zýRo7dCjUK[7H ;S 5e|_/5מ:WȭS%+;^ <O_z/pS1 _ZV 8?;SvK)OWRW/_`ۃM5pR'g;W +? לItR`Zf$K XfoK1~lI>Sjӹdxڅ6)O2Y Yf0~=XߒJA1)N=לzrI]`<wީcvSrc)jPnGscu=unIW/Њǣ[k%`)i5ʝ'jK/&Y~䔫1Ԥ ,%g goxƙW\ݝuI^n?uVc|v3}s56'No<qbM'sVbW$$JjCy(%t5&Nv52tuNv'CLx8I:MׄGdh׃{Xv#|I}U֔ڙ.;M)5G4KrDJI%N-ԩgz g$ Gޣ%J/u/5M]_}je/}N0zJJY'9T@˖;)Ə9_S/TVgьMn{ ʅJ3/LN=e7֝nCaU&[uxajsJJ]PKNaNZKyIN+IQM2͛(|J򞃐|{I!TKRʗV.n"#Ͳ^VkQӓ R%μ֥kJ%`Dn.toFsVԋ8mII͵Vӯ93Z2aR4ɲfXiW,[u)Ƈs>U(#@-q.m/cw?d?z}JrC;?VjcW.:S593ɑ#SW~KQǁ{BPIRF2`yIĴnJһ~$7%tة7\{=4³|Z'%$ǫ̗&Ln~ԧ~|R 1_B`aVHsi P/+5_Jפڡп9s8juԗ籫&OM읶Ug޾K˕SK^5}srP_ \ԫk /0!OznJI U`~'*^iu++V!y9Бw..MOʫ:]wjwْKoGo/ϕnN~mwI`\t|tnH2OIrYIl?r ?1`¦j)ve ?(Bgq6$$5`|_K]~m<`U;$)ɚZ\3\.M]obl<֦o #x{(I[ RMYvɚVЕa/9lZsR5$]z#UOg[K_)#=ݼx%N~vmޞ&9T p׋.?oJ1' n{SF'dq#W͟ZIaYhkҙN_7,سcμH~ :!0`Z|ؔWRq3˖?J$z+ݛ?`_W_K2WPθvcyZ{#PSr&Ϝzgw'U1 7+سcIʫ38]䞍J  G?g$3a |ՒSR[}ܱZ| X5ޡ]ͼ]j5< /0juzt2=?!eZvS/a9rM50r䅓'L%8@7W->޷_O2UƘ=ug\e)ƖmG?iLVFz6O #Ȓ5/陘ג$(raSN]cˎ޹K-håӜѽ`h/Xw w$U#Ю cO;?J0uզz{-+^v)^` /bl1ϒ0hWMfIj`^U& cxpqӇ&tHr0gs`_}3o}b0j̨1qmۓ!%`Ts]Y> `ޝGUΙ$d23IXdK(nW} "jKmKk[Z].JBR ,ABhՋ+`@D ds>?mf93~>K^39,c`|_!70Y+Vly%'Wg "k07*TVSDD0wݸ3le #3j>`qhP֏EpKyTdپ1 (VfyNM c`Xf.g>f "ihlz!""Y=Բ䩵'V%Go + e}!ȡ:uuCW` kGԋ>o:A 2&}o2u "b3k^f< 77{Gߝ;(8KyF@Kד)3xQ7vb?SEpk۩3jDt82hKX#a`I-8 "uWd rea[EtZEKyiw#x  幓fPL=l)+yί=#x7"CՃ(y*DFs w)=x˔ںr@ 7R.wUnCDjPq"93ޗ+x実0 ?[>c} 2j8%`rDC)u,A9A[(`2q@DEgl-ou.ŬA.1;b—a[ Ycj񞈈l9vtm+Sx0k[?kyͭ'.o ODDDrjbb95fa2So!":3>ϘODDQiKf B}fi»df5շ@3x[ﺺ %cOP,88!o_'FezlqQXSB`5 z-nFviȺ"N\c+rh@m֚1M|9AI3ia`PJX(*ڶ=^b "";{/o!CacU}p/}|{V:jcwJkr]yy^3A ɉVAsjF?޼W^A8a5wIC>gU5@u(2D " >Vo|TQgU{frkmI JS߿;Y"V:M Tnc ; } JMa rTLCXKQ`@bo77v핍Cn  8 gzǪ` oj8,5u  {F='4B CY`07fx@-T^E#I^,-84Vycg*R3I%!XCc ozh {Mm9'gab (L 8@"D] ljkJ x).[sL86 @&kc%PF%i{޽!8(6Žp2.1RY&x]jnYS,iFg%Cr)㬬^->ׇ(ʆ(H۳kE%Y٢Ȇb"ѣaxMT6@!I** 2 -2>x\A-4V> M@0%!KgM/ [h@:U,(^ ѣz3Knd p7c̖ej1îX(6u;/=MU`rXUh,*+xIbO^x)*r/CxpV|kE;b e,(1?< 2OQB]l + E{WVVN 3Iln%"@kP'3̕7ԐQԩ$|o\ ;IesDtB.9PJQڲf+$実0usj~ !d]b UoϤO 1W`B*rMT@PO-LTL@DWBы5z'mEA92x~! v4;p@W6EO'BBU-_ sx۬5$fR)\֠vwLZ9)!3 U\DQPOGݹSp@mUTddxt\}恨GIO֖`oZP221-e*.a j: c%_$}XٹO 2,B&G (V^,0S\!ûc7Ռ(*ޱ9Iq=N_* IDATЃ5y _JX'ͣ)z0XCl+Ə7(a #Xڼ4t[P9,A0=xh؇C @XѣÖU\XQTcq5AmTUS3<64<DQ,N>mܒQ"m,c;_I4*--2g_ p3cP%[5}6}UDZ8n,@l)*2t\}7 Zx8gIe0~܃ 1 _򜭋[3(:2ga e_L 7 -Q7; }ż"C܊vƠ/`Y5lc hu g Ǵ;gZ_`ܧL!;pO>:i>uҋ@ӵ|f7Ti3؆+Ōk 2,1 ~"/تbU]V)kN p7K8{`y޶cLCt ws51 2=社)=dpODʩ&}jsꜚ{x%s ޼<,c!w«& 2T& ,Bi-j޶WD)*mҸ)d 74VN>=Р9": a0F{U{۾k+AUꕅL.^HsrY>:Y#WVVBC+$Qؖ{lJZ}Q\Ǎ?Q[p;=FlM_'֠ϰ<&>#k8#ͤku;~wVron~~bF 'K ZfTIY ֠b\6s 3P%b13SxCL=pevrv__|sMLYyjfk(椈i= WL/>__B19CIa53Gv006e Zl @0%b^^Yp`KM_(^柈>;c/g-oŬmڂ|Y>ؘw&;xo _}ogfYn*aʼe c:Qgڦl:w=  ҽ̨yAm\WeЧOo`O2QL!;xe]: 8/V0\^)ל?}"u6c ;DZ/| Q,{p98}2e@"qmN_z)St3>.Y>3ž!僷!RDGtԨ8 &]:73ub &+^<*'stUkR  EE<{RsbY~8.3y^bY`?N"rd \d781HAp[ 4q"3x X(}Pi7#E`zFԹ {N9)u1=A"V; DB%\x 3m3Y ƲDV=0FLkHn8vZiX(7"ֽ\SWL[|i5n+_)%ecsLaW  (ƺcLfUTQ33,@M9G x4~lD g >ߦ)%ʩY;X"-CD׆Y [&DCq R1\]V)^,-ٯ527<5>nJD 0; )&nEEsoawҗ (ֲDJ2|fp}6K<yDv>'Sx@"?&"r27|u*Um b$a _HD YW3ib %(-"r__֓1Κ95 a^k wF> | Og06Ə+!5^cq)sީg|3yimi>?[tO ,]X>2ez_IDAD0|hi(zE$έbO_`"P&S`}sQQ69;<k[a cⳛyEV P_ed畜np>?""}l0uL5VM{q!X5bh)r!+-`D &/6̀G@DQ("k[w3j"/wUnK|ij-%SRLbd0eD_ED,QE_<)ƪ X1# G2uwY>M+f Q>2w3Q DQ+nQoD6O glD:jTKDȘ_'Of'В.vkQ5Ap+g8c3C )/(nan"Q=6:w/ufּDL[1opDCg(,XPbN=O\DUt޳Vl}*Y">gNXͯhe " 0!  ǡr3z'-*Zc覢|Ɔ ܻ$7X>E];2P,`bhazc FU4$'!$jk~y IPHO@j 6UhQI @*x~ D#9V2Ed?0Y#zgv͜½3p=KѿٔڽkC=8(*2&4q`ވj@OmAa456Ç++b͚8)1.ն$TI }U~:@ ď|RoN\vv9$,տOl}РaC,ADP7Cxj2y^#i;ds_@:j&55]hShNB5<6d.Gae2ސa5o`kD3yCnd .,AD>.;=僷#)py; -Ö0`l/-ha6rAI| ,Q9OgBw׼bS7/1SDά5 4M߫B d:oxzk}%wPZN )wAc&­P) KiN5'@Z5Ry +yCn"͏{WVN FY?~(Dƈ7U@ >?uי)8"PA9"x x`_W%YmO`(&*p" LqE!o% >6*Wl-Ky0,AD_;xp ;o4ܥ"`Eòk-zz|LTH`LxN=Y\pD> V2jF͗XAYRыv>.LW|l坎/@a_,|/>!7wUBDY8uۀ uNU^Iu(HrÀ҂R)\:ȺX`1 \W.̸pIVx^mTZSu[o奈.^?SЗU @ܪKgɭP B.`5/;<|6 PwH7 rsW%4ǞG4RI WDg/_ #yچ u#PLZY&SDƌ1i0D19[9Iq=NCDms03Cキ)y0e^ 7 ǍjO@m1=xeʗT(ƀ Pln+SDƜu.Y"<_SGX}FNCXFy);t`[D~Fߡ0+K }re. T( n,bq@%P;)ܩaPֳ*D =%uϮML qb#x\;Y[Fe͚~aw@0Eȱ ɭ>#j=zm,N2DTDOݽc|kW.Iٵd8fQPYV\hL_2҄yTЋElXVX~\>TDԬln)QkpACoȣ,AD:ޔg']6(*24,߮Ն-muyy^3?Nrզ"wUqD*|B+]T}B͒51;6Xڵ;]0<<[T9銪Ϗb6""/&jJ N26\W-ߛ{rj9:4`x1,AD; L/>_5 XŊ&㹊F.(O?aϷ7 "Ԯ]n-y%/lڼ%Gi@kQ;X}Vサe FLZtCTLhYD{tܬB=XtV|m߱`l8~ cYL%g<Tguiw|"42oJxC´^~kX(Kmr T/lƸUg }~(60YӋʩ:4 ua{VsMSh۳hf Od/(IO-@}񳵧1uYӿ#gLbwsxv굀6k845kqRS|k~΋P}g_//D]p8vm;"ojE-UcSo?kxV3Zr!ȅ3KQ+ K84_K(nw` (榟,(14i>2jUL9 %]3p AkS~Z#Str0)oXÐ:]jULԩ}Ll 0O(rΖg<]7n%DX£GN+sja ȡvCvh"0p6ZV.qŢ{'r+ ?<:R7૭'p4G"粂;}g;38:1∛ӎIK h*+` ʴDΪuG%iNpUHTL+,5jv PU NJ6+ >eԸ8mm7*V/5k M9iD "1P\PYw/ s|즚@QF Yf "$VkZh`򼥏 }WUb/.c:"lPr`"RHDc҂pV 7@QİSWr9ݐ{th&/)k?_X U+ W\Cnܥ+] ["1z738/p?3m< 9]*g"reD;>5ǧ'@(n2~+ݸqEA S[ժUUW8"1y g3YDng FZ U%ȱC{v%>aP|ã} oj4TXx ĔqSjG γl@+KxpG+耑,(S_q ~ Ab13_Ql9,bo5#L]9y_궃Tq6oW#"jLAθ)ŋYI ;,z i `. (S84/XF<QF̚8!SZPjAX.Xl(z ؼ|Ue7A2X$jN}|xSd wa9n\ "0Q|X,}EKk4FE2@pNiA|ټ"/5κ8 V\nkc,D`67NW] k,MnuYÙAvڠdU٢EqT^FʇQwz.P[O\Y3N|7Vl,*}D =ԆAC'r@Djkxe;Gd (/4 ÷Q ""綔Z7>Ufp-5Բ{6koVp Zb^À!gs@D䠪~3!g8T߳{"\;bD} 4êRDf Woz5Ws) , .V^@D85""m,[|@kyoN9 +]uDԍ̰or@Deω\myۇ߀c[\'VV $ ܇"XVX|\}b&+8gʹgm,na"f=|j̃9 .WUVVU.iS/`؂߲+Lkp~es8 " }1=X`7Kt3m,"r'(*W]!@3klY8eҁ,҂R YxL.'[Z8 "}pf>~#9994dրjaƉX`dm =8X!UP IDAT qY0q3bS=qm;\}[22aaOGz3}tej 1! [@:i?:"AAq. .=zH_!1ǙgnZZ5 p, *qx11# @ p <= `@wX)>T `اR  (b˫fp#-1!?n=@ƆGLN.aԪU Dh*ϩId3™ Pg~eBIPп2D~ (@gԀ(_H^WV.[z#8Y &?~@Dn"|#z8 @gHaq㰡ygc쎅O򷁈ȍ'me{f\, N &?dř;U{P*]ʭ7CAYZJX&!}0t>m˲'Ohbep=JD֥4,\P(Pп؀ p'yPп)3IZFI{38cCe-Kt]xNuȥTp;`y%lP\*n;`"l,5@tz %W׳Ef.!\1K BB#KI3 냁u@`st~,-&d_X H%,!"Wm6~z(vz*^[hP $%%et`[w Kt=VgUQyZ uT|(g=wH`/\t)=,==$]nM]VpD, kD~in-L_p?>M; pn~;LFՔ%F:/;fpi> >ؒb~mMD#W5+ FHS&O PY YϯlB Z_fgM=%-D}r)E$rjɓ)vL-/)MdUXwDWx(F0x$"8`0WX$&P@ 09"lD8Kt٪KdNf,yb 79@DrV}iп/RE 4`ׄ>F.sɯBKtQoUY5la 5=}-=X98 5P! QYyMm_p5  ] ]nҊ0 "oGeÐ9pr̴-K?}saˋ`mLMe{ K˩ˆf9ŖrFXc " P͗L)Rث=DԀ`0dgU\XX"U3 CZ@Ayyo>++ I?xQԔq>fY"a[ @0DYv3#-DE~m޸aԔٰbkP'dhe0迚)SZZ`~ֈ싖f23jVIVpg "7{ttߨ+X ?Gpa/b_bȱVp褜[ a9 a+o ":~=lԂ?y?7jC䕁@%T]@` r  po "2:QWRRPײEp;5K`oMG3z'y~Fnvp6H~[M^;@D> !aQ6m[B!$˰Zt"fpj1!DDWF "3- ѷm®ԅBQHSPY~^^Z|SmR KDF8p%"p{/'0`W7kP7HPȲԀF輍+=#ODN~@+86 X""K JPP-<.ݏB@(%2F9Ө[ >w:=,>5S]G9 (8x\j-Dc rp_(;ਨ^f gbY@d@DѰPxx؇\ۡ9W.Xa:e욷|Gyp@DQrpO =lg GO|ӲWz96MEYu o h9o/8ٗn"2?cI @ k8&s 38CUYᦐzVpݒWQ7m͍'))WpOZ2wS~W|+%`  79pQThnPd8pPJ\#{6Sngki[<$Vp^73ɀC1MKI eɫk'_)WDl/-hl b~%&C8R![yg "&!7qR#mUU%/oD))|[mZh a GV t44(^sKDM93Gdr2PhZ@*T4biwXmN-!lR/x<`DK!  DO'EdCL~e' \ԩM8Ɍ_]ܪ0#ehV h:j+o14~դ(<ڜ\~z2FU]OD'"SX*À0UQp|\ 5_;IQ:DOUvl 7p9/Z N%Fp%op"Tެ@Dѻ$WW> 0/wm?_a,(x$;,Y&\DQ4g2d8$L:W!Rt+cx[`Ktji8U09p(aQT K+Y(!Lh"[[،sY=m;q@ngQԯy/3],zF H1(gXV"`;cT~F ee@D/=9OJנr{{ Dw(<*M({u'(ꮇF J:"?׎w}j4@p/KtyUjYM9p@D@ׯF)x?ѩ={S5@nZsY5p[\ydXbk~,p~׈Wg< }lQN8dud8y GD3WaQ9TgVj ;5%};EEC8+Љ 7/+Q I tQ0ӧOl<yQ,١]_>s38 &̎.bfW.6M' l ڥ=Q-Kso[|CqM+@F :#> @ <]"P hfZ9WN< .:6Ds 29eںqrr2V^vj%=-va]Ge#Q읏j=x )w8*6 3O}O,f!yێ|} vs"WQL2 @'"r7PD\ Dm/-h^hg2c|`G["ﲂ "ѓq-!~@"MDXu&)ڮjEa Ym| ʫCm\=k(6%G qAb(DؙA ѮCڂb6hl N}&vxێKQaK":&" @qOcTVVh @Gop0/'_]@RRn.,4eЦNܷć>޽Ì2Ebk]k؂%fii+L;/T.׬;eǎf@ZZb; =z`ر18ѯ_G87|^+زe3Di))?vhʲMW0auD2D[7ug`(+!(>y'ڿggϞջ7S۷lބu`8~8?.\*ۆ~}0[Vh$=2Y.Vh*.rpӺ _>Sߟ.=qNְagäI]Wwko/~ =`e^h=5,l)j9hޝGU^g&aNdպ]>vwBjԶj mApA ڨ *(Lf2 I̹@mQI293Uqu>$FqIFQxs Iel&2e_Ng/))/_|IUQQAAp,2zsRx @;M.퓯̚6Os4_ҁ=KTHl"}7|͞3W]~JKKC= o~zz~6󇣳jy~{+srCP4O7}P?ZyWs|OP(31K 4ŝ;355 g@[)"f :.a|R}[.;h ;tH39wI캭ޠ$L*jF HI h㓟c? Ĩ#%Դ#FdYoԔcr'=眣+^}o3/~+}FwO']W?猭NvIۤ5)!|X0i[@iE=P7:H7EL:4}Rz80﷒R$3L^fw\!Rsg27f:M gܢ~uhT7ϼECGm'Ι($/j CǶ]4>8D >Cnө&dueǻ)O5n8fȌ00HD>C ==/Ȑ9goJ3Yx4JE0_ ~ϵ|RC%Nm2xhl !4`Wȴlv4nΦ=wfj566-[j>[E2l) 2jk׽jCA$1 /(gUԓO [oKIJRZl~_ӧ> -[9)#i 'E =S73d0IY:2qIϭ%=s:;N?#jtd-YϯTݓ|q/~jjjti3E7;LBEJI!S'pv_io"L]V@YYn]M6-Ϲ}___ѵ\- T*sN:4:0b ] !tD `0\R5I@8bNxbG{;k?u$9O8VԬYŞCE+2*'< hg?NWK4C:CO=UޘǙSSSSgЄxz$" 8n.+2ufbIٶCwfX IQ9㲺?N/H$4InzO_;p3O>w} ЌfHe" ) b'}W&e2@5j**>&: 'g]z9>sV^?~<Oqhb@֢pV-&i+IkX̺|3iH{kwuv4$ߖGB=uc!IE|ve2bRÆ 4$Cn] 1衒WΫs[omw+ ؀Þ(cwKvon6̈ IDATN,.x"OB+(I@}yL50 r=3~^*--uםy^---z{ 7WWNE%VdYh5p?db>5s/I%TgO^{Æ zݖ,JAɌ6#;w׊r29={gĪ89H;;O[9{y>yg5r&s}*evr%اH!u؈T<&#K.w{{YAoYq]bT?+yC*0K4$ ԨBj?\^[K,())e#cZ'板IO7&$IZbx,č? 3}`%1M6; zժ~d[[ߣͻކ.0<*ɱ I2p\]-!aYQٜ>: s@ nSNeĄjhh45d/I?>go}hy%*蓕+g&=$ruč)jVjkk5Ӆ})g9`-ZRȈ  LJ O U@iX:C3 u1=7n|SW\~)gs8GFr+\Z\Ө*?v/? g-)s6 r]~FXdsl}iIB~ LG]QxyVR=V߬ki8s)"=X99Fy^3a(p}cZos?t͸fsD\j-T7'-cHr~=bIeh JVN9snCv'pN߻J_Q*#xb$5ΎoŶ_*1bR}Hr4:p.7`pG w/L7ϸEn۶MB)B>DQwb@ϣhqwhW@re tW+Ynޮ;G5"(N@~w&?yKT=.0ߝZ& +e_]nN>q_"w |R:7f*Y)_drT= nwlؑ4SwK/>Ӛ|ZbȌE~")iqMWߦ⹔A;I& e4'|{9}O`Ȑ!әUPp7Q2h.0%QJG!@kѼ\رcu[y'uuv;ӝ @hd8nVgp+2?rR Ljrcpm+ 'NLԼv:_>]t1G饗t 'X)dYӶI`QϼbXu+>rdLQn8Bfn&kZ=U--x\_ZcɿO { #֭&wyy*{y,2ϦџL>: ;SoQgv*p`EOʖH DUZO51r&/\C̹Ʉ1t{`4:7I'x:c|+Y0]2g笑jfX\aٟrpm1n$F l EfԨQ>|D6쩟֦ix?gXiT^__tUhԦsmR >Lko۶Mw6l@:V:nH n9WAc>^!&o^7F/rVtOFdDZQswR /ܱ$4j=`^{wV^wF ˒E~")ӊP"iVdg+͕Sj:< 3& a5nx^-Ceu.|p< q6d3*%$g/k8|H*! ڄϰó+V,'05BVv ꗥhUp$KׂxN%8ok L6KJRp\]z5Jd)x* kٟ+yTZP_wP`ksAAl8aȔWd~i:aJ|Ȯ/d\ߓmSH]~xBm˘15P53?loospCʗˁ N4 ,ct?zPf\6eeed`fA 5^ 9|?knԬ#pH$C@? 7.YgT00\& 73 ^`Vhud ٍ3}RR7A{}/gT)'r)+l*MLɌ vKh1f O[_[mHYsza} Tl=z5=%q@])i]?s\-+FϤz:lB" ( %V2!p 7n5ioÖdubȻ7{Cd_ٯ뎫kt]RT{>@^zP`n3T'5ZGKopa(@6"<@ O1 =%P{:)\8Ǝtr'ؒLr Vqb,0+͚5-MmO[%iP>VuGr!"3MG@ 7CZJ<4HJ(LvuP-7ӌ>DBwтp!πX7fhdYO]Ktxi(JK1! e,B`iw'%cBZIlM`&*!w=zsk)Xx4AP6bmm+e2x<9$w _ǨH.0H9ϻbLJg+g@M _SR7I`Ai yD&񋸗OȘPF`7-Rz>(̚5-MEk곇 44s[*_.=Ǐsҁ$<[--- fS* s;x:&-O0sak} 0?|RK P؜6yyJF<,=)ӂii"H$J̿J@hN/2&7֐_Pt 1>,iI@ɝ^o7655CpYT!GQ;-^uT)|i_@p Tqf~\˻Y~oQupNW?tt>I@QCظqVI\ z!N$+sB'P\FUҹz! 2IPr $/z5r7w=){3ovQU{l0?ɜ3RnQ>G P4EI[ZZ+fI<&VXGf;:; 90J==MgN] gsGMrh e-IBW[" (h>?.%y.?8AäOH!$7=E־|*ӟ9]5kmT(iI F$T X[ۊM:YҿԒlݐo prn޴@vKob>yMqBs2b@$$5;)aNIgjj%gqsۜs3NJ$e:9\dM6oL1 9^ir#7L^ziOsS^QE@4t x+xy$i1KGWH'L@6ǒ|۠4r;g%pqjG%Msp e HWWV'!As-Y$ɡmKOsF]+0t~9L89H?$!2{Yҋ&ѽ=7l f͚I~8ahs:BR i!k4ܗ]}RR?d(_F ʺ;Ƥ=/(7d]T%z)[[NV9-E {>7-kh_ c}'H'-iI$U7v im.{z^p]K[J81b$]=HzY"x7KU5\#i掿eS$✎6~D7Bω%3@_wWC5#&7/̒; 5*H4wR]IӕLj%jV&5I׽=tAҭ'S:H$-5W;@ftڒ+!%tM :Ks<coLMBý-"Rm 2QHI d)}Y2M4MѰX"yCue$M=Fi,/'Wye$s򾍙6OQL(?}I{֜-H-ҸH¥fW$"G#Or*iI3}7qRۜ'cKښH"<sieGsv:٥" ߿RrZo5O0 n\\rIw4yNO:Eksyz>>ד6/ ՕewIvz2sD0%awOFM]{ٔ 9ɏѷ1~8S'M*ui527|7q")?Ei=;OR-U=mРQUIl.I9?DiV6ojZs%:i=c9jUG~uk=l9$ oҋ4ɻgMP썀˭#)3}V*BFf ws^걞<3Z( lnoT]Q=؅1 9 8<}.a_}]HiIfK܊+ m;$ݱeKA/ML Rzdz8hAvsuUyr:mx_kK$$CYzSF IDAT{qӾ{柰d>U cO j|o۶m}lƍ[bǪK׏Á^ȳi? nɖʹ2=Zns&3 YO2q 3wASSSQXͯ7mBCYӂֈw@xWܬTנx,+{n!IF=y%rT fw G]xlU<ܜlɋ~Ǝ$ tr@OgĚ[?#_&Dy_[eZ{sRwCZZ[\]Y~/==om ^K^g٤x+"vIJfsiXX~ 4}'92Pӽi8-vRu˷o Ne#l($'/-k2l^w}sz訅-_ΤIH"0Vєw[ƕ[kHW礿F?˙6i\m2ߴ@ m[83l_ RgEK`E۹Pʋ3ޝ$ST&rp\hi*i(IfIwYC͆5/ 0M49y]Uǚ={*ڪU'RQ<뱵uUMeENv/-A"89nZ"sw#b$s}=~9z"WHWI!/Ғ{Rf֔/ˁBjl߶qذG~͙.SoޒBȗqB b*6($E$<\/]sn 4r܁%Z.?"-w'y:'9"ф{N$k6gK*e3@g"&E/ji(y6u_2 k3"}'[;g3꺳j]#zޘ2z~_$|I$so2*I-Y&A4vI$]G*E,/,['&>~ Ⓘ9iK^1`_Lǚ$ENMf夵덚R.D yue$cZ>}z4WYIW>rU\`D_'ٌ~ WW-TUccDH[ɯ$ə2p@grټA7ra^C,z)Yf D#%ho9ӵ1VQ۸rEq 4ھU]U^-ϒBO(5Q@7jtIyv\uv^ݾ5os+I4_ErfHV_MhtKG$hglڴ0;uLvz$@jÓIwN$S_$5 Xk 5 {:گiMMMmD N^,0\` Ʃ,\*b-(!#ξȶ^i9I4}N]Mê%4viԒhrOҗAeɩ6$;}Ξyi, -2C[o՞-%}UM$4zoI$/,_#@'wē_l6|*2+ -L='R{Bfn\7x蛖Dښ&4 boa6N]TLzs^!`HG!":|! H&gcDћ^k`C'_UU3?K@"'XD]h\H-8L:8cۂsW$g9p`J6)/{>]>xdKͨnhSu z&X-pI`I$>?zyPisI,8 ޘw싏h#.+XRY!2rΛRn>5e4򮩩-H%r_X)AlY[۵`OԃknfvޔggfX֛2;ܰjZmƍo +Dڪtj"A/uʹoԒ uR<z}?`}%*@)qFWy~5#7ե.xKޯ05Ed?$ gF?r}U5* :Ab[cG`EǙ#_ /8d}ssOX&IxcSʛTo]59lps%VdN*o^]QI CIhI$o% d~Rz9g?ޖ~2oH9Cve|IW oD@iim_YY!O5D"בudr%a <)>󃕑! #zs3'dYˈ`k=P9O^7gnܰ] @mn_'qmQl-L{ gzo4$˜̮|dXh?Bݺ8Gov|9z4]xCBs$i'2M#wH;mg=bU]?*k[.ik0ܥ:%i" .B=5 A2S bɿIs7 Ru7+PmyQh4&iigiy%T@%7an5?%KI8GZev7lX2hת:gs4INJЭ-I&+X q#8𢩍;6mΚ7$S53a'U9(mm$+.x\CiMYxg6֙u12,~v6:5HnMIUMMM V$:nsߜ7e1"Ə֥W#4#v2wՏd{BƎLۏ}e,i99:FQ%Ogo  #*%`L!IENDB`MediaConch/Source/Resource/dropfiles_gray.png0000644000000000000000000001016013216666133020321 0ustar rootrootPNG  IHDRxsRGBbKGD pHYs  tIME )(B$IDATx?k[Yo*nU D@T Dŀ9łK.H9弄} SL2b<łSbb k{y0 K^GWU@-MO̒LlQX?ϒZ0IH4*>$9.Q@%0IdЯqwI֖`d璣,&Ir~N:'pGͳ$/ʟpS$~Ie9ئJ*ß]I>[ _?w; xw94I={ڗcl捤)@3"25I~hˢ>X ybѠe}8?ӬY/3:8Cv`S}~1-e >dT^5#Z@@|o ر %U#r`@@|o 83K{Ge%Aز_lЈ"AolR@+ZFd$YF=3eO74&?IəoL[&"Y?\b`e9ٲp3M2OiYvUp; 1_k^  @ @ @ @ @ @ @ @ @@mY$3⿯RmYE$$9)Q`Ivp_YrF3 Z=z`d@SI~LrTB@fI^75a$gcPebtT`oLJ|@zp;&I:@@56ϼ2t%4י'ynӀH\x >@@]xO@nM e|,p/ .l2'6n60} M8 @5pY` @ @ @ @ @ @ @ @@ @  @Ml/f=]6@ @@aБIyYoL/$&Y'Y? 4"ɳ2INRod@x)?I'9~>߻,~$:# e<ɏI%ykɩ$׿v&te@[v^o7,/񸵛7@s! 2/G&arޖ&ऄ@SYdlZNKE]]${=]"!?k~`(ÿt)|y:)ܳ]Y~k>+?qm7vЅQ^ p@owi d_`޶LJa$AFmt:98øدnin3 zOmJuHG}wp U?9C5L `p_~h魚8c`ھrY{=vSU99Neۿ++|ؾYĝJki: s*6"'pe3D<Ƿ38l RoTT*"cښwC.WR@_|ۈuy&޶ˆg"1,=[D>׮ӴtY `؎ݠU']?uI~ϧۯ >yzw2Á.U"nLȮmW7 P"0]u~d?b^9˃r?9$'٪8wIQ6|hE*gW?G|p\9#<@*Xc`%-#},= "v0`Yw"0ކ?Dd u5  +i#@ZG0`Y7"0^?  5d#G  9@v0`?D!~ k#@`8?D!~c#@P<$|d5x仲t=7 08?D`#@?D @`D? @`D? @`# 0 ,?DD? @`D? @`D? @`D?@ `D?@ `   0A"     @0A"  0A"  0A"Pm "T?0AE, @e`*PY "T?0AE, @e`*PY "T?0AE, @e`*PYPYʟ:PIENDB`MediaConch/Source/Resource/displays/0000755000000000000000000000000013216666133016434 5ustar rootrootMediaConch/Source/Resource/displays/MediaConchTextUnicode.xsl0000644000000000000000000001755213216666133023344 0ustar rootroot *************************** * 🐚 MediaConch report🐚 * *************************** ****************************************************************************** ************************* * Implementation Checks * ************************* ------------------------------------------------------------------------------ | Tests run: | Results: [❌ ] Fail count: [✅ ] Name: -- : : Offset: Context: Format ID: Reason: Outcome: Reason: * Policy Checks * Name: Description: Type: Outcome: Rules run: Fail count: Pass count: Name: Xpath: Outcome: Actual: Compared to: MediaConch/Source/Resource/displays/MediaConchXml.xsl0000644000000000000000000000000013216666133021625 0ustar rootrootMediaConch/Source/Resource/displays/MediaConchText.xsl0000644000000000000000000001751013216666133022027 0ustar rootroot ********************* * MediaConch report * ********************* ****************************************************************************** ************************* * Implementation Checks * ************************* ------------------------------------------------------------------------------ | Tests run: | Results: [X] Fail count: [O] Name: -- : : Offset: Context: Format ID: Reason: Outcome: Reason: * Policy Checks * Name: Description: Type: Outcome: Rules run: Fail count: Pass count: Name: Xpath: Outcome: Actual: Compared to: MediaConch/Source/Resource/displays/MediaConchHtml.xsl0000644000000000000000000003121213216666133022002 0ustar rootroot MediaConch

    🐚 MediaConch Report

    File:

    Compared to:

    Toggle all verbosity:
    Tests run: | Results: Fail count:
    Name:
    Results: (Reason: ) (Reason: )
    :
    Name:
    Offset:
    ID:
    Value context:
    Value:


    ❌ fail (Actual:) ✅ pass N/A

    Type: | Rules run: | Fail count: | Pass count:

    (Actual: )

    Value:
    Tracktype:
    Occurence:
    Operator:
    Actual:
    Compared to:
    Xpath:
    MediaConch/Source/Resource/displays/MediaConchSimple.xsl0000644000000000000000000000602413216666133022332 0ustar rootroot N/A pass fail ! -- -- [ : ] -- [ at bytes offset of ] -- [ : ] MediaConch/Source/Resource/displays/MediaConchCSV.xsl0000644000000000000000000000446013216666133021536 0ustar rootroot filename , overall , " " , , , pass fail \, MediaConch/Source/Resource/html/0000755000000000000000000000000013216666133015550 5ustar rootrootMediaConch/Source/Resource/html/formOnline.html0000644000000000000000000000416713216666133020556 0ustar rootroot
    MediaConch/Source/Resource/html/formRepository.html0000644000000000000000000000453113216666133021504 0ustar rootroot
    MediaConch/Source/Resource/html/js/0000755000000000000000000000000013216666133016164 5ustar rootrootMediaConch/Source/Resource/html/js/policy.js0000644000000000000000000003355513216666133020034 0ustar rootrootfunction initPage() { mcoMessage.init('#policyInfo div'); policyTree.init(); user.loadToken(); // Make buttons in policy rule form display inline // Duplicate button $('#xslPolicyRule_DuplicateRule').parent().addClass('xslPolicyRuleDuplicateButton'); $('#xslPolicyRuleMt_DuplicateRule').parent().addClass('xslPolicyRuleDuplicateButton'); // Save button $('#xslPolicyRule_SaveRule').parent().addClass('xslPolicyRuleSaveButton'); $('#xslPolicyRuleMt_SaveRule').parent().addClass('xslPolicyRuleSaveButton'); // Delete button $('#xslPolicyRule_DeleteRule').parent().addClass('xslPolicyRuleDeleteButton'); $('#xslPolicyRuleMt_DeleteRule').parent().addClass('xslPolicyRuleDeleteButton'); policyTreeAffix.init(); formBindings(); buttonBindings(); setSelect2Plugin(); policyEditHelp(); policyRuleHelp(); } function setSelect2Plugin() { // Use select2 jquery plugin $('#xslPolicyRule_trackType').select2({ theme: 'bootstrap', width: '100%', minimumResultsForSearch: Infinity }); $('#xslPolicyRule_validator').select2({ theme: 'bootstrap', width: '100%', minimumResultsForSearch: Infinity }); $('#xslPolicyRuleMt_validator').select2({ theme: 'bootstrap', width: '100%', minimumResultsForSearch: Infinity }); $('#xslPolicyRule_field').select2({ tags: true, theme: 'bootstrap', width: '100%' }); // Replace input text by select $('#xslPolicyRule_value').replaceWith(''+ * ''+ * ''+ * ''+ * ''+ * ''+ * ''+ * ' records' * } * } ); * } ); */ "sLengthMenu": "Show _MENU_ entries", /** * When using Ajax sourced data and during the first draw when DataTables is * gathering the data, this message is shown in an empty row in the table to * indicate to the end user the the data is being loaded. Note that this * parameter is not used when loading data by server-side processing, just * Ajax sourced data with client-side processing. * @type string * @default Loading... * * @dtopt Language * @name DataTable.defaults.language.loadingRecords * * @example * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "loadingRecords": "Please wait - loading..." * } * } ); * } ); */ "sLoadingRecords": "Loading...", /** * Text which is displayed when the table is processing a user action * (usually a sort command or similar). * @type string * @default Processing... * * @dtopt Language * @name DataTable.defaults.language.processing * * @example * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "processing": "DataTables is currently busy" * } * } ); * } ); */ "sProcessing": "Processing...", /** * Details the actions that will be taken when the user types into the * filtering input text box. The variable "_INPUT_", if used in the string, * is replaced with the HTML text box for the filtering input allowing * control over where it appears in the string. If "_INPUT_" is not given * then the input box is appended to the string automatically. * @type string * @default Search: * * @dtopt Language * @name DataTable.defaults.language.search * * @example * // Input text box will be appended at the end automatically * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "search": "Filter records:" * } * } ); * } ); * * @example * // Specify where the filter should appear * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "search": "Apply filter _INPUT_ to table" * } * } ); * } ); */ "sSearch": "Search:", /** * Assign a `placeholder` attribute to the search `input` element * @type string * @default * * @dtopt Language * @name DataTable.defaults.language.searchPlaceholder */ "sSearchPlaceholder": "", /** * All of the language information can be stored in a file on the * server-side, which DataTables will look up if this parameter is passed. * It must store the URL of the language file, which is in a JSON format, * and the object has the same properties as the oLanguage object in the * initialiser object (i.e. the above parameters). Please refer to one of * the example language files to see how this works in action. * @type string * @default Empty string - i.e. disabled * * @dtopt Language * @name DataTable.defaults.language.url * * @example * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "url": "http://www.sprymedia.co.uk/dataTables/lang.txt" * } * } ); * } ); */ "sUrl": "", /** * Text shown inside the table records when the is no information to be * displayed after filtering. `emptyTable` is shown when there is simply no * information in the table at all (regardless of filtering). * @type string * @default No matching records found * * @dtopt Language * @name DataTable.defaults.language.zeroRecords * * @example * $(document).ready( function() { * $('#example').dataTable( { * "language": { * "zeroRecords": "No records to display" * } * } ); * } ); */ "sZeroRecords": "No matching records found" }, /** * This parameter allows you to have define the global filtering state at * initialisation time. As an object the `search` parameter must be * defined, but all other parameters are optional. When `regex` is true, * the search string will be treated as a regular expression, when false * (default) it will be treated as a straight string. When `smart` * DataTables will use it's smart filtering methods (to word match at * any point in the data), when false this will not be done. * @namespace * @extends DataTable.models.oSearch * * @dtopt Options * @name DataTable.defaults.search * * @example * $(document).ready( function() { * $('#example').dataTable( { * "search": {"search": "Initial search"} * } ); * } ) */ "oSearch": $.extend( {}, DataTable.models.oSearch ), /** * __Deprecated__ The functionality provided by this parameter has now been * superseded by that provided through `ajax`, which should be used instead. * * By default DataTables will look for the property `data` (or `aaData` for * compatibility with DataTables 1.9-) when obtaining data from an Ajax * source or for server-side processing - this parameter allows that * property to be changed. You can use Javascript dotted object notation to * get a data source for multiple levels of nesting. * @type string * @default data * * @dtopt Options * @dtopt Server-side * @name DataTable.defaults.ajaxDataProp * * @deprecated 1.10. Please use `ajax` for this functionality now. */ "sAjaxDataProp": "data", /** * __Deprecated__ The functionality provided by this parameter has now been * superseded by that provided through `ajax`, which should be used instead. * * You can instruct DataTables to load data from an external * source using this parameter (use aData if you want to pass data in you * already have). Simply provide a url a JSON object can be obtained from. * @type string * @default null * * @dtopt Options * @dtopt Server-side * @name DataTable.defaults.ajaxSource * * @deprecated 1.10. Please use `ajax` for this functionality now. */ "sAjaxSource": null, /** * This initialisation variable allows you to specify exactly where in the * DOM you want DataTables to inject the various controls it adds to the page * (for example you might want the pagination controls at the top of the * table). DIV elements (with or without a custom class) can also be added to * aid styling. The follow syntax is used: *
      *
    • The following options are allowed: *
        *
      • 'l' - Length changing
      • *
      • 'f' - Filtering input
      • *
      • 't' - The table!
      • *
      • 'i' - Information
      • *
      • 'p' - Pagination
      • *
      • 'r' - pRocessing
      • *
      *
    • *
    • The following constants are allowed: *
        *
      • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
      • *
      • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
      • *
      *
    • *
    • The following syntax is expected: *
        *
      • '<' and '>' - div elements
      • *
      • '<"class" and '>' - div with a class
      • *
      • '<"#id" and '>' - div with an ID
      • *
      *
    • *
    • Examples: *
        *
      • '<"wrapper"flipt>'
      • *
      • '<lf<t>ip>'
      • *
      *
    • *
    * @type string * @default lfrtip (when `jQueryUI` is false) or * <"H"lfr>t<"F"ip> (when `jQueryUI` is true) * * @dtopt Options * @name DataTable.defaults.dom * * @example * $(document).ready( function() { * $('#example').dataTable( { * "dom": '<"top"i>rt<"bottom"flp><"clear">' * } ); * } ); */ "sDom": "lfrtip", /** * Search delay option. This will throttle full table searches that use the * DataTables provided search input element (it does not effect calls to * `dt-api search()`, providing a delay before the search is made. * @type integer * @default 0 * * @dtopt Options * @name DataTable.defaults.searchDelay * * @example * $(document).ready( function() { * $('#example').dataTable( { * "searchDelay": 200 * } ); * } ) */ "searchDelay": null, /** * DataTables features six different built-in options for the buttons to * display for pagination control: * * * `numbers` - Page number buttons only * * `simple` - 'Previous' and 'Next' buttons only * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers * * Further methods can be added using {@link DataTable.ext.oPagination}. * @type string * @default simple_numbers * * @dtopt Options * @name DataTable.defaults.pagingType * * @example * $(document).ready( function() { * $('#example').dataTable( { * "pagingType": "full_numbers" * } ); * } ) */ "sPaginationType": "simple_numbers", /** * Enable horizontal scrolling. When a table is too wide to fit into a * certain layout, or you have a large number of columns in the table, you * can enable x-scrolling to show the table in a viewport, which can be * scrolled. This property can be `true` which will allow the table to * scroll horizontally when needed, or any CSS unit, or a number (in which * case it will be treated as a pixel measurement). Setting as simply `true` * is recommended. * @type boolean|string * @default blank string - i.e. disabled * * @dtopt Features * @name DataTable.defaults.scrollX * * @example * $(document).ready( function() { * $('#example').dataTable( { * "scrollX": true, * "scrollCollapse": true * } ); * } ); */ "sScrollX": "", /** * This property can be used to force a DataTable to use more width than it * might otherwise do when x-scrolling is enabled. For example if you have a * table which requires to be well spaced, this parameter is useful for * "over-sizing" the table, and thus forcing scrolling. This property can by * any CSS unit, or a number (in which case it will be treated as a pixel * measurement). * @type string * @default blank string - i.e. disabled * * @dtopt Options * @name DataTable.defaults.scrollXInner * * @example * $(document).ready( function() { * $('#example').dataTable( { * "scrollX": "100%", * "scrollXInner": "110%" * } ); * } ); */ "sScrollXInner": "", /** * Enable vertical scrolling. Vertical scrolling will constrain the DataTable * to the given height, and enable scrolling for any data which overflows the * current viewport. This can be used as an alternative to paging to display * a lot of data in a small area (although paging and scrolling can both be * enabled at the same time). This property can be any CSS unit, or a number * (in which case it will be treated as a pixel measurement). * @type string * @default blank string - i.e. disabled * * @dtopt Features * @name DataTable.defaults.scrollY * * @example * $(document).ready( function() { * $('#example').dataTable( { * "scrollY": "200px", * "paginate": false * } ); * } ); */ "sScrollY": "", /** * __Deprecated__ The functionality provided by this parameter has now been * superseded by that provided through `ajax`, which should be used instead. * * Set the HTTP method that is used to make the Ajax call for server-side * processing or Ajax sourced data. * @type string * @default GET * * @dtopt Options * @dtopt Server-side * @name DataTable.defaults.serverMethod * * @deprecated 1.10. Please use `ajax` for this functionality now. */ "sServerMethod": "GET", /** * DataTables makes use of renderers when displaying HTML elements for * a table. These renderers can be added or modified by plug-ins to * generate suitable mark-up for a site. For example the Bootstrap * integration plug-in for DataTables uses a paging button renderer to * display pagination buttons in the mark-up required by Bootstrap. * * For further information about the renderers available see * DataTable.ext.renderer * @type string|object * @default null * * @name DataTable.defaults.renderer * */ "renderer": null, /** * Set the data property name that DataTables should use to get a row's id * to set as the `id` property in the node. * @type string * @default DT_RowId * * @name DataTable.defaults.rowId */ "rowId": "DT_RowId" }; _fnHungarianMap( DataTable.defaults ); /* * Developer note - See note in model.defaults.js about the use of Hungarian * notation and camel case. */ /** * Column options that can be given to DataTables at initialisation time. * @namespace */ DataTable.defaults.column = { /** * Define which column(s) an order will occur on for this column. This * allows a column's ordering to take multiple columns into account when * doing a sort or use the data from a different column. For example first * name / last name columns make sense to do a multi-column sort over the * two columns. * @type array|int * @default null Takes the value of the column index automatically * * @name DataTable.defaults.column.orderData * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "orderData": [ 0, 1 ], "targets": [ 0 ] }, * { "orderData": [ 1, 0 ], "targets": [ 1 ] }, * { "orderData": 2, "targets": [ 2 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "orderData": [ 0, 1 ] }, * { "orderData": [ 1, 0 ] }, * { "orderData": 2 }, * null, * null * ] * } ); * } ); */ "aDataSort": null, "iDataSort": -1, /** * You can control the default ordering direction, and even alter the * behaviour of the sort handler (i.e. only allow ascending ordering etc) * using this parameter. * @type array * @default [ 'asc', 'desc' ] * * @name DataTable.defaults.column.orderSequence * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "orderSequence": [ "asc" ], "targets": [ 1 ] }, * { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] }, * { "orderSequence": [ "desc" ], "targets": [ 3 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * null, * { "orderSequence": [ "asc" ] }, * { "orderSequence": [ "desc", "asc", "asc" ] }, * { "orderSequence": [ "desc" ] }, * null * ] * } ); * } ); */ "asSorting": [ 'asc', 'desc' ], /** * Enable or disable filtering on the data in this column. * @type boolean * @default true * * @name DataTable.defaults.column.searchable * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "searchable": false, "targets": [ 0 ] } * ] } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "searchable": false }, * null, * null, * null, * null * ] } ); * } ); */ "bSearchable": true, /** * Enable or disable ordering on this column. * @type boolean * @default true * * @name DataTable.defaults.column.orderable * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "orderable": false, "targets": [ 0 ] } * ] } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "orderable": false }, * null, * null, * null, * null * ] } ); * } ); */ "bSortable": true, /** * Enable or disable the display of this column. * @type boolean * @default true * * @name DataTable.defaults.column.visible * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "visible": false, "targets": [ 0 ] } * ] } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "visible": false }, * null, * null, * null, * null * ] } ); * } ); */ "bVisible": true, /** * Developer definable function that is called whenever a cell is created (Ajax source, * etc) or processed for input (DOM source). This can be used as a compliment to mRender * allowing you to modify the DOM element (add background colour for example) when the * element is available. * @type function * @param {element} td The TD node that has been created * @param {*} cellData The Data for the cell * @param {array|object} rowData The data for the whole row * @param {int} row The row index for the aoData data store * @param {int} col The column index for aoColumns * * @name DataTable.defaults.column.createdCell * @dtopt Columns * * @example * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [3], * "createdCell": function (td, cellData, rowData, row, col) { * if ( cellData == "1.7" ) { * $(td).css('color', 'blue') * } * } * } ] * }); * } ); */ "fnCreatedCell": null, /** * This parameter has been replaced by `data` in DataTables to ensure naming * consistency. `dataProp` can still be used, as there is backwards * compatibility in DataTables for this option, but it is strongly * recommended that you use `data` in preference to `dataProp`. * @name DataTable.defaults.column.dataProp */ /** * This property can be used to read data from any data source property, * including deeply nested objects / properties. `data` can be given in a * number of different ways which effect its behaviour: * * * `integer` - treated as an array index for the data source. This is the * default that DataTables uses (incrementally increased for each column). * * `string` - read an object property from the data source. There are * three 'special' options that can be used in the string to alter how * DataTables reads the data from the source object: * * `.` - Dotted Javascript notation. Just as you use a `.` in * Javascript to read from nested objects, so to can the options * specified in `data`. For example: `browser.version` or * `browser.name`. If your object parameter name contains a period, use * `\\` to escape it - i.e. `first\\.name`. * * `[]` - Array notation. DataTables can automatically combine data * from and array source, joining the data with the characters provided * between the two brackets. For example: `name[, ]` would provide a * comma-space separated list from the source array. If no characters * are provided between the brackets, the original array source is * returned. * * `()` - Function notation. Adding `()` to the end of a parameter will * execute a function of the name given. For example: `browser()` for a * simple function on the data source, `browser.version()` for a * function in a nested property or even `browser().version` to get an * object property if the function called returns an object. Note that * function notation is recommended for use in `render` rather than * `data` as it is much simpler to use as a renderer. * * `null` - use the original data source for the row rather than plucking * data directly from it. This action has effects on two other * initialisation options: * * `defaultContent` - When null is given as the `data` option and * `defaultContent` is specified for the column, the value defined by * `defaultContent` will be used for the cell. * * `render` - When null is used for the `data` option and the `render` * option is specified for the column, the whole data source for the * row is used for the renderer. * * `function` - the function given will be executed whenever DataTables * needs to set or get the data for a cell in the column. The function * takes three parameters: * * Parameters: * * `{array|object}` The data source for the row * * `{string}` The type call data requested - this will be 'set' when * setting data or 'filter', 'display', 'type', 'sort' or undefined * when gathering data. Note that when `undefined` is given for the * type DataTables expects to get the raw data for the object back< * * `{*}` Data to set when the second parameter is 'set'. * * Return: * * The return value from the function is not required when 'set' is * the type of call, but otherwise the return is what will be used * for the data requested. * * Note that `data` is a getter and setter option. If you just require * formatting of data for output, you will likely want to use `render` which * is simply a getter and thus simpler to use. * * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The * name change reflects the flexibility of this property and is consistent * with the naming of mRender. If 'mDataProp' is given, then it will still * be used by DataTables, as it automatically maps the old name to the new * if required. * * @type string|int|function|null * @default null Use automatically calculated column index * * @name DataTable.defaults.column.data * @dtopt Columns * * @example * // Read table data from objects * // JSON structure for each row: * // { * // "engine": {value}, * // "browser": {value}, * // "platform": {value}, * // "version": {value}, * // "grade": {value} * // } * $(document).ready( function() { * $('#example').dataTable( { * "ajaxSource": "sources/objects.txt", * "columns": [ * { "data": "engine" }, * { "data": "browser" }, * { "data": "platform" }, * { "data": "version" }, * { "data": "grade" } * ] * } ); * } ); * * @example * // Read information from deeply nested objects * // JSON structure for each row: * // { * // "engine": {value}, * // "browser": {value}, * // "platform": { * // "inner": {value} * // }, * // "details": [ * // {value}, {value} * // ] * // } * $(document).ready( function() { * $('#example').dataTable( { * "ajaxSource": "sources/deep.txt", * "columns": [ * { "data": "engine" }, * { "data": "browser" }, * { "data": "platform.inner" }, * { "data": "platform.details.0" }, * { "data": "platform.details.1" } * ] * } ); * } ); * * @example * // Using `data` as a function to provide different information for * // sorting, filtering and display. In this case, currency (price) * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": function ( source, type, val ) { * if (type === 'set') { * source.price = val; * // Store the computed dislay and filter values for efficiency * source.price_display = val=="" ? "" : "$"+numberFormat(val); * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; * return; * } * else if (type === 'display') { * return source.price_display; * } * else if (type === 'filter') { * return source.price_filter; * } * // 'sort', 'type' and undefined all just use the integer * return source.price; * } * } ] * } ); * } ); * * @example * // Using default content * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": null, * "defaultContent": "Click to edit" * } ] * } ); * } ); * * @example * // Using array notation - outputting a list from an array * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": "name[, ]" * } ] * } ); * } ); * */ "mData": null, /** * This property is the rendering partner to `data` and it is suggested that * when you want to manipulate data for display (including filtering, * sorting etc) without altering the underlying data for the table, use this * property. `render` can be considered to be the the read only companion to * `data` which is read / write (then as such more complex). Like `data` * this option can be given in a number of different ways to effect its * behaviour: * * * `integer` - treated as an array index for the data source. This is the * default that DataTables uses (incrementally increased for each column). * * `string` - read an object property from the data source. There are * three 'special' options that can be used in the string to alter how * DataTables reads the data from the source object: * * `.` - Dotted Javascript notation. Just as you use a `.` in * Javascript to read from nested objects, so to can the options * specified in `data`. For example: `browser.version` or * `browser.name`. If your object parameter name contains a period, use * `\\` to escape it - i.e. `first\\.name`. * * `[]` - Array notation. DataTables can automatically combine data * from and array source, joining the data with the characters provided * between the two brackets. For example: `name[, ]` would provide a * comma-space separated list from the source array. If no characters * are provided between the brackets, the original array source is * returned. * * `()` - Function notation. Adding `()` to the end of a parameter will * execute a function of the name given. For example: `browser()` for a * simple function on the data source, `browser.version()` for a * function in a nested property or even `browser().version` to get an * object property if the function called returns an object. * * `object` - use different data for the different data types requested by * DataTables ('filter', 'display', 'type' or 'sort'). The property names * of the object is the data type the property refers to and the value can * defined using an integer, string or function using the same rules as * `render` normally does. Note that an `_` option _must_ be specified. * This is the default value to use if you haven't specified a value for * the data type requested by DataTables. * * `function` - the function given will be executed whenever DataTables * needs to set or get the data for a cell in the column. The function * takes three parameters: * * Parameters: * * {array|object} The data source for the row (based on `data`) * * {string} The type call data requested - this will be 'filter', * 'display', 'type' or 'sort'. * * {array|object} The full data source for the row (not based on * `data`) * * Return: * * The return value from the function is what will be used for the * data requested. * * @type string|int|function|object|null * @default null Use the data source value. * * @name DataTable.defaults.column.render * @dtopt Columns * * @example * // Create a comma separated list from an array of objects * $(document).ready( function() { * $('#example').dataTable( { * "ajaxSource": "sources/deep.txt", * "columns": [ * { "data": "engine" }, * { "data": "browser" }, * { * "data": "platform", * "render": "[, ].name" * } * ] * } ); * } ); * * @example * // Execute a function to obtain data * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": null, // Use the full data source object for the renderer's source * "render": "browserName()" * } ] * } ); * } ); * * @example * // As an object, extracting different data for the different types * // This would be used with a data source such as: * // { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" } * // Here the `phone` integer is used for sorting and type detection, while `phone_filter` * // (which has both forms) is used for filtering for if a user inputs either format, while * // the formatted phone number is the one that is shown in the table. * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": null, // Use the full data source object for the renderer's source * "render": { * "_": "phone", * "filter": "phone_filter", * "display": "phone_display" * } * } ] * } ); * } ); * * @example * // Use as a function to create a link from the data source * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "data": "download_link", * "render": function ( data, type, full ) { * return '
    Download'; * } * } ] * } ); * } ); */ "mRender": null, /** * Change the cell type created for the column - either TD cells or TH cells. This * can be useful as TH cells have semantic meaning in the table body, allowing them * to act as a header for a row (you may wish to add scope='row' to the TH elements). * @type string * @default td * * @name DataTable.defaults.column.cellType * @dtopt Columns * * @example * // Make the first column use TH cells * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ { * "targets": [ 0 ], * "cellType": "th" * } ] * } ); * } ); */ "sCellType": "td", /** * Class to give to each cell in this column. * @type string * @default Empty string * * @name DataTable.defaults.column.class * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "class": "my_class", "targets": [ 0 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "class": "my_class" }, * null, * null, * null, * null * ] * } ); * } ); */ "sClass": "", /** * When DataTables calculates the column widths to assign to each column, * it finds the longest string in each column and then constructs a * temporary table and reads the widths from that. The problem with this * is that "mmm" is much wider then "iiii", but the latter is a longer * string - thus the calculation can go wrong (doing it properly and putting * it into an DOM object and measuring that is horribly(!) slow). Thus as * a "work around" we provide this option. It will append its value to the * text that is found to be the longest string for the column - i.e. padding. * Generally you shouldn't need this! * @type string * @default Empty string * * @name DataTable.defaults.column.contentPadding * @dtopt Columns * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * null, * null, * null, * { * "contentPadding": "mmm" * } * ] * } ); * } ); */ "sContentPadding": "", /** * Allows a default value to be given for a column's data, and will be used * whenever a null data source is encountered (this can be because `data` * is set to null, or because the data source itself is null). * @type string * @default null * * @name DataTable.defaults.column.defaultContent * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { * "data": null, * "defaultContent": "Edit", * "targets": [ -1 ] * } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * null, * null, * null, * { * "data": null, * "defaultContent": "Edit" * } * ] * } ); * } ); */ "sDefaultContent": null, /** * This parameter is only used in DataTables' server-side processing. It can * be exceptionally useful to know what columns are being displayed on the * client side, and to map these to database fields. When defined, the names * also allow DataTables to reorder information from the server if it comes * back in an unexpected order (i.e. if you switch your columns around on the * client-side, your server-side code does not also need updating). * @type string * @default Empty string * * @name DataTable.defaults.column.name * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "name": "engine", "targets": [ 0 ] }, * { "name": "browser", "targets": [ 1 ] }, * { "name": "platform", "targets": [ 2 ] }, * { "name": "version", "targets": [ 3 ] }, * { "name": "grade", "targets": [ 4 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "name": "engine" }, * { "name": "browser" }, * { "name": "platform" }, * { "name": "version" }, * { "name": "grade" } * ] * } ); * } ); */ "sName": "", /** * Defines a data source type for the ordering which can be used to read * real-time information from the table (updating the internally cached * version) prior to ordering. This allows ordering to occur on user * editable elements such as form inputs. * @type string * @default std * * @name DataTable.defaults.column.orderDataType * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "orderDataType": "dom-text", "targets": [ 2, 3 ] }, * { "type": "numeric", "targets": [ 3 ] }, * { "orderDataType": "dom-select", "targets": [ 4 ] }, * { "orderDataType": "dom-checkbox", "targets": [ 5 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * null, * null, * { "orderDataType": "dom-text" }, * { "orderDataType": "dom-text", "type": "numeric" }, * { "orderDataType": "dom-select" }, * { "orderDataType": "dom-checkbox" } * ] * } ); * } ); */ "sSortDataType": "std", /** * The title of this column. * @type string * @default null Derived from the 'TH' value for this column in the * original HTML table. * * @name DataTable.defaults.column.title * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "title": "My column title", "targets": [ 0 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "title": "My column title" }, * null, * null, * null, * null * ] * } ); * } ); */ "sTitle": null, /** * The type allows you to specify how the data for this column will be * ordered. Four types (string, numeric, date and html (which will strip * HTML tags before ordering)) are currently available. Note that only date * formats understood by Javascript's Date() object will be accepted as type * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string', * 'numeric', 'date' or 'html' (by default). Further types can be adding * through plug-ins. * @type string * @default null Auto-detected from raw data * * @name DataTable.defaults.column.type * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "type": "html", "targets": [ 0 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "type": "html" }, * null, * null, * null, * null * ] * } ); * } ); */ "sType": null, /** * Defining the width of the column, this parameter may take any CSS value * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not * been given a specific width through this interface ensuring that the table * remains readable. * @type string * @default null Automatic * * @name DataTable.defaults.column.width * @dtopt Columns * * @example * // Using `columnDefs` * $(document).ready( function() { * $('#example').dataTable( { * "columnDefs": [ * { "width": "20%", "targets": [ 0 ] } * ] * } ); * } ); * * @example * // Using `columns` * $(document).ready( function() { * $('#example').dataTable( { * "columns": [ * { "width": "20%" }, * null, * null, * null, * null * ] * } ); * } ); */ "sWidth": null }; _fnHungarianMap( DataTable.defaults.column ); /** * DataTables settings object - this holds all the information needed for a * given table, including configuration, data and current application of the * table options. DataTables does not have a single instance for each DataTable * with the settings attached to that instance, but rather instances of the * DataTable "class" are created on-the-fly as needed (typically by a * $().dataTable() call) and the settings object is then applied to that * instance. * * Note that this object is related to {@link DataTable.defaults} but this * one is the internal data store for DataTables's cache of columns. It should * NOT be manipulated outside of DataTables. Any configuration should be done * through the initialisation options. * @namespace * @todo Really should attach the settings object to individual instances so we * don't need to create new instances on each $().dataTable() call (if the * table already exists). It would also save passing oSettings around and * into every single function. However, this is a very significant * architecture change for DataTables and will almost certainly break * backwards compatibility with older installations. This is something that * will be done in 2.0. */ DataTable.models.oSettings = { /** * Primary features of DataTables and their enablement state. * @namespace */ "oFeatures": { /** * Flag to say if DataTables should automatically try to calculate the * optimum table and columns widths (true) or not (false). * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bAutoWidth": null, /** * Delay the creation of TR and TD elements until they are actually * needed by a driven page draw. This can give a significant speed * increase for Ajax source and Javascript source data, but makes no * difference at all fro DOM and server-side processing tables. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bDeferRender": null, /** * Enable filtering on the table or not. Note that if this is disabled * then there is no filtering at all on the table, including fnFilter. * To just remove the filtering input use sDom and remove the 'f' option. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bFilter": null, /** * Table information element (the 'Showing x of y records' div) enable * flag. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bInfo": null, /** * Present a user control allowing the end user to change the page size * when pagination is enabled. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bLengthChange": null, /** * Pagination enabled or not. Note that if this is disabled then length * changing must also be disabled. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bPaginate": null, /** * Processing indicator enable flag whenever DataTables is enacting a * user request - typically an Ajax request for server-side processing. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bProcessing": null, /** * Server-side processing enabled flag - when enabled DataTables will * get all data from the server for every draw - there is no filtering, * sorting or paging done on the client-side. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bServerSide": null, /** * Sorting enablement flag. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bSort": null, /** * Multi-column sorting * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bSortMulti": null, /** * Apply a class to the columns which are being sorted to provide a * visual highlight or not. This can slow things down when enabled since * there is a lot of DOM interaction. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bSortClasses": null, /** * State saving enablement flag. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bStateSave": null }, /** * Scrolling settings for a table. * @namespace */ "oScroll": { /** * When the table is shorter in height than sScrollY, collapse the * table container down to the height of the table (when true). * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bCollapse": null, /** * Width of the scrollbar for the web-browser's platform. Calculated * during table initialisation. * @type int * @default 0 */ "iBarWidth": 0, /** * Viewport width for horizontal scrolling. Horizontal scrolling is * disabled if an empty string. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string */ "sX": null, /** * Width to expand the table to when using x-scrolling. Typically you * should not need to use this. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string * @deprecated */ "sXInner": null, /** * Viewport height for vertical scrolling. Vertical scrolling is disabled * if an empty string. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string */ "sY": null }, /** * Language information for the table. * @namespace * @extends DataTable.defaults.oLanguage */ "oLanguage": { /** * Information callback function. See * {@link DataTable.defaults.fnInfoCallback} * @type function * @default null */ "fnInfoCallback": null }, /** * Browser support parameters * @namespace */ "oBrowser": { /** * Indicate if the browser incorrectly calculates width:100% inside a * scrolling element (IE6/7) * @type boolean * @default false */ "bScrollOversize": false, /** * Determine if the vertical scrollbar is on the right or left of the * scrolling container - needed for rtl language layout, although not * all browsers move the scrollbar (Safari). * @type boolean * @default false */ "bScrollbarLeft": false, /** * Flag for if `getBoundingClientRect` is fully supported or not * @type boolean * @default false */ "bBounding": false, /** * Browser scrollbar width * @type integer * @default 0 */ "barWidth": 0 }, "ajax": null, /** * Array referencing the nodes which are used for the features. The * parameters of this object match what is allowed by sDom - i.e. *
      *
    • 'l' - Length changing
    • *
    • 'f' - Filtering input
    • *
    • 't' - The table!
    • *
    • 'i' - Information
    • *
    • 'p' - Pagination
    • *
    • 'r' - pRocessing
    • *
    * @type array * @default [] */ "aanFeatures": [], /** * Store data information - see {@link DataTable.models.oRow} for detailed * information. * @type array * @default [] */ "aoData": [], /** * Array of indexes which are in the current display (after filtering etc) * @type array * @default [] */ "aiDisplay": [], /** * Array of indexes for display - no filtering * @type array * @default [] */ "aiDisplayMaster": [], /** * Map of row ids to data indexes * @type object * @default {} */ "aIds": {}, /** * Store information about each column that is in use * @type array * @default [] */ "aoColumns": [], /** * Store information about the table's header * @type array * @default [] */ "aoHeader": [], /** * Store information about the table's footer * @type array * @default [] */ "aoFooter": [], /** * Store the applied global search information in case we want to force a * research or compare the old search to a new one. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @namespace * @extends DataTable.models.oSearch */ "oPreviousSearch": {}, /** * Store the applied search for each column - see * {@link DataTable.models.oSearch} for the format that is used for the * filtering information for each column. * @type array * @default [] */ "aoPreSearchCols": [], /** * Sorting that is applied to the table. Note that the inner arrays are * used in the following manner: *
      *
    • Index 0 - column number
    • *
    • Index 1 - current sorting direction
    • *
    * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type array * @todo These inner arrays should really be objects */ "aaSorting": null, /** * Sorting that is always applied to the table (i.e. prefixed in front of * aaSorting). * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type array * @default [] */ "aaSortingFixed": [], /** * Classes to use for the striping of a table. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type array * @default [] */ "asStripeClasses": null, /** * If restoring a table - we should restore its striping classes as well * @type array * @default [] */ "asDestroyStripes": [], /** * If restoring a table - we should restore its width * @type int * @default 0 */ "sDestroyWidth": 0, /** * Callback functions array for every time a row is inserted (i.e. on a draw). * @type array * @default [] */ "aoRowCallback": [], /** * Callback functions for the header on each draw. * @type array * @default [] */ "aoHeaderCallback": [], /** * Callback function for the footer on each draw. * @type array * @default [] */ "aoFooterCallback": [], /** * Array of callback functions for draw callback functions * @type array * @default [] */ "aoDrawCallback": [], /** * Array of callback functions for row created function * @type array * @default [] */ "aoRowCreatedCallback": [], /** * Callback functions for just before the table is redrawn. A return of * false will be used to cancel the draw. * @type array * @default [] */ "aoPreDrawCallback": [], /** * Callback functions for when the table has been initialised. * @type array * @default [] */ "aoInitComplete": [], /** * Callbacks for modifying the settings to be stored for state saving, prior to * saving state. * @type array * @default [] */ "aoStateSaveParams": [], /** * Callbacks for modifying the settings that have been stored for state saving * prior to using the stored values to restore the state. * @type array * @default [] */ "aoStateLoadParams": [], /** * Callbacks for operating on the settings object once the saved state has been * loaded * @type array * @default [] */ "aoStateLoaded": [], /** * Cache the table ID for quick access * @type string * @default Empty string */ "sTableId": "", /** * The TABLE node for the main table * @type node * @default null */ "nTable": null, /** * Permanent ref to the thead element * @type node * @default null */ "nTHead": null, /** * Permanent ref to the tfoot element - if it exists * @type node * @default null */ "nTFoot": null, /** * Permanent ref to the tbody element * @type node * @default null */ "nTBody": null, /** * Cache the wrapper node (contains all DataTables controlled elements) * @type node * @default null */ "nTableWrapper": null, /** * Indicate if when using server-side processing the loading of data * should be deferred until the second draw. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean * @default false */ "bDeferLoading": false, /** * Indicate if all required information has been read in * @type boolean * @default false */ "bInitialised": false, /** * Information about open rows. Each object in the array has the parameters * 'nTr' and 'nParent' * @type array * @default [] */ "aoOpenRows": [], /** * Dictate the positioning of DataTables' control elements - see * {@link DataTable.model.oInit.sDom}. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string * @default null */ "sDom": null, /** * Search delay (in mS) * @type integer * @default null */ "searchDelay": null, /** * Which type of pagination should be used. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string * @default two_button */ "sPaginationType": "two_button", /** * The state duration (for `stateSave`) in seconds. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type int * @default 0 */ "iStateDuration": 0, /** * Array of callback functions for state saving. Each array element is an * object with the following parameters: *
      *
    • function:fn - function to call. Takes two parameters, oSettings * and the JSON string to save that has been thus far created. Returns * a JSON string to be inserted into a json object * (i.e. '"param": [ 0, 1, 2]')
    • *
    • string:sName - name of callback
    • *
    * @type array * @default [] */ "aoStateSave": [], /** * Array of callback functions for state loading. Each array element is an * object with the following parameters: *
      *
    • function:fn - function to call. Takes two parameters, oSettings * and the object stored. May return false to cancel state loading
    • *
    • string:sName - name of callback
    • *
    * @type array * @default [] */ "aoStateLoad": [], /** * State that was saved. Useful for back reference * @type object * @default null */ "oSavedState": null, /** * State that was loaded. Useful for back reference * @type object * @default null */ "oLoadedState": null, /** * Source url for AJAX data for the table. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string * @default null */ "sAjaxSource": null, /** * Property from a given object from which to read the table data from. This * can be an empty string (when not server-side processing), in which case * it is assumed an an array is given directly. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string */ "sAjaxDataProp": null, /** * Note if draw should be blocked while getting data * @type boolean * @default true */ "bAjaxDataGet": true, /** * The last jQuery XHR object that was used for server-side data gathering. * This can be used for working with the XHR information in one of the * callbacks * @type object * @default null */ "jqXHR": null, /** * JSON returned from the server in the last Ajax request * @type object * @default undefined */ "json": undefined, /** * Data submitted as part of the last Ajax request * @type object * @default undefined */ "oAjaxData": undefined, /** * Function to get the server-side data. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type function */ "fnServerData": null, /** * Functions which are called prior to sending an Ajax request so extra * parameters can easily be sent to the server * @type array * @default [] */ "aoServerParams": [], /** * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if * required). * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type string */ "sServerMethod": null, /** * Format numbers for display. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type function */ "fnFormatNumber": null, /** * List of options that can be used for the user selectable length menu. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type array * @default [] */ "aLengthMenu": null, /** * Counter for the draws that the table does. Also used as a tracker for * server-side processing * @type int * @default 0 */ "iDraw": 0, /** * Indicate if a redraw is being done - useful for Ajax * @type boolean * @default false */ "bDrawing": false, /** * Draw index (iDraw) of the last error when parsing the returned data * @type int * @default -1 */ "iDrawError": -1, /** * Paging display length * @type int * @default 10 */ "_iDisplayLength": 10, /** * Paging start point - aiDisplay index * @type int * @default 0 */ "_iDisplayStart": 0, /** * Server-side processing - number of records in the result set * (i.e. before filtering), Use fnRecordsTotal rather than * this property to get the value of the number of records, regardless of * the server-side processing setting. * @type int * @default 0 * @private */ "_iRecordsTotal": 0, /** * Server-side processing - number of records in the current display set * (i.e. after filtering). Use fnRecordsDisplay rather than * this property to get the value of the number of records, regardless of * the server-side processing setting. * @type boolean * @default 0 * @private */ "_iRecordsDisplay": 0, /** * Flag to indicate if jQuery UI marking and classes should be used. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bJUI": null, /** * The classes to use for the table * @type object * @default {} */ "oClasses": {}, /** * Flag attached to the settings object so you can check in the draw * callback if filtering has been done in the draw. Deprecated in favour of * events. * @type boolean * @default false * @deprecated */ "bFiltered": false, /** * Flag attached to the settings object so you can check in the draw * callback if sorting has been done in the draw. Deprecated in favour of * events. * @type boolean * @default false * @deprecated */ "bSorted": false, /** * Indicate that if multiple rows are in the header and there is more than * one unique cell per column, if the top one (true) or bottom one (false) * should be used for sorting / title by DataTables. * Note that this parameter will be set by the initialisation routine. To * set a default use {@link DataTable.defaults}. * @type boolean */ "bSortCellsTop": null, /** * Initialisation object that is used for the table * @type object * @default null */ "oInit": null, /** * Destroy callback functions - for plug-ins to attach themselves to the * destroy so they can clean up markup and events. * @type array * @default [] */ "aoDestroyCallback": [], /** * Get the number of records in the current record set, before filtering * @type function */ "fnRecordsTotal": function () { return _fnDataSource( this ) == 'ssp' ? this._iRecordsTotal * 1 : this.aiDisplayMaster.length; }, /** * Get the number of records in the current record set, after filtering * @type function */ "fnRecordsDisplay": function () { return _fnDataSource( this ) == 'ssp' ? this._iRecordsDisplay * 1 : this.aiDisplay.length; }, /** * Get the display end point - aiDisplay index * @type function */ "fnDisplayEnd": function () { var len = this._iDisplayLength, start = this._iDisplayStart, calc = start + len, records = this.aiDisplay.length, features = this.oFeatures, paginate = features.bPaginate; if ( features.bServerSide ) { return paginate === false || len === -1 ? start + records : Math.min( start+len, this._iRecordsDisplay ); } else { return ! paginate || calc>records || len===-1 ? records : calc; } }, /** * The DataTables object for this table * @type object * @default null */ "oInstance": null, /** * Unique identifier for each instance of the DataTables object. If there * is an ID on the table node, then it takes that value, otherwise an * incrementing internal counter is used. * @type string * @default null */ "sInstance": null, /** * tabindex attribute value that is added to DataTables control elements, allowing * keyboard navigation of the table and its controls. */ "iTabIndex": 0, /** * DIV container for the footer scrolling table if scrolling */ "nScrollHead": null, /** * DIV container for the footer scrolling table if scrolling */ "nScrollFoot": null, /** * Last applied sort * @type array * @default [] */ "aLastSort": [], /** * Stored plug-in instances * @type object * @default {} */ "oPlugins": {}, /** * Function used to get a row's id from the row's data * @type function * @default null */ "rowIdFn": null, /** * Data location where to store a row's id * @type string * @default null */ "rowId": null }; /** * Extension object for DataTables that is used to provide all extension * options. * * Note that the `DataTable.ext` object is available through * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is * also aliased to `jQuery.fn.dataTableExt` for historic reasons. * @namespace * @extends DataTable.models.ext */ /** * DataTables extensions * * This namespace acts as a collection area for plug-ins that can be used to * extend DataTables capabilities. Indeed many of the build in methods * use this method to provide their own capabilities (sorting methods for * example). * * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy * reasons * * @namespace */ DataTable.ext = _ext = { /** * Buttons. For use with the Buttons extension for DataTables. This is * defined here so other extensions can define buttons regardless of load * order. It is _not_ used by DataTables core. * * @type object * @default {} */ buttons: {}, /** * Element class names * * @type object * @default {} */ classes: {}, /** * DataTables build type (expanded by the download builder) * * @type string */ build:"bs/dt-1.10.13/fh-3.1.2", /** * Error reporting. * * How should DataTables report an error. Can take the value 'alert', * 'throw', 'none' or a function. * * @type string|function * @default alert */ errMode: "alert", /** * Feature plug-ins. * * This is an array of objects which describe the feature plug-ins that are * available to DataTables. These feature plug-ins are then available for * use through the `dom` initialisation option. * * Each feature plug-in is described by an object which must have the * following properties: * * * `fnInit` - function that is used to initialise the plug-in, * * `cFeature` - a character so the feature can be enabled by the `dom` * instillation option. This is case sensitive. * * The `fnInit` function has the following input parameters: * * 1. `{object}` DataTables settings object: see * {@link DataTable.models.oSettings} * * And the following return is expected: * * * {node|null} The element which contains your feature. Note that the * return may also be void if your plug-in does not require to inject any * DOM elements into DataTables control (`dom`) - for example this might * be useful when developing a plug-in which allows table control via * keyboard entry * * @type array * * @example * $.fn.dataTable.ext.features.push( { * "fnInit": function( oSettings ) { * return new TableTools( { "oDTSettings": oSettings } ); * }, * "cFeature": "T" * } ); */ feature: [], /** * Row searching. * * This method of searching is complimentary to the default type based * searching, and a lot more comprehensive as it allows you complete control * over the searching logic. Each element in this array is a function * (parameters described below) that is called for every row in the table, * and your logic decides if it should be included in the searching data set * or not. * * Searching functions have the following input parameters: * * 1. `{object}` DataTables settings object: see * {@link DataTable.models.oSettings} * 2. `{array|object}` Data for the row to be processed (same as the * original format that was passed in as the data source, or an array * from a DOM data source * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which * can be useful to retrieve the `TR` element if you need DOM interaction. * * And the following return is expected: * * * {boolean} Include the row in the searched result set (true) or not * (false) * * Note that as with the main search ability in DataTables, technically this * is "filtering", since it is subtractive. However, for consistency in * naming we call it searching here. * * @type array * @default [] * * @example * // The following example shows custom search being applied to the * // fourth column (i.e. the data[3] index) based on two input values * // from the end-user, matching the data in a certain range. * $.fn.dataTable.ext.search.push( * function( settings, data, dataIndex ) { * var min = document.getElementById('min').value * 1; * var max = document.getElementById('max').value * 1; * var version = data[3] == "-" ? 0 : data[3]*1; * * if ( min == "" && max == "" ) { * return true; * } * else if ( min == "" && version < max ) { * return true; * } * else if ( min < version && "" == max ) { * return true; * } * else if ( min < version && version < max ) { * return true; * } * return false; * } * ); */ search: [], /** * Selector extensions * * The `selector` option can be used to extend the options available for the * selector modifier options (`selector-modifier` object data type) that * each of the three built in selector types offer (row, column and cell + * their plural counterparts). For example the Select extension uses this * mechanism to provide an option to select only rows, columns and cells * that have been marked as selected by the end user (`{selected: true}`), * which can be used in conjunction with the existing built in selector * options. * * Each property is an array to which functions can be pushed. The functions * take three attributes: * * * Settings object for the host table * * Options object (`selector-modifier` object type) * * Array of selected item indexes * * The return is an array of the resulting item indexes after the custom * selector has been applied. * * @type object */ selector: { cell: [], column: [], row: [] }, /** * Internal functions, exposed for used in plug-ins. * * Please note that you should not need to use the internal methods for * anything other than a plug-in (and even then, try to avoid if possible). * The internal function may change between releases. * * @type object * @default {} */ internal: {}, /** * Legacy configuration options. Enable and disable legacy options that * are available in DataTables. * * @type object */ legacy: { /** * Enable / disable DataTables 1.9 compatible server-side processing * requests * * @type boolean * @default null */ ajax: null }, /** * Pagination plug-in methods. * * Each entry in this object is a function and defines which buttons should * be shown by the pagination rendering method that is used for the table: * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the * buttons are displayed in the document, while the functions here tell it * what buttons to display. This is done by returning an array of button * descriptions (what each button will do). * * Pagination types (the four built in options and any additional plug-in * options defined here) can be used through the `paginationType` * initialisation parameter. * * The functions defined take two parameters: * * 1. `{int} page` The current page index * 2. `{int} pages` The number of pages in the table * * Each function is expected to return an array where each element of the * array can be one of: * * * `first` - Jump to first page when activated * * `last` - Jump to last page when activated * * `previous` - Show previous page when activated * * `next` - Show next page when activated * * `{int}` - Show page of the index given * * `{array}` - A nested array containing the above elements to add a * containing 'DIV' element (might be useful for styling). * * Note that DataTables v1.9- used this object slightly differently whereby * an object with two functions would be defined for each plug-in. That * ability is still supported by DataTables 1.10+ to provide backwards * compatibility, but this option of use is now decremented and no longer * documented in DataTables 1.10+. * * @type object * @default {} * * @example * // Show previous, next and current page buttons only * $.fn.dataTableExt.oPagination.current = function ( page, pages ) { * return [ 'previous', page, 'next' ]; * }; */ pager: {}, renderer: { pageButton: {}, header: {} }, /** * Ordering plug-ins - custom data source * * The extension options for ordering of data available here is complimentary * to the default type based ordering that DataTables typically uses. It * allows much greater control over the the data that is being used to * order a column, but is necessarily therefore more complex. * * This type of ordering is useful if you want to do ordering based on data * live from the DOM (for example the contents of an 'input' element) rather * than just the static string that DataTables knows of. * * The way these plug-ins work is that you create an array of the values you * wish to be ordering for the column in question and then return that * array. The data in the array much be in the index order of the rows in * the table (not the currently ordering order!). Which order data gathering * function is run here depends on the `dt-init columns.orderDataType` * parameter that is used for the column (if any). * * The functions defined take two parameters: * * 1. `{object}` DataTables settings object: see * {@link DataTable.models.oSettings} * 2. `{int}` Target column index * * Each function is expected to return an array: * * * `{array}` Data for the column to be ordering upon * * @type array * * @example * // Ordering using `input` node values * $.fn.dataTable.ext.order['dom-text'] = function ( settings, col ) * { * return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) { * return $('input', td).val(); * } ); * } */ order: {}, /** * Type based plug-ins. * * Each column in DataTables has a type assigned to it, either by automatic * detection or by direct assignment using the `type` option for the column. * The type of a column will effect how it is ordering and search (plug-ins * can also make use of the column type if required). * * @namespace */ type: { /** * Type detection functions. * * The functions defined in this object are used to automatically detect * a column's type, making initialisation of DataTables super easy, even * when complex data is in the table. * * The functions defined take two parameters: * * 1. `{*}` Data from the column cell to be analysed * 2. `{settings}` DataTables settings object. This can be used to * perform context specific type detection - for example detection * based on language settings such as using a comma for a decimal * place. Generally speaking the options from the settings will not * be required * * Each function is expected to return: * * * `{string|null}` Data type detected, or null if unknown (and thus * pass it on to the other type detection functions. * * @type array * * @example * // Currency type detection plug-in: * $.fn.dataTable.ext.type.detect.push( * function ( data, settings ) { * // Check the numeric part * if ( ! $.isNumeric( data.substring(1) ) ) { * return null; * } * * // Check prefixed by currency * if ( data.charAt(0) == '$' || data.charAt(0) == '£' ) { * return 'currency'; * } * return null; * } * ); */ detect: [], /** * Type based search formatting. * * The type based searching functions can be used to pre-format the * data to be search on. For example, it can be used to strip HTML * tags or to de-format telephone numbers for numeric only searching. * * Note that is a search is not defined for a column of a given type, * no search formatting will be performed. * * Pre-processing of searching data plug-ins - When you assign the sType * for a column (or have it automatically detected for you by DataTables * or a type detection plug-in), you will typically be using this for * custom sorting, but it can also be used to provide custom searching * by allowing you to pre-processing the data and returning the data in * the format that should be searched upon. This is done by adding * functions this object with a parameter name which matches the sType * for that target column. This is the corollary of afnSortData * for searching data. * * The functions defined take a single parameter: * * 1. `{*}` Data from the column cell to be prepared for searching * * Each function is expected to return: * * * `{string|null}` Formatted string that will be used for the searching. * * @type object * @default {} * * @example * $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) { * return d.replace(/\n/g," ").replace( /<.*?>/g, "" ); * } */ search: {}, /** * Type based ordering. * * The column type tells DataTables what ordering to apply to the table * when a column is sorted upon. The order for each type that is defined, * is defined by the functions available in this object. * * Each ordering option can be described by three properties added to * this object: * * * `{type}-pre` - Pre-formatting function * * `{type}-asc` - Ascending order function * * `{type}-desc` - Descending order function * * All three can be used together, only `{type}-pre` or only * `{type}-asc` and `{type}-desc` together. It is generally recommended * that only `{type}-pre` is used, as this provides the optimal * implementation in terms of speed, although the others are provided * for compatibility with existing Javascript sort functions. * * `{type}-pre`: Functions defined take a single parameter: * * 1. `{*}` Data from the column cell to be prepared for ordering * * And return: * * * `{*}` Data to be sorted upon * * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort * functions, taking two parameters: * * 1. `{*}` Data to compare to the second parameter * 2. `{*}` Data to compare to the first parameter * * And returning: * * * `{*}` Ordering match: <0 if first parameter should be sorted lower * than the second parameter, ===0 if the two parameters are equal and * >0 if the first parameter should be sorted height than the second * parameter. * * @type object * @default {} * * @example * // Numeric ordering of formatted numbers with a pre-formatter * $.extend( $.fn.dataTable.ext.type.order, { * "string-pre": function(x) { * a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" ); * return parseFloat( a ); * } * } ); * * @example * // Case-sensitive string ordering, with no pre-formatting method * $.extend( $.fn.dataTable.ext.order, { * "string-case-asc": function(x,y) { * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); * }, * "string-case-desc": function(x,y) { * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); * } * } ); */ order: {} }, /** * Unique DataTables instance counter * * @type int * @private */ _unique: 0, // // Depreciated // The following properties are retained for backwards compatiblity only. // The should not be used in new projects and will be removed in a future // version // /** * Version check function. * @type function * @depreciated Since 1.10 */ fnVersionCheck: DataTable.fnVersionCheck, /** * Index for what 'this' index API functions should use * @type int * @deprecated Since v1.10 */ iApiIndex: 0, /** * jQuery UI class container * @type object * @deprecated Since v1.10 */ oJUIClasses: {}, /** * Software version * @type string * @deprecated Since v1.10 */ sVersion: DataTable.version }; // // Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts // $.extend( _ext, { afnFiltering: _ext.search, aTypes: _ext.type.detect, ofnSearch: _ext.type.search, oSort: _ext.type.order, afnSortData: _ext.order, aoFeatures: _ext.feature, oApi: _ext.internal, oStdClasses: _ext.classes, oPagination: _ext.pager } ); $.extend( DataTable.ext.classes, { "sTable": "dataTable", "sNoFooter": "no-footer", /* Paging buttons */ "sPageButton": "paginate_button", "sPageButtonActive": "current", "sPageButtonDisabled": "disabled", /* Striping classes */ "sStripeOdd": "odd", "sStripeEven": "even", /* Empty row */ "sRowEmpty": "dataTables_empty", /* Features */ "sWrapper": "dataTables_wrapper", "sFilter": "dataTables_filter", "sInfo": "dataTables_info", "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ "sLength": "dataTables_length", "sProcessing": "dataTables_processing", /* Sorting */ "sSortAsc": "sorting_asc", "sSortDesc": "sorting_desc", "sSortable": "sorting", /* Sortable in both directions */ "sSortableAsc": "sorting_asc_disabled", "sSortableDesc": "sorting_desc_disabled", "sSortableNone": "sorting_disabled", "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ /* Filtering */ "sFilterInput": "", /* Page length */ "sLengthSelect": "", /* Scrolling */ "sScrollWrapper": "dataTables_scroll", "sScrollHead": "dataTables_scrollHead", "sScrollHeadInner": "dataTables_scrollHeadInner", "sScrollBody": "dataTables_scrollBody", "sScrollFoot": "dataTables_scrollFoot", "sScrollFootInner": "dataTables_scrollFootInner", /* Misc */ "sHeaderTH": "", "sFooterTH": "", // Deprecated "sSortJUIAsc": "", "sSortJUIDesc": "", "sSortJUI": "", "sSortJUIAscAllowed": "", "sSortJUIDescAllowed": "", "sSortJUIWrapper": "", "sSortIcon": "", "sJUIHeader": "", "sJUIFooter": "" } ); (function() { // Reused strings for better compression. Closure compiler appears to have a // weird edge case where it is trying to expand strings rather than use the // variable version. This results in about 200 bytes being added, for very // little preference benefit since it this run on script load only. var _empty = ''; _empty = ''; var _stateDefault = _empty + 'ui-state-default'; var _sortIcon = _empty + 'css_right ui-icon ui-icon-'; var _headerFooter = _empty + 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix'; $.extend( DataTable.ext.oJUIClasses, DataTable.ext.classes, { /* Full numbers paging buttons */ "sPageButton": "fg-button ui-button "+_stateDefault, "sPageButtonActive": "ui-state-disabled", "sPageButtonDisabled": "ui-state-disabled", /* Features */ "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ "ui-buttonset-multi paging_", /* Note that the type is postfixed */ /* Sorting */ "sSortAsc": _stateDefault+" sorting_asc", "sSortDesc": _stateDefault+" sorting_desc", "sSortable": _stateDefault+" sorting", "sSortableAsc": _stateDefault+" sorting_asc_disabled", "sSortableDesc": _stateDefault+" sorting_desc_disabled", "sSortableNone": _stateDefault+" sorting_disabled", "sSortJUIAsc": _sortIcon+"triangle-1-n", "sSortJUIDesc": _sortIcon+"triangle-1-s", "sSortJUI": _sortIcon+"carat-2-n-s", "sSortJUIAscAllowed": _sortIcon+"carat-1-n", "sSortJUIDescAllowed": _sortIcon+"carat-1-s", "sSortJUIWrapper": "DataTables_sort_wrapper", "sSortIcon": "DataTables_sort_icon", /* Scrolling */ "sScrollHead": "dataTables_scrollHead "+_stateDefault, "sScrollFoot": "dataTables_scrollFoot "+_stateDefault, /* Misc */ "sHeaderTH": _stateDefault, "sFooterTH": _stateDefault, "sJUIHeader": _headerFooter+" ui-corner-tl ui-corner-tr", "sJUIFooter": _headerFooter+" ui-corner-bl ui-corner-br" } ); }()); var extPagination = DataTable.ext.pager; function _numbers ( page, pages ) { var numbers = [], buttons = extPagination.numbers_length, half = Math.floor( buttons / 2 ), i = 1; if ( pages <= buttons ) { numbers = _range( 0, pages ); } else if ( page <= half ) { numbers = _range( 0, buttons-2 ); numbers.push( 'ellipsis' ); numbers.push( pages-1 ); } else if ( page >= pages - 1 - half ) { numbers = _range( pages-(buttons-2), pages ); numbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6 numbers.splice( 0, 0, 0 ); } else { numbers = _range( page-half+2, page+half-1 ); numbers.push( 'ellipsis' ); numbers.push( pages-1 ); numbers.splice( 0, 0, 'ellipsis' ); numbers.splice( 0, 0, 0 ); } numbers.DT_el = 'span'; return numbers; } $.extend( extPagination, { simple: function ( page, pages ) { return [ 'previous', 'next' ]; }, full: function ( page, pages ) { return [ 'first', 'previous', 'next', 'last' ]; }, numbers: function ( page, pages ) { return [ _numbers(page, pages) ]; }, simple_numbers: function ( page, pages ) { return [ 'previous', _numbers(page, pages), 'next' ]; }, full_numbers: function ( page, pages ) { return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ]; }, first_last_numbers: function (page, pages) { return ['first', _numbers(page, pages), 'last']; }, // For testing and plug-ins to use _numbers: _numbers, // Number of number buttons (including ellipsis) to show. _Must be odd!_ numbers_length: 7 } ); $.extend( true, DataTable.ext.renderer, { pageButton: { _: function ( settings, host, idx, buttons, page, pages ) { var classes = settings.oClasses; var lang = settings.oLanguage.oPaginate; var aria = settings.oLanguage.oAria.paginate || {}; var btnDisplay, btnClass, counter=0; var attach = function( container, buttons ) { var i, ien, node, button; var clickHandler = function ( e ) { _fnPageChange( settings, e.data.action, true ); }; for ( i=0, ien=buttons.length ; i' ) .appendTo( container ); attach( inner, button ); } else { btnDisplay = null; btnClass = ''; switch ( button ) { case 'ellipsis': container.append(''); break; case 'first': btnDisplay = lang.sFirst; btnClass = button + (page > 0 ? '' : ' '+classes.sPageButtonDisabled); break; case 'previous': btnDisplay = lang.sPrevious; btnClass = button + (page > 0 ? '' : ' '+classes.sPageButtonDisabled); break; case 'next': btnDisplay = lang.sNext; btnClass = button + (page < pages-1 ? '' : ' '+classes.sPageButtonDisabled); break; case 'last': btnDisplay = lang.sLast; btnClass = button + (page < pages-1 ? '' : ' '+classes.sPageButtonDisabled); break; default: btnDisplay = button + 1; btnClass = page === button ? classes.sPageButtonActive : ''; break; } if ( btnDisplay !== null ) { node = $('', { 'class': classes.sPageButton+' '+btnClass, 'aria-controls': settings.sTableId, 'aria-label': aria[ button ], 'data-dt-idx': counter, 'tabindex': settings.iTabIndex, 'id': idx === 0 && typeof button === 'string' ? settings.sTableId +'_'+ button : null } ) .html( btnDisplay ) .appendTo( container ); _fnBindAction( node, {action: button}, clickHandler ); counter++; } } } }; // IE9 throws an 'unknown error' if document.activeElement is used // inside an iframe or frame. Try / catch the error. Not good for // accessibility, but neither are frames. var activeEl; try { // Because this approach is destroying and recreating the paging // elements, focus is lost on the select button which is bad for // accessibility. So we want to restore focus once the draw has // completed activeEl = $(host).find(document.activeElement).data('dt-idx'); } catch (e) {} attach( $(host).empty(), buttons ); if ( activeEl !== undefined ) { $(host).find( '[data-dt-idx='+activeEl+']' ).focus(); } } } } ); // Built in type detection. See model.ext.aTypes for information about // what is required from this methods. $.extend( DataTable.ext.type.detect, [ // Plain numbers - first since V8 detects some plain numbers as dates // e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...). function ( d, settings ) { var decimal = settings.oLanguage.sDecimal; return _isNumber( d, decimal ) ? 'num'+decimal : null; }, // Dates (only those recognised by the browser's Date.parse) function ( d, settings ) { // V8 tries _very_ hard to make a string passed into `Date.parse()` // valid, so we need to use a regex to restrict date formats. Use a // plug-in for anything other than ISO8601 style strings if ( d && !(d instanceof Date) && ! _re_date.test(d) ) { return null; } var parsed = Date.parse(d); return (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null; }, // Formatted numbers function ( d, settings ) { var decimal = settings.oLanguage.sDecimal; return _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null; }, // HTML numeric function ( d, settings ) { var decimal = settings.oLanguage.sDecimal; return _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null; }, // HTML numeric, formatted function ( d, settings ) { var decimal = settings.oLanguage.sDecimal; return _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null; }, // HTML (this is strict checking - there must be html) function ( d, settings ) { return _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ? 'html' : null; } ] ); // Filter formatting functions. See model.ext.ofnSearch for information about // what is required from these methods. // // Note that additional search methods are added for the html numbers and // html formatted numbers by `_addNumericSort()` when we know what the decimal // place is $.extend( DataTable.ext.type.search, { html: function ( data ) { return _empty(data) ? data : typeof data === 'string' ? data .replace( _re_new_lines, " " ) .replace( _re_html, "" ) : ''; }, string: function ( data ) { return _empty(data) ? data : typeof data === 'string' ? data.replace( _re_new_lines, " " ) : data; } } ); var __numericReplace = function ( d, decimalPlace, re1, re2 ) { if ( d !== 0 && (!d || d === '-') ) { return -Infinity; } // If a decimal place other than `.` is used, it needs to be given to the // function so we can detect it and replace with a `.` which is the only // decimal place Javascript recognises - it is not locale aware. if ( decimalPlace ) { d = _numToDecimal( d, decimalPlace ); } if ( d.replace ) { if ( re1 ) { d = d.replace( re1, '' ); } if ( re2 ) { d = d.replace( re2, '' ); } } return d * 1; }; // Add the numeric 'deformatting' functions for sorting and search. This is done // in a function to provide an easy ability for the language options to add // additional methods if a non-period decimal place is used. function _addNumericSort ( decimalPlace ) { $.each( { // Plain numbers "num": function ( d ) { return __numericReplace( d, decimalPlace ); }, // Formatted numbers "num-fmt": function ( d ) { return __numericReplace( d, decimalPlace, _re_formatted_numeric ); }, // HTML numeric "html-num": function ( d ) { return __numericReplace( d, decimalPlace, _re_html ); }, // HTML numeric, formatted "html-num-fmt": function ( d ) { return __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric ); } }, function ( key, fn ) { // Add the ordering method _ext.type.order[ key+decimalPlace+'-pre' ] = fn; // For HTML types add a search formatter that will strip the HTML if ( key.match(/^html\-/) ) { _ext.type.search[ key+decimalPlace ] = _ext.type.search.html; } } ); } // Default sort methods $.extend( _ext.type.order, { // Dates "date-pre": function ( d ) { return Date.parse( d ) || -Infinity; }, // html "html-pre": function ( a ) { return _empty(a) ? '' : a.replace ? a.replace( /<.*?>/g, "" ).toLowerCase() : a+''; }, // string "string-pre": function ( a ) { // This is a little complex, but faster than always calling toString, // http://jsperf.com/tostring-v-check return _empty(a) ? '' : typeof a === 'string' ? a.toLowerCase() : ! a.toString ? '' : a.toString(); }, // string-asc and -desc are retained only for compatibility with the old // sort methods "string-asc": function ( x, y ) { return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }, "string-desc": function ( x, y ) { return ((x < y) ? 1 : ((x > y) ? -1 : 0)); } } ); // Numeric sorting types - order doesn't matter here _addNumericSort( '' ); $.extend( true, DataTable.ext.renderer, { header: { _: function ( settings, cell, column, classes ) { // No additional mark-up required // Attach a sort listener to update on sort - note that using the // `DT` namespace will allow the event to be removed automatically // on destroy, while the `dt` namespaced event is the one we are // listening for $(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) { if ( settings !== ctx ) { // need to check this this is the host return; // table, not a nested one } var colIdx = column.idx; cell .removeClass( column.sSortingClass +' '+ classes.sSortAsc +' '+ classes.sSortDesc ) .addClass( columns[ colIdx ] == 'asc' ? classes.sSortAsc : columns[ colIdx ] == 'desc' ? classes.sSortDesc : column.sSortingClass ); } ); }, jqueryui: function ( settings, cell, column, classes ) { $('
    ') .addClass( classes.sSortJUIWrapper ) .append( cell.contents() ) .append( $('') .addClass( classes.sSortIcon+' '+column.sSortingClassJUI ) ) .appendTo( cell ); // Attach a sort listener to update on sort $(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) { if ( settings !== ctx ) { return; } var colIdx = column.idx; cell .removeClass( classes.sSortAsc +" "+classes.sSortDesc ) .addClass( columns[ colIdx ] == 'asc' ? classes.sSortAsc : columns[ colIdx ] == 'desc' ? classes.sSortDesc : column.sSortingClass ); cell .find( 'span.'+classes.sSortIcon ) .removeClass( classes.sSortJUIAsc +" "+ classes.sSortJUIDesc +" "+ classes.sSortJUI +" "+ classes.sSortJUIAscAllowed +" "+ classes.sSortJUIDescAllowed ) .addClass( columns[ colIdx ] == 'asc' ? classes.sSortJUIAsc : columns[ colIdx ] == 'desc' ? classes.sSortJUIDesc : column.sSortingClassJUI ); } ); } } } ); /* * Public helper functions. These aren't used internally by DataTables, or * called by any of the options passed into DataTables, but they can be used * externally by developers working with DataTables. They are helper functions * to make working with DataTables a little bit easier. */ var __htmlEscapeEntities = function ( d ) { return typeof d === 'string' ? d.replace(//g, '>').replace(/"/g, '"') : d; }; /** * Helpers for `columns.render`. * * The options defined here can be used with the `columns.render` initialisation * option to provide a display renderer. The following functions are defined: * * * `number` - Will format numeric data (defined by `columns.data`) for * display, retaining the original unformatted data for sorting and filtering. * It takes 5 parameters: * * `string` - Thousands grouping separator * * `string` - Decimal point indicator * * `integer` - Number of decimal points to show * * `string` (optional) - Prefix. * * `string` (optional) - Postfix (/suffix). * * `text` - Escape HTML to help prevent XSS attacks. It has no optional * parameters. * * @example * // Column definition using the number renderer * { * data: "salary", * render: $.fn.dataTable.render.number( '\'', '.', 0, '$' ) * } * * @namespace */ DataTable.render = { number: function ( thousands, decimal, precision, prefix, postfix ) { return { display: function ( d ) { if ( typeof d !== 'number' && typeof d !== 'string' ) { return d; } var negative = d < 0 ? '-' : ''; var flo = parseFloat( d ); // If NaN then there isn't much formatting that we can do - just // return immediately, escaping any HTML (this was supposed to // be a number after all) if ( isNaN( flo ) ) { return __htmlEscapeEntities( d ); } flo = flo.toFixed( precision ); d = Math.abs( flo ); var intPart = parseInt( d, 10 ); var floatPart = precision ? decimal+(d - intPart).toFixed( precision ).substring( 2 ): ''; return negative + (prefix||'') + intPart.toString().replace( /\B(?=(\d{3})+(?!\d))/g, thousands ) + floatPart + (postfix||''); } }; }, text: function () { return { display: __htmlEscapeEntities }; } }; /* * This is really a good bit rubbish this method of exposing the internal methods * publicly... - To be fixed in 2.0 using methods on the prototype */ /** * Create a wrapper function for exporting an internal functions to an external API. * @param {string} fn API function name * @returns {function} wrapped function * @memberof DataTable#internal */ function _fnExternApiFunc (fn) { return function() { var args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat( Array.prototype.slice.call(arguments) ); return DataTable.ext.internal[fn].apply( this, args ); }; } /** * Reference to internal functions for use by plug-in developers. Note that * these methods are references to internal functions and are considered to be * private. If you use these methods, be aware that they are liable to change * between versions. * @namespace */ $.extend( DataTable.ext.internal, { _fnExternApiFunc: _fnExternApiFunc, _fnBuildAjax: _fnBuildAjax, _fnAjaxUpdate: _fnAjaxUpdate, _fnAjaxParameters: _fnAjaxParameters, _fnAjaxUpdateDraw: _fnAjaxUpdateDraw, _fnAjaxDataSrc: _fnAjaxDataSrc, _fnAddColumn: _fnAddColumn, _fnColumnOptions: _fnColumnOptions, _fnAdjustColumnSizing: _fnAdjustColumnSizing, _fnVisibleToColumnIndex: _fnVisibleToColumnIndex, _fnColumnIndexToVisible: _fnColumnIndexToVisible, _fnVisbleColumns: _fnVisbleColumns, _fnGetColumns: _fnGetColumns, _fnColumnTypes: _fnColumnTypes, _fnApplyColumnDefs: _fnApplyColumnDefs, _fnHungarianMap: _fnHungarianMap, _fnCamelToHungarian: _fnCamelToHungarian, _fnLanguageCompat: _fnLanguageCompat, _fnBrowserDetect: _fnBrowserDetect, _fnAddData: _fnAddData, _fnAddTr: _fnAddTr, _fnNodeToDataIndex: _fnNodeToDataIndex, _fnNodeToColumnIndex: _fnNodeToColumnIndex, _fnGetCellData: _fnGetCellData, _fnSetCellData: _fnSetCellData, _fnSplitObjNotation: _fnSplitObjNotation, _fnGetObjectDataFn: _fnGetObjectDataFn, _fnSetObjectDataFn: _fnSetObjectDataFn, _fnGetDataMaster: _fnGetDataMaster, _fnClearTable: _fnClearTable, _fnDeleteIndex: _fnDeleteIndex, _fnInvalidate: _fnInvalidate, _fnGetRowElements: _fnGetRowElements, _fnCreateTr: _fnCreateTr, _fnBuildHead: _fnBuildHead, _fnDrawHead: _fnDrawHead, _fnDraw: _fnDraw, _fnReDraw: _fnReDraw, _fnAddOptionsHtml: _fnAddOptionsHtml, _fnDetectHeader: _fnDetectHeader, _fnGetUniqueThs: _fnGetUniqueThs, _fnFeatureHtmlFilter: _fnFeatureHtmlFilter, _fnFilterComplete: _fnFilterComplete, _fnFilterCustom: _fnFilterCustom, _fnFilterColumn: _fnFilterColumn, _fnFilter: _fnFilter, _fnFilterCreateSearch: _fnFilterCreateSearch, _fnEscapeRegex: _fnEscapeRegex, _fnFilterData: _fnFilterData, _fnFeatureHtmlInfo: _fnFeatureHtmlInfo, _fnUpdateInfo: _fnUpdateInfo, _fnInfoMacros: _fnInfoMacros, _fnInitialise: _fnInitialise, _fnInitComplete: _fnInitComplete, _fnLengthChange: _fnLengthChange, _fnFeatureHtmlLength: _fnFeatureHtmlLength, _fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate, _fnPageChange: _fnPageChange, _fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing, _fnProcessingDisplay: _fnProcessingDisplay, _fnFeatureHtmlTable: _fnFeatureHtmlTable, _fnScrollDraw: _fnScrollDraw, _fnApplyToChildren: _fnApplyToChildren, _fnCalculateColumnWidths: _fnCalculateColumnWidths, _fnThrottle: _fnThrottle, _fnConvertToWidth: _fnConvertToWidth, _fnGetWidestNode: _fnGetWidestNode, _fnGetMaxLenString: _fnGetMaxLenString, _fnStringToCss: _fnStringToCss, _fnSortFlatten: _fnSortFlatten, _fnSort: _fnSort, _fnSortAria: _fnSortAria, _fnSortListener: _fnSortListener, _fnSortAttachListener: _fnSortAttachListener, _fnSortingClasses: _fnSortingClasses, _fnSortData: _fnSortData, _fnSaveState: _fnSaveState, _fnLoadState: _fnLoadState, _fnSettingsFromNode: _fnSettingsFromNode, _fnLog: _fnLog, _fnMap: _fnMap, _fnBindAction: _fnBindAction, _fnCallbackReg: _fnCallbackReg, _fnCallbackFire: _fnCallbackFire, _fnLengthOverflow: _fnLengthOverflow, _fnRenderer: _fnRenderer, _fnDataSource: _fnDataSource, _fnRowAttributes: _fnRowAttributes, _fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant // in 1.10, so this dead-end function is // added to prevent errors } ); // jQuery access $.fn.dataTable = DataTable; // Provide access to the host jQuery object (circular reference) DataTable.$ = $; // Legacy aliases $.fn.dataTableSettings = DataTable.settings; $.fn.dataTableExt = DataTable.ext; // With a capital `D` we return a DataTables API instance rather than a // jQuery object $.fn.DataTable = function ( opts ) { return $(this).dataTable( opts ).api(); }; // All properties that are available to $.fn.dataTable should also be // available on $.fn.DataTable $.each( DataTable, function ( prop, val ) { $.fn.DataTable[ prop ] = val; } ); // Information about events fired by DataTables - for documentation. /** * Draw event, fired whenever the table is redrawn on the page, at the same * point as fnDrawCallback. This may be useful for binding events or * performing calculations when the table is altered at all. * @name DataTable#draw.dt * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Search event, fired when the searching applied to the table (using the * built-in global search, or column filters) is altered. * @name DataTable#search.dt * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Page change event, fired when the paging of the table is altered. * @name DataTable#page.dt * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * Order event, fired when the ordering applied to the table is altered. * @name DataTable#order.dt * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} */ /** * DataTables initialisation complete event, fired when the table is fully * drawn, including Ajax data loaded, if Ajax data is required. * @name DataTable#init.dt * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The JSON object request from the server - only * present if client-side Ajax sourced data is used
  • */ /** * State save event, fired when the table has changed state a new state save * is required. This event allows modification of the state saving object * prior to actually doing the save, including addition or other state * properties (for plug-ins) or modification of a DataTables core property. * @name DataTable#stateSaveParams.dt * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The state information to be saved */ /** * State load event, fired when the table is loading state from the stored * data, but prior to the settings object being modified by the saved state * - allowing modification of the saved state is required or loading of * state for a plug-in. * @name DataTable#stateLoadParams.dt * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The saved state information */ /** * State loaded event, fired when state has been loaded from stored data and * the settings object has been modified by the loaded data. * @name DataTable#stateLoaded.dt * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {object} json The saved state information */ /** * Processing event, fired when DataTables is doing some kind of processing * (be it, order, searcg or anything else). It can be used to indicate to * the end user that there is something happening, or that something has * finished. * @name DataTable#processing.dt * @event * @param {event} e jQuery event object * @param {object} oSettings DataTables settings object * @param {boolean} bShow Flag for if DataTables is doing processing or not */ /** * Ajax (XHR) event, fired whenever an Ajax request is completed from a * request to made to the server for new data. This event is called before * DataTables processed the returned data, so it can also be used to pre- * process the data returned from the server, if needed. * * Note that this trigger is called in `fnServerData`, if you override * `fnServerData` and which to use this event, you need to trigger it in you * success function. * @name DataTable#xhr.dt * @event * @param {event} e jQuery event object * @param {object} o DataTables settings object {@link DataTable.models.oSettings} * @param {object} json JSON returned from the server * * @example * // Use a custom property returned from the server in another DOM element * $('#table').dataTable().on('xhr.dt', function (e, settings, json) { * $('#status').html( json.status ); * } ); * * @example * // Pre-process the data returned from the server * $('#table').dataTable().on('xhr.dt', function (e, settings, json) { * for ( var i=0, ien=json.aaData.length ; i<'col-sm-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-5'i><'col-sm-7'p>>", renderer: 'bootstrap' } ); /* Default class modification */ $.extend( DataTable.ext.classes, { sWrapper: "dataTables_wrapper form-inline dt-bootstrap", sFilterInput: "form-control input-sm", sLengthSelect: "form-control input-sm", sProcessing: "dataTables_processing panel panel-default" } ); /* Bootstrap paging button renderer */ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { var api = new DataTable.Api( settings ); var classes = settings.oClasses; var lang = settings.oLanguage.oPaginate; var aria = settings.oLanguage.oAria.paginate || {}; var btnDisplay, btnClass, counter=0; var attach = function( container, buttons ) { var i, ien, node, button; var clickHandler = function ( e ) { e.preventDefault(); if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { api.page( e.data.action ).draw( 'page' ); } }; for ( i=0, ien=buttons.length ; i 0 ? '' : ' disabled'); break; case 'previous': btnDisplay = lang.sPrevious; btnClass = button + (page > 0 ? '' : ' disabled'); break; case 'next': btnDisplay = lang.sNext; btnClass = button + (page < pages-1 ? '' : ' disabled'); break; case 'last': btnDisplay = lang.sLast; btnClass = button + (page < pages-1 ? '' : ' disabled'); break; default: btnDisplay = button + 1; btnClass = page === button ? 'active' : ''; break; } if ( btnDisplay ) { node = $('
  • ', { 'class': classes.sPageButton+' '+btnClass, 'id': idx === 0 && typeof button === 'string' ? settings.sTableId +'_'+ button : null } ) .append( $('', { 'href': '#', 'aria-controls': settings.sTableId, 'aria-label': aria[ button ], 'data-dt-idx': counter, 'tabindex': settings.iTabIndex } ) .html( btnDisplay ) ) .appendTo( container ); settings.oApi._fnBindAction( node, {action: button}, clickHandler ); counter++; } } } }; // IE9 throws an 'unknown error' if document.activeElement is used // inside an iframe or frame. var activeEl; try { // Because this approach is destroying and recreating the paging // elements, focus is lost on the select button which is bad for // accessibility. So we want to restore focus once the draw has // completed activeEl = $(host).find(document.activeElement).data('dt-idx'); } catch (e) {} attach( $(host).empty().html('
      ').children('ul'), buttons ); if ( activeEl !== undefined ) { $(host).find( '[data-dt-idx='+activeEl+']' ).focus(); } }; return DataTable; })); /*! FixedHeader 3.1.2 * ©2009-2016 SpryMedia Ltd - datatables.net/license */ /** * @summary FixedHeader * @description Fix a table's header or footer, so it is always visible while * scrolling * @version 3.1.2 * @file dataTables.fixedHeader.js * @author SpryMedia Ltd (www.sprymedia.co.uk) * @contact www.sprymedia.co.uk/contact * @copyright Copyright 2009-2016 SpryMedia Ltd. * * This source file is free software, available under the following license: * MIT license - http://datatables.net/license/mit * * This source file 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 license files for details. * * For details please refer to: http://www.datatables.net */ (function( factory ){ if ( typeof define === 'function' && define.amd ) { // AMD define( ['jquery', 'datatables.net'], function ( $ ) { return factory( $, window, document ); } ); } else if ( typeof exports === 'object' ) { // CommonJS module.exports = function (root, $) { if ( ! root ) { root = window; } if ( ! $ || ! $.fn.dataTable ) { $ = require('datatables.net')(root, $).$; } return factory( $, root, root.document ); }; } else { // Browser factory( jQuery, window, document ); } }(function( $, window, document, undefined ) { 'use strict'; var DataTable = $.fn.dataTable; var _instCounter = 0; var FixedHeader = function ( dt, config ) { // Sanity check - you just know it will happen if ( ! (this instanceof FixedHeader) ) { throw "FixedHeader must be initialised with the 'new' keyword."; } // Allow a boolean true for defaults if ( config === true ) { config = {}; } dt = new DataTable.Api( dt ); this.c = $.extend( true, {}, FixedHeader.defaults, config ); this.s = { dt: dt, position: { theadTop: 0, tbodyTop: 0, tfootTop: 0, tfootBottom: 0, width: 0, left: 0, tfootHeight: 0, theadHeight: 0, windowHeight: $(window).height(), visible: true }, headerMode: null, footerMode: null, autoWidth: dt.settings()[0].oFeatures.bAutoWidth, namespace: '.dtfc'+(_instCounter++), scrollLeft: { header: -1, footer: -1 }, enable: true }; this.dom = { floatingHeader: null, thead: $(dt.table().header()), tbody: $(dt.table().body()), tfoot: $(dt.table().footer()), header: { host: null, floating: null, placeholder: null }, footer: { host: null, floating: null, placeholder: null } }; this.dom.header.host = this.dom.thead.parent(); this.dom.footer.host = this.dom.tfoot.parent(); var dtSettings = dt.settings()[0]; if ( dtSettings._fixedHeader ) { throw "FixedHeader already initialised on table "+dtSettings.nTable.id; } dtSettings._fixedHeader = this; this._constructor(); }; /* * Variable: FixedHeader * Purpose: Prototype for FixedHeader * Scope: global */ $.extend( FixedHeader.prototype, { /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * API methods */ /** * Enable / disable the fixed elements * * @param {boolean} enable `true` to enable, `false` to disable */ enable: function ( enable ) { this.s.enable = enable; if ( this.c.header ) { this._modeChange( 'in-place', 'header', true ); } if ( this.c.footer && this.dom.tfoot.length ) { this._modeChange( 'in-place', 'footer', true ); } this.update(); }, /** * Set header offset * * @param {int} new value for headerOffset */ headerOffset: function ( offset ) { if ( offset !== undefined ) { this.c.headerOffset = offset; this.update(); } return this.c.headerOffset; }, /** * Set footer offset * * @param {int} new value for footerOffset */ footerOffset: function ( offset ) { if ( offset !== undefined ) { this.c.footerOffset = offset; this.update(); } return this.c.footerOffset; }, /** * Recalculate the position of the fixed elements and force them into place */ update: function () { this._positions(); this._scroll( true ); }, /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Constructor */ /** * FixedHeader constructor - adding the required event listeners and * simple initialisation * * @private */ _constructor: function () { var that = this; var dt = this.s.dt; $(window) .on( 'scroll'+this.s.namespace, function () { that._scroll(); } ) .on( 'resize'+this.s.namespace, function () { that.s.position.windowHeight = $(window).height(); that.update(); } ); var autoHeader = $('.fh-fixedHeader'); if ( ! this.c.headerOffset && autoHeader.length ) { this.c.headerOffset = autoHeader.outerHeight(); } var autoFooter = $('.fh-fixedFooter'); if ( ! this.c.footerOffset && autoFooter.length ) { this.c.footerOffset = autoFooter.outerHeight(); } dt.on( 'column-reorder.dt.dtfc column-visibility.dt.dtfc draw.dt.dtfc column-sizing.dt.dtfc', function () { that.update(); } ); dt.on( 'destroy.dtfc', function () { dt.off( '.dtfc' ); $(window).off( that.s.namespace ); } ); this._positions(); this._scroll(); }, /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Private methods */ /** * Clone a fixed item to act as a place holder for the original element * which is moved into a clone of the table element, and moved around the * document to give the fixed effect. * * @param {string} item 'header' or 'footer' * @param {boolean} force Force the clone to happen, or allow automatic * decision (reuse existing if available) * @private */ _clone: function ( item, force ) { var dt = this.s.dt; var itemDom = this.dom[ item ]; var itemElement = item === 'header' ? this.dom.thead : this.dom.tfoot; if ( ! force && itemDom.floating ) { // existing floating element - reuse it itemDom.floating.removeClass( 'fixedHeader-floating fixedHeader-locked' ); } else { if ( itemDom.floating ) { itemDom.placeholder.remove(); this._unsize( item ); itemDom.floating.children().detach(); itemDom.floating.remove(); } itemDom.floating = $( dt.table().node().cloneNode( false ) ) .css( 'table-layout', 'fixed' ) .removeAttr( 'id' ) .append( itemElement ) .appendTo( 'body' ); // Insert a fake thead/tfoot into the DataTable to stop it jumping around itemDom.placeholder = itemElement.clone( false ); itemDom.host.prepend( itemDom.placeholder ); // Clone widths this._matchWidths( itemDom.placeholder, itemDom.floating ); } }, /** * Copy widths from the cells in one element to another. This is required * for the footer as the footer in the main table takes its sizes from the * header columns. That isn't present in the footer so to have it still * align correctly, the sizes need to be copied over. It is also required * for the header when auto width is not enabled * * @param {jQuery} from Copy widths from * @param {jQuery} to Copy widths to * @private */ _matchWidths: function ( from, to ) { var get = function ( name ) { return $(name, from) .map( function () { return $(this).width(); } ).toArray(); }; var set = function ( name, toWidths ) { $(name, to).each( function ( i ) { $(this).css( { width: toWidths[i], minWidth: toWidths[i] } ); } ); }; var thWidths = get( 'th' ); var tdWidths = get( 'td' ); set( 'th', thWidths ); set( 'td', tdWidths ); }, /** * Remove assigned widths from the cells in an element. This is required * when inserting the footer back into the main table so the size is defined * by the header columns and also when auto width is disabled in the * DataTable. * * @param {string} item The `header` or `footer` * @private */ _unsize: function ( item ) { var el = this.dom[ item ].floating; if ( el && (item === 'footer' || (item === 'header' && ! this.s.autoWidth)) ) { $('th, td', el).css( { width: '', minWidth: '' } ); } else if ( el && item === 'header' ) { $('th, td', el).css( 'min-width', '' ); } }, /** * Reposition the floating elements to take account of horizontal page * scroll * * @param {string} item The `header` or `footer` * @param {int} scrollLeft Document scrollLeft * @private */ _horizontal: function ( item, scrollLeft ) { var itemDom = this.dom[ item ]; var position = this.s.position; var lastScrollLeft = this.s.scrollLeft; if ( itemDom.floating && lastScrollLeft[ item ] !== scrollLeft ) { itemDom.floating.css( 'left', position.left - scrollLeft ); lastScrollLeft[ item ] = scrollLeft; } }, /** * Change from one display mode to another. Each fixed item can be in one * of: * * * `in-place` - In the main DataTable * * `in` - Floating over the DataTable * * `below` - (Header only) Fixed to the bottom of the table body * * `above` - (Footer only) Fixed to the top of the table body * * @param {string} mode Mode that the item should be shown in * @param {string} item 'header' or 'footer' * @param {boolean} forceChange Force a redraw of the mode, even if already * in that mode. * @private */ _modeChange: function ( mode, item, forceChange ) { var dt = this.s.dt; var itemDom = this.dom[ item ]; var position = this.s.position; // Record focus. Browser's will cause input elements to loose focus if // they are inserted else where in the doc var tablePart = this.dom[ item==='footer' ? 'tfoot' : 'thead' ]; var focus = $.contains( tablePart[0], document.activeElement ) ? document.activeElement : null; if ( mode === 'in-place' ) { // Insert the header back into the table's real header if ( itemDom.placeholder ) { itemDom.placeholder.remove(); itemDom.placeholder = null; } this._unsize( item ); if ( item === 'header' ) { itemDom.host.prepend( this.dom.thead ); } else { itemDom.host.append( this.dom.tfoot ); } if ( itemDom.floating ) { itemDom.floating.remove(); itemDom.floating = null; } } else if ( mode === 'in' ) { // Remove the header from the read header and insert into a fixed // positioned floating table clone this._clone( item, forceChange ); itemDom.floating .addClass( 'fixedHeader-floating' ) .css( item === 'header' ? 'top' : 'bottom', this.c[item+'Offset'] ) .css( 'left', position.left+'px' ) .css( 'width', position.width+'px' ); if ( item === 'footer' ) { itemDom.floating.css( 'top', '' ); } } else if ( mode === 'below' ) { // only used for the header // Fix the position of the floating header at base of the table body this._clone( item, forceChange ); itemDom.floating .addClass( 'fixedHeader-locked' ) .css( 'top', position.tfootTop - position.theadHeight ) .css( 'left', position.left+'px' ) .css( 'width', position.width+'px' ); } else if ( mode === 'above' ) { // only used for the footer // Fix the position of the floating footer at top of the table body this._clone( item, forceChange ); itemDom.floating .addClass( 'fixedHeader-locked' ) .css( 'top', position.tbodyTop ) .css( 'left', position.left+'px' ) .css( 'width', position.width+'px' ); } // Restore focus if it was lost if ( focus && focus !== document.activeElement ) { focus.focus(); } this.s.scrollLeft.header = -1; this.s.scrollLeft.footer = -1; this.s[item+'Mode'] = mode; }, /** * Cache the positional information that is required for the mode * calculations that FixedHeader performs. * * @private */ _positions: function () { var dt = this.s.dt; var table = dt.table(); var position = this.s.position; var dom = this.dom; var tableNode = $(table.node()); // Need to use the header and footer that are in the main table, // regardless of if they are clones, since they hold the positions we // want to measure from var thead = tableNode.children('thead'); var tfoot = tableNode.children('tfoot'); var tbody = dom.tbody; position.visible = tableNode.is(':visible'); position.width = tableNode.outerWidth(); position.left = tableNode.offset().left; position.theadTop = thead.offset().top; position.tbodyTop = tbody.offset().top; position.theadHeight = position.tbodyTop - position.theadTop; if ( tfoot.length ) { position.tfootTop = tfoot.offset().top; position.tfootBottom = position.tfootTop + tfoot.outerHeight(); position.tfootHeight = position.tfootBottom - position.tfootTop; } else { position.tfootTop = position.tbodyTop + tbody.outerHeight(); position.tfootBottom = position.tfootTop; position.tfootHeight = position.tfootTop; } }, /** * Mode calculation - determine what mode the fixed items should be placed * into. * * @param {boolean} forceChange Force a redraw of the mode, even if already * in that mode. * @private */ _scroll: function ( forceChange ) { var windowTop = $(document).scrollTop(); var windowLeft = $(document).scrollLeft(); var position = this.s.position; var headerMode, footerMode; if ( ! this.s.enable ) { return; } if ( this.c.header ) { if ( ! position.visible || windowTop <= position.theadTop - this.c.headerOffset ) { headerMode = 'in-place'; } else if ( windowTop <= position.tfootTop - position.theadHeight - this.c.headerOffset ) { headerMode = 'in'; } else { headerMode = 'below'; } if ( forceChange || headerMode !== this.s.headerMode ) { this._modeChange( headerMode, 'header', forceChange ); } this._horizontal( 'header', windowLeft ); } if ( this.c.footer && this.dom.tfoot.length ) { if ( ! position.visible || windowTop + position.windowHeight >= position.tfootBottom + this.c.footerOffset ) { footerMode = 'in-place'; } else if ( position.windowHeight + windowTop > position.tbodyTop + position.tfootHeight + this.c.footerOffset ) { footerMode = 'in'; } else { footerMode = 'above'; } if ( forceChange || footerMode !== this.s.footerMode ) { this._modeChange( footerMode, 'footer', forceChange ); } this._horizontal( 'footer', windowLeft ); } } } ); /** * Version * @type {String} * @static */ FixedHeader.version = "3.1.2"; /** * Defaults * @type {Object} * @static */ FixedHeader.defaults = { header: true, footer: false, headerOffset: 0, footerOffset: 0 }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables interfaces */ // Attach for constructor access $.fn.dataTable.FixedHeader = FixedHeader; $.fn.DataTable.FixedHeader = FixedHeader; // DataTables creation - check if the FixedHeader option has been defined on the // table and if so, initialise $(document).on( 'init.dt.dtfh', function (e, settings, json) { if ( e.namespace !== 'dt' ) { return; } var init = settings.oInit.fixedHeader; var defaults = DataTable.defaults.fixedHeader; if ( (init || defaults) && ! settings._fixedHeader ) { var opts = $.extend( {}, defaults, init ); if ( init !== false ) { new FixedHeader( settings, opts ); } } } ); // DataTables API methods DataTable.Api.register( 'fixedHeader()', function () {} ); DataTable.Api.register( 'fixedHeader.adjust()', function () { return this.iterator( 'table', function ( ctx ) { var fh = ctx._fixedHeader; if ( fh ) { fh.update(); } } ); } ); DataTable.Api.register( 'fixedHeader.enable()', function ( flag ) { return this.iterator( 'table', function ( ctx ) { var fh = ctx._fixedHeader; if ( fh ) { fh.enable( flag !== undefined ? flag : true ); } } ); } ); DataTable.Api.register( 'fixedHeader.disable()', function ( ) { return this.iterator( 'table', function ( ctx ) { var fh = ctx._fixedHeader; if ( fh ) { fh.enable( false ); } } ); } ); $.each( ['header', 'footer'], function ( i, el ) { DataTable.Api.register( 'fixedHeader.'+el+'Offset()', function ( offset ) { var ctx = this.context; if ( offset === undefined ) { return ctx.length && ctx[0]._fixedHeader ? ctx[0]._fixedHeader[el +'Offset']() : undefined; } return this.iterator( 'table', function ( ctx ) { var fh = ctx._fixedHeader; if ( fh ) { fh[ el +'Offset' ]( offset ); } } ); } ); } ); return FixedHeader; })); MediaConch/Source/Resource/html/js/database/0000755000000000000000000000000013216666133017730 5ustar rootrootMediaConch/Source/Resource/html/js/database/database.js0000644000000000000000000001004213216666133022027 0ustar rootrootvar database = (function() { var init = function() { mcoMessage.init('#databaseInfo div'); databaseTable.init(); databaseAjax.init(); } var load = function() { databaseAjax.loadTree(); // Remove all file blocks $('#checkerResults .close').on('click', function(e) { e.preventDefault(); databaseAjax.removeAllFiles(); databaseTable.clear(); // Remove close all button $(this).addClass('hidden'); }); } return { init: init, load: load, }; })(); var databaseTable = (function() { var init = function() { result = $('#result-table').DataTable({ order: [0, 'asc'], autoWidth: false, lengthMenu: [10, 50, 100, 1000], pageLength: 100, fixedHeader: { headerOffset: $('#mco-navbar').outerHeight(true) }, columnDefs: [ { orderable: true, targets: 0 }, { orderable: false, searchable: false, targets: 1, width: '100px' }, ] }); resultRowHoverBinding(); }; // Add file to table var addFile = function(file) { var node = result.row.add( [ '' + file.name + '', ' ' ] ).node(); var nodej = $(node); // Add id nodej.prop('id', 'result-' + file.id); nodej.addClass('fileId-' + file.id); nodej.data('fileId', file.id); $(result.cell(node, 0).node()).addClass('containerAutoWidth'); $(result.cell(node, 1).node()).addClass('text-center'); // Delete button nodej.find('.result-close').click(node, function(e) { var id = $(result.row(e.data).node()).data('fileId'); databaseAjax.removeFile(id); result.row(e.data).remove().draw(false); // Remove delete all button if (1 == $('table.checker-results tbody tr').length && $('table.checker-results tbody tr .dataTables_empty').length) { $('#checkerResults .close').addClass('hidden'); }; }); // Add to checker button nodej.find('.add-checker').click(node, function(e) { var id = $(result.row(e.data).node()).data('fileId'); databaseAjax.addFileChecker(id); }); // Display delete all button $('#checkerResults .close').removeClass('hidden'); } // Redraw the table var draw = function() { result.draw(false); }; // Clear the table var clear = function() { result.clear().draw(); }; // Display actions button on hover var resultRowHoverBinding = function() { result.on('draw.dt', function() { result.$('tr').off('mouseenter'); result.$('tr').off('mouseleave'); // Display buttons on checker result result.$('tr').on('mouseenter', function() { $(this).find('.statusButton').removeClass('hidden'); }); result.$('tr').on('mouseleave', function() { $(this).find('.statusButton').addClass('hidden'); }); }); }; return { init: init, addFile: addFile, draw: draw, clear: clear, }; })(); $(document).ready(function() { (function loop_init(time) { setTimeout(function() { if (webpage === undefined) loop_init(100); else { database.init(); database.load(); } }, time); })(0); }); MediaConch/Source/Resource/html/js/database/databaseWebEngine.js0000644000000000000000000000311013216666133023611 0ustar rootrootvar databaseAjax = (function() { var init = function() { } var loadTree = function() { webpage.checker_list(function(res) { var data = JSON.parse(res); var success = 0; $.each(data.files, function(idx, val) { success++; databaseTable.addFile(val); }); if (success > 0) { databaseTable.draw(); } else if (data.error && data.error.length) mcoMessage.error(data.error); }); } var addFileChecker = function(id) { webpage.add_file_to_checker_again(id, function (res) { var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); else if (data.success && data.success.length) mcoMessage.success(data.success); }); } var removeFile = function(id) { webpage.remove_file_from_db(id, function(res) { var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); }); } var removeAllFiles = function() { webpage.remove_all_files_from_db(function(res) { var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); }); } return { init: init, loadTree: loadTree, addFileChecker: addFileChecker, removeFile: removeFile, removeAllFiles: removeAllFiles, }; })(); MediaConch/Source/Resource/html/js/database/databaseWebKit.js0000644000000000000000000000265713216666133023152 0ustar rootrootvar databaseAjax = (function() { var init = function() { } var loadTree = function() { var res = webpage.checker_list(); var data = JSON.parse(res); var success = 0; $.each(data.files, function(idx, val) { success++; databaseTable.addFile(val); }); if (success > 0) { databaseTable.draw(); } else if (data.error && data.error.length) mcoMessage.error(data.error); } var addFileChecker = function(id) { var res = webpage.add_file_to_checker_again(id); var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); else if (data.success && data.success.length) mcoMessage.success(data.success); } var removeFile = function(id) { var res = webpage.remove_file_from_db(id); var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); } var removeAllFiles = function() { var res = webpage.remove_all_files_from_db(); var data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); } return { init: init, loadTree: loadTree, addFileChecker: addFileChecker, removeFile: removeFile, removeAllFiles: removeAllFiles, }; })(); MediaConch/Source/Resource/html/js/policyWebKit.js0000644000000000000000000003073613216666133021140 0ustar rootrootvar policyTreeAjax = (function() { var getData = function() { /** * Get the json for jstree * * @return json * {"policiesTree":POLICIES_JSTREE_JSON} */ res = webpage.get_policies_tree(); data = JSON.parse(res); if (!data.error) policyTree.setData(data.policiesTree); else mcoMessage.error(data.error); }; var policyImport = function(form) { /** * Import a policy from an XML (the XML is provided as POST data from a form) * * Call policy_import and policy_get * * @return json * {"policy":POLICY_JSTREE_JSON} */ res = webpage.import_policy(); data = JSON.parse(res); $("#xslPolicyImport_policyFile").val(""); if (!data.error) policyTree.policyImport(data.policyTree); else mcoMessage.error(data.error); } var policyDropped = function(data) { // data = JSON.parse(res); if (!data.error) policyTree.policyImport(data.policyTree); else mcoMessage.error(data.error); } var policyCreateFromFile = function(form) { createPolicyFromFile.addSpinner(); /** * Create a policy from a file (the file is provided as POST data from a form) * * @return json * {"policy":POLICY_JSTREE_JSON} */ res = webpage.policy_from_file(); data = JSON.parse(res); $("#xslPolicyCreateFromFile_file").val(""); if (data.error) { mcoMessage.error(data.error); createPolicyFromFile.removeSpinner(); } } var policyCreateFromFileCallback = function(policyId) { res = webpage.policy_get_jstree(policyId); data = JSON.parse(res); if (!data.error) { policyTree.policyCreateFromFile(data.policyTree); createPolicyFromFile.removeSpinner(); } else { mcoMessage.error(data.error); createPolicyFromFile.removeSpinner(); } } var policyCreate = function(policyNode, parentId) { /** * Create a policy * @param int parentId policy ID in which the new policy will be created * * Call xslt_policy_create and policy_get * * @return json * {"policy":POLICY_JSTREE_JSON} */ res = webpage.xslt_policy_create(parentId); data = JSON.parse(res); if (!data.error) policyTree.policyCreate(data.policyTree, policyNode); else mcoMessage.error(data.error); } var policyEdit = function(form, policyNode) { /** * Edit a policy (POST data from a form) * @param int id policy ID of the policy to edit * * @return json * {"policy":POLICY_JSTREE_JSON} */ var name = $("#xslPolicyInfo_policyName").val(); if (name === null) name = ""; var description = $("#xslPolicyInfo_policyDescription").val(); if (description === null) description = ""; var type = $("#xslPolicyInfo_policyType").val(); if (type === null) type = ""; var license = $("#xslPolicyInfo_policyLicense").val(); if (license === null || license === "Other") license = ""; var visibility = $("#xslPolicyInfo_policyVisibility").val(); if (visibility === null) visibility = ""; res = webpage.policy_edit(policyNode.data.policyId, name, description, license, type, visibility); data = JSON.parse(res); if (!data.error) policyTree.policyEdit(data.policyTree, policyNode); else mcoMessage.error(data.error); } var policyDelete = function(policyNode) { /** * Delete a policy * @param int id policy ID of the policy to duplicate * * @return json * {"policyId":ID} */ res = webpage.policy_remove(policyNode.data.policyId); data = JSON.parse(res); if (!data.error) policyTree.policyDelete(policyNode); else mcoMessage.error(data.error); } var policyExport = function(policyNode) { /** * Export XML of a policy * @param int id policy ID of the policy to export * * @return XML */ res = webpage.policy_export(policyNode.data.policyId); data = JSON.parse(res); if (data.error) mcoMessage.error(data.error); } var policyDuplicate = function(policyNode, dstNode) { /** * Duplicate a policy * @param int id policy ID of the policy to duplicate * @param int dstPolicyId policy ID of the destination policy * * @return json * {"policy":POLICY_JSTREE_JSON} */ res = webpage.policy_duplicate(policyNode.data.policyId, policyTree.getPolicyId(dstNode)); data = JSON.parse(res); if (!data.error) policyTree.policyDuplicate(data.policyTree, dstNode); else mcoMessage.error(data.error); } var policyMove = function(policyNode, dstNode) { /** * Move a policy * @param int id policy ID of the policy to duplicate * @param int dstPolicyId policy ID of the destination policy * * @return json * {"policy":POLICY_JSTREE_JSON} */ res = webpage.policy_move(policyNode.data.policyId, policyTree.getPolicyId(dstNode)); data = JSON.parse(res); if (!data.error) policyTree.policyMove(data.policyTree, dstNode, policyNode); else mcoMessage.error(data.error); } var ruleCreate = function(policyNode) { /** * Add a rule to a policy * @param int policyId policy ID of the policy that will contain the rule * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ res = webpage.xslt_policy_rule_create(policyNode.data.policyId); data = JSON.parse(res); if (!data.error) policyTree.ruleCreate(data.rule, policyNode); else mcoMessage.error(data.error); } var ruleEdit = function(form, policyId, ruleNode) { /** * Edit a rule (POST data from a form) * @param int id rule ID of the rule to edit * @param int policyId policy ID of the policy that contain the rule * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ var scope = ""; var name = ""; var tracktype = ""; var field = ""; var occurrence = -1; var ope = ""; var value = ""; if ($(".ruleMediaTrace").hasClass("active")) scope = "mmt"; if (scope === "mmt") { name = $("#xslPolicyRuleMt_title").val(); if (name === null) name = ""; field = $("#xslPolicyRuleMt_field").val(); if (field === null) field = ""; ope = $("#xslPolicyRuleMt_validator").val(); if (ope === null) ope = ""; value = $("#xslPolicyRuleMt_value").val(); if (value === null) value = ""; } else { name = $("#xslPolicyRule_title").val(); if (name === null) name = ""; tracktype = $("#xslPolicyRule_trackType").val(); if (tracktype === null) tracktype = ""; field = $("#xslPolicyRule_field").val(); if (field === null) field = ""; occurrence = $("#xslPolicyRule_occurrence").val(); if (occurrence === null || occurrence === "*" || occurrence === "") occurrence = -1; ope = $("#xslPolicyRule_validator").val(); if (ope === null) ope = ""; value = $("#xslPolicyRule_value").val(); if (value === null) value = ""; } res = webpage.xslt_policy_rule_edit(ruleNode.data.ruleId, policyId, name, tracktype, field, occurrence, ope, value, scope); data = JSON.parse(res); if (!data.error) policyTree.ruleEdit(data.rule, ruleNode); else mcoMessage.error(data.error); } var ruleDelete = function(policyId, ruleNode) { /** * Delete a rule * @param int id rule ID of the rule to delete * @param int policyId policy ID of the policy that contain the rule * * @return json * {"id":RULE_ID} */ res = webpage.xslt_policy_rule_delete(policyId, ruleNode.data.ruleId); data = JSON.parse(res); if (!data.error) policyTree.ruleDelete(ruleNode); else mcoMessage.error(data.error); } var ruleDuplicate = function(policyId, ruleNode, dstNode) { /** * Duplicate a rule * @param int id rule ID of the rule to duplicate * @param int policyId policy ID of the policy that contain the rule * @param int dstPolicyId policy ID of the destination policy * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ res = webpage.xslt_policy_rule_duplicate(policyId, ruleNode.data.ruleId, dstNode.data.policyId); data = JSON.parse(res); if (!data.error) policyTree.ruleDuplicate(data.rule, dstNode); else mcoMessage.error(data.error); } var ruleMove = function(policyId, ruleNode, dstNode) { /** * Move a rule * @param int id rule ID of the rule to move * @param int policyId policy ID of the policy that contain the rule * @param int dstPolicyId policy ID of the destination policy * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ res = webpage.xslt_policy_rule_move(policyId, ruleNode.data.ruleId, policyTree.getPolicyId(dstNode)); data = JSON.parse(res); if (!data.error) policyTree.ruleMove(data.rule, dstNode, ruleNode); else mcoMessage.error(data.error); } var getFieldsList = function(trackType, field) { /** * Get list of fields for a trackType (POST : type and field) * * @return json */ if (trackType === null) trackType = ""; if (field === null) field = ""; res = webpage.get_fields_list(trackType, field); data = JSON.parse(res); if (!data.error) policyTreeRulesMI.fieldsListOk(data.fields, field) else policyTreeRulesMI.fieldsListError(field); } var getValuesList = function(trackType, field, value) { /** * Get list of values for a trackType and a field (POST : type, field and value) * * @return json */ if (trackType === null) trackType = ""; if (field === null) field = ""; if (value === null) value = ""; res = webpage.get_values_list(trackType, field, value); data = JSON.parse(res); if (!data.error) policyTreeRulesMI.valuesListOk(data.values, value); else policyTreeRulesMI.valuesListError(value); } return { getData: getData, policyImport: policyImport, policyDropped: policyDropped, policyCreateFromFile: policyCreateFromFile, policyCreateFromFileCallback: policyCreateFromFileCallback, policyCreate: policyCreate, policyEdit: policyEdit, policyDelete: policyDelete, policyDuplicate: policyDuplicate, policyMove: policyMove, policyExport: policyExport, ruleCreate: ruleCreate, ruleEdit: ruleEdit, ruleDelete: ruleDelete, ruleDuplicate: ruleDuplicate, ruleMove: ruleMove, getFieldsList: getFieldsList, getValuesList: getValuesList, }; })(); MediaConch/Source/Resource/html/js/bootstrap.min.js0000644000000000000000000011026513216666133021326 0ustar rootroot/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under the MIT license */ if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
      ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);MediaConch/Source/Resource/html/js/policyTreePolicies.js0000644000000000000000000001054113216666133022332 0ustar rootrootvar policyTreePolicies = (function() { var manage = function(node) { $('.policyManage').removeClass('hidden'); $('.policyEdit').addClass('hidden'); $('.policyEditRule').addClass('hidden'); } var edit = function(node) { $('#xslPolicyInfo_policyName').val(getName(node)); $('#xslPolicyInfo_policyDescription').val(node.data.description); $('#xslPolicyInfo_policyType option[value="' + node.data.type + '"]').prop('selected', true); if ('s' == node.type || ('u' == node.type && !node.data.isEditable) ) { $('#policyDelete').removeClass('hidden'); $('#policyRuleCreateContainer').addClass('hidden'); $('#xslPolicyInfo_policyName').prop('disabled', true); $('#xslPolicyInfo_policyDescription').prop('disabled', true); $('#xslPolicyInfo_policyType').prop('disabled', true); $('#xslPolicyInfo_SavePolicyInfo').addClass('hidden'); $('.policyEditActions.policyEditUser').addClass('hidden'); $('.policyEditActions.policyVisibility').addClass('hidden'); // if ($('#xslPolicyInfo_policyVisibility').length) { // $('#xslPolicyInfo_policyVisibility').prop('disabled', true); // } if ($('#xslPolicyInfo_policyLicense').length) { $('#xslPolicyInfo_policyLicense').prop('disabled', true); } } else { $('#policyDelete').removeClass('hidden'); $('#policyRuleCreateContainer').removeClass('hidden'); $('#xslPolicyInfo_policyName').prop('disabled', false); $('#xslPolicyInfo_policyDescription').prop('disabled', false); $('#xslPolicyInfo_policyType').prop('disabled', false); $('#xslPolicyInfo_SavePolicyInfo').removeClass('hidden'); $('.policyEditActions.policyEditUser').removeClass('hidden'); $('.policyEditActions.policyVisibility').addClass('hidden'); // if ($('#xslPolicyInfo_policyVisibility').length) { // $('#xslPolicyInfo_policyVisibility').prop('disabled', false); // } if ($('#xslPolicyInfo_policyLicense').length) { $('#xslPolicyInfo_policyLicense').prop('disabled', false); } } if ('s' == node.type) { $('#policyDelete').addClass('hidden'); } // Top level if ('u_p' == node.parent || 's_p' == node.parent) { $('#xslPolicyInfo_policyTopLevel').val(1); // License $('#xslPolicyInfo_policyLicense').parent().removeClass('hidden'); if (undefined === node.data.license || !$('#xslPolicyInfo_policyLicense option[value="' + node.data.license + '"]').length) { // Select Other license by default if field is empty (old policy) $('#xslPolicyInfo_policyLicense option:last').prop('selected', true); } else { $('#xslPolicyInfo_policyLicense option[value="' + node.data.license + '"]').prop('selected', true); } // Visibility if ($('#xslPolicyInfo_policyVisibility').length) { $('#xslPolicyInfo_policyVisibility').parent().addClass('hidden'); // $('#xslPolicyInfo_policyVisibility').parent().removeClass('hidden'); // $('#xslPolicyInfo_policyVisibility option[value="' + (true == node.data.isPublic ? 1 : 0) + '"]').prop('selected', true); } } else { $('#xslPolicyInfo_policyTopLevel').val(0); // License $('#xslPolicyInfo_policyLicense').parent().addClass('hidden'); // Visibility if ($('#xslPolicyInfo_policyVisibility').length) { $('#xslPolicyInfo_policyVisibility').parent().addClass('hidden'); } } $('.policyManage').addClass('hidden'); $('.policyEdit').removeClass('hidden'); $('.policyEditRule').addClass('hidden'); } // Remove (or|and) from policy name var getName = function(node) { if ('XSLT' == node.data.kind) { var regex = /(.*) \((or|and)\)$/i; if (null != regex.exec(node.text)) { return regex.exec(node.text)[1]; } } return node.text; } return { manage: manage, edit: edit, } })(); MediaConch/Source/Resource/html/js/jstree.min.js0000644000000000000000000040611313216666133020605 0ustar rootroot/*! jsTree - v3.3.3 - 2016-10-31 - (MIT) */ !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document;a.jstree={version:"3.3.3",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html("
      "),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().height()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","treeitem"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",a.proxy(function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)},this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",a.proxy(function(a){this.toggle_node(a.target)},this)).on("dblclick.jstree",".jstree-anchor",a.proxy(function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).focus(),this.activate_node(b.currentTarget,b)},this)).on("keydown.jstree",".jstree-anchor",a.proxy(function(b){if(b.target.tagName&&"input"===b.target.tagName.toLowerCase())return!0;if(32!==b.which&&13!==b.which&&(b.shiftKey||b.ctrlKey||b.altKey||b.metaKey))return!0;var c=null;switch(this._data.core.rtl&&(37===b.which?b.which=39:39===b.which&&(b.which=37)),b.which){case 32:b.ctrlKey&&(b.type="click",a(b.currentTarget).trigger(b));break;case 13:b.type="click",a(b.currentTarget).trigger(b);break;case 37:b.preventDefault(),this.is_open(b.currentTarget)?this.close_node(b.currentTarget):(c=this.get_parent(b.currentTarget),c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").focus());break;case 38:b.preventDefault(),c=this.get_prev_dom(b.currentTarget),c&&c.length&&c.children(".jstree-anchor").focus();break;case 39:b.preventDefault(),this.is_closed(b.currentTarget)?this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").focus()}):this.is_open(b.currentTarget)&&(c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0],c&&a(this._firstChild(c)).children(".jstree-anchor").focus());break;case 40:b.preventDefault(),c=this.get_next_dom(b.currentTarget),c&&c.length&&c.children(".jstree-anchor").focus();break;case 106:this.open_all();break;case 36:b.preventDefault(),c=this._firstChild(this.get_container_ul()[0]),c&&a(c).children(".jstree-anchor").filter(":visible").focus();break;case 35:b.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().focus();break;case 113:b.preventDefault(),this.edit(b.currentTarget)}},this)).on("load_node.jstree",a.proxy(function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(a.proxy(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}},this),0))},this)).on("keypress.jstree",a.proxy(function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return}},this)).on("init.jstree",a.proxy(function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)},this)).on("loading.jstree",a.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()},this)).on("blur.jstree",".jstree-anchor",a.proxy(function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").mouseleave(),this.element.attr("tabindex","0")},this)).on("focus.jstree",".jstree-anchor",a.proxy(function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).mouseleave(),a(b.currentTarget).mouseenter(),this.element.attr("tabindex","-1")},this)).on("focus.jstree",a.proxy(function(){if(+new Date-d>500&&!this._data.core.focused){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").focus()}},this)).on("mouseenter.jstree",".jstree-anchor",a.proxy(function(a){this.hover_node(a.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.isFunction(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=a(b,this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=a(b,this.element)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.isArray(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,a.proxy(function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)},this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.isFunction(d)?d.call(this,b,a.proxy(function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})},this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.isFunction(d.url)&&(d.url=d.url.call(this,b)),a.isFunction(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(a.proxy(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))},this)).fail(a.proxy(function(a){c.call(this,!1),this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},this.settings.core.error.call(this,this._data.core.last_error)},this))):(e=a.isArray(d)||a.isPlainObject(d)?JSON.parse(JSON.stringify(d)):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(a){a=this.get_node(a),a&&this._model.changed.push(a.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(a.proxy(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))},this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.isArray(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],h=a.df,i=a.t_id,j=a.t_cnt,k=a.m,l=k[d],m=a.sel,n,o,p,q,r=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,i,j,l,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(m.state[f]=h[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),k[m.id]=m,f=0,i=m.children.length;i>f;f++)j=r(k[m.children[f]],m.id,d),l=k[j],m.children_d.push(j),l.children_d.length&&(m.children_d=m.children_d.concat(l.children_d));return delete a.data,delete a.children,k[m.id].original=a,m.state.selected&&g.push(m.id),m.id},s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,l,m,n,o;do e="j"+i+"_"+ ++j;while(k[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(o.state[f]=h[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,l=a.children.length;l>f;f++)m=s(a.children[f],o.id,d),n=k[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,k[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(o=0,p=c.length;p>o;o++)c[o].children||(c[o].children=[]),k[c[o].id.toString()]=c[o];for(o=0,p=c.length;p>o;o++)k[c[o].parent.toString()].children.push(c[o].id.toString()),l.children_d.push(c[o].id.toString());for(o=0,p=l.children.length;p>o;o++)n=r(k[l.children[o]],d,l.parents.concat()),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d));for(o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}else{for(o=0,p=c.length;p>o;o++)n=s(c[o],d,l.parents.concat()),n&&(e.push(n),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d)));for(l.children=e,l.children_d=f,o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?q:void postMessage(q)},i=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,h=b.add,i=b.sel,j=this._data.core.selected.slice();if(f=this._model.data,i.length!==j.length||a.vakata.array_unique(i.concat(j)).length!==i.length){for(e=0,g=i.length;g>e;e++)-1===a.inArray(i[e],h)&&-1===a.inArray(i[e],j)&&(f[i[e]].state.selected=!1);for(e=0,g=j.length;g>e;e++)-1===a.inArray(j[e],i)&&(f[j[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+h.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=a.proxy(function(a){i.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1},this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(j){i.call(this,h(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else i.call(this,h(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("
      ").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(a.proxy(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))},this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]);if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children_d.concat(l.children)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").focus():this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1; if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.setAttribute("aria-selected",!!f.state.selected),b.setAttribute("aria-level",f.parents.length),b.setAttribute("aria-labelledby",f.a_attr.id),f.state.disabled&&b.setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,hf;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(a.proxy(function(){this.open_node(c,d,e)},this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.attr("aria-expanded",!1).children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.isArray(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.attr("aria-selected",!0).children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").parent().attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},get_state:function(){var b={core:{open:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core){var e,f,g,h,i;if(c.core.open)return a.isArray(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)}),delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.isFunction(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,a.proxy(function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})},this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),"string"==typeof d&&(d={text:d}),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),f&&f.call(this,this.get_node(d)),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),d.id},rename_node:function(b,c){var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").focus():this.get_node(e,!0).children(".jstree-anchor").focus(),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;return"move_node"!==b&&"copy_node"!==b||f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)?(g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.isFunction(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0):(this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1)},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()),!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.settings.core.check_callback===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_07",reason:"Could not edit node because of check_callback"},this.settings.core.error.call(this,this._data.core.last_error),!1):(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").focus(),h=a(""),j=c,k=a("
      ",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo("body"),l=a("",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:a.proxy(function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("
      ").append(a.parseHTML(j)).html(),this.set_text(b,j),m=!!this.rename_node(b,i?a("
      ").text(f).text():a("
      ").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(a.proxy(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").focus())},this),0),d&&d.call(this,n,m,o),l=null},this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"", fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).blur()})):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append(''),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?this.hide_icon(c):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var j=i.createElement("I");j.className="jstree-icon jstree-checkbox",j.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",a.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")},this)).on("loading.jstree",a.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",a.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)},this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",a.proxy(function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])},this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",a.proxy(function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",a.proxy(function(b,c){var d=c.node,e=this._model.data,f=this.get_node(d.parent),g=this.get_node(d,!0),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down"))for(h=0,i=d.children_d.length;i>h;h++)n[d.children_d[h]]=!0,k=e[d.children_d[h]],k.state[m?"selected":"checked"]=!0,k&&k.original&&k.original.state&&k.original.state.undetermined&&(k.original.state.undetermined=!1);if(-1!==l.indexOf("up"))while(f&&f.id!==a.jstree.root){for(j=0,h=0,i=f.children.length;i>h;h++)j+=e[f.children[h]].state[m?"selected":"checked"];if(j!==i)break;f.state[m?"selected":"checked"]=!0,n[f.id]=!0,k=this.get_node(f,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),f=this.get_node(f.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o,-1!==l.indexOf("down")&&g.length&&g.find(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!0)},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",a.proxy(function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",a.proxy(function(b,c){var d=c.node,e=this.get_node(d,!0),f,g,h,i=this.settings.checkbox.cascade,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l={};if(d&&d.original&&d.original.state&&d.original.state.undetermined&&(d.original.state.undetermined=!1),-1!==i.indexOf("down"))for(f=0,g=d.children_d.length;g>f;f++)h=this._model.data[d.children_d[f]],h.state[j?"selected":"checked"]=!1,h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1);if(-1!==i.indexOf("up"))for(f=0,g=d.parents.length;g>f;f++)h=this._model.data[d.parents[f]],h.state[j?"selected":"checked"]=!1,h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1),h=this.get_node(d.parents[f],!0),h&&h.length&&h.attr("aria-selected",!1).children(".jstree-anchor").removeClass(j?"jstree-clicked":"jstree-checked");for(l={},f=0,g=k.length;g>f;f++)-1!==i.indexOf("down")&&-1!==a.inArray(k[f],d.children_d)||-1!==i.indexOf("up")&&-1!==a.inArray(k[f],d.parents)||(l[k[f]]=!0);k=[];for(f in l)l.hasOwnProperty(f)&&k.push(f);this._data[j?"core":"checkbox"].selected=k,-1!==i.indexOf("down")&&e.length&&e.find(".jstree-anchor").removeClass(j?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!1)},this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",a.proxy(function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}},this)).on("move_node.jstree",a.proxy(function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}},this))},this._undetermined=function(){if(null!==this.element){var c,d,e,f,g={},h=this._model.data,i=this.settings.checkbox.tie_selection,j=this._data[i?"core":"checkbox"].selected,k=[],l=this;for(c=0,d=j.length;d>c;c++)if(h[j[c]]&&h[j[c]].parents)for(e=0,f=h[j[c]].parents.length;f>e;e++){if(g[h[j[c]].parents[e]]!==b)break;h[j[c]].parents[e]!==a.jstree.root&&(g[h[j[c]].parents[e]]=!0,k.push(h[j[c]].parents[e]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var i=l.get_node(this),j;if(i.state.loaded){for(c=0,d=i.children_d.length;d>c;c++)if(j=h[i.children_d[c]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(g[j.id]===b&&j.id!==a.jstree.root&&(g[j.id]=!0,k.push(j.id)),e=0,f=j.parents.length;f>e;e++)g[j.parents[e]]===b&&j.parents[e]!==a.jstree.root&&(g[j.parents[e]]=!0,k.push(j.parents[e]))}else if(i.original&&i.original.state&&i.original.state.undetermined&&i.original.state.undetermined===!0)for(g[i.id]===b&&i.id!==a.jstree.root&&(g[i.id]=!0,k.push(i.id)),e=0,f=i.parents.length;f>e;e++)g[i.parents[e]]===b&&i.parents[e]!==a.jstree.root&&(g[i.parents[e]]=!0,k.push(i.parents[e]))}),this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),c=0,d=k.length;d>c;c++)h[k[c]].state[i?"selected":"checked"]||(j=this.get_node(k[c],!0),j&&j.length&&j.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined"))}},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments)){var g,h,i=null,k=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(!this.settings.checkbox.tie_selection&&this._model.data[b.id].state.checked&&(i.className+=" jstree-checked"),k=j.cloneNode(!1),this._model.data[b.id].state.checkbox_disabled&&(k.className+=" jstree-checkbox-disabled"),i.insertBefore(k,i.childNodes[0]))}return e||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)),b},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this.check_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.select_node(b,!1,!0,c);var d,e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.checkbox.selected},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.isArray(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection||(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){this.settings.conditionalselect.call(this,this.get_node(a),c)&&b.activate_node.call(this,a,c)}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){setTimeout(function(){c.edit(a)},0)})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("contextmenu.jstree",".jstree-anchor",a.proxy(function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0},this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(a){c&&a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0]&&(Math.abs(e-a.originalEvent.changedTouches[0].clientX)>50||Math.abs(f-a.originalEvent.changedTouches[0].clientY)>50)&&clearTimeout(c)}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",a.proxy(function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")},this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.isFunction(k)&&(k=k.call(this,c,a.proxy(function(a){this._show_contextmenu(c,d,e,a)},this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",a.proxy(function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")},this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.isFunction(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+=""),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,i,j,k,l,m,n,o=!0;switch(c.element&&c.element.length&&c.element.width(""),o){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo("body"),h=c.element,i=c.position_x,j=c.position_y,k=h.width(),l=h.height(),m=a(window).width()+a(window).scrollLeft(),n=a(window).height()+a(window).scrollTop(),b&&(i-=h.outerWidth()-a(d).outerWidth(),im&&(i=m-(k+20)),j+l+20>n&&(j=n-(l+20)),c.element.css({left:i,top:j}).show().find("a").first().focus().parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").blur().end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a("body").css("direction");var d=!1;c.element=a("
        "),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).blur().parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(), d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.click()}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var k,l;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",a.proxy(function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(k={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},l=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,k,'
        '+e+'
        ');a.vakata.dnd._trigger("start",b,{helper:a(),element:l,data:k})}},this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k}),!1}).on("drop.jstree",a.proxy(function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),!1},this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('
         
        ').hide();a(i).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo("body")}).on("dnd_move.vakata.jstree",function(h,i){if(f&&(i.event&&"dragover"===i.event.type&&i.event.target===e.target||clearTimeout(f)),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var j=a.jstree.reference(i.event.target),k=!1,l=!1,m=!1,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D;if(j&&j._data&&j._data.dnd)if(g.attr("class","jstree-"+j.get_theme()+(j.settings.core.themes.responsive?" jstree-dnd-responsive":"")),C=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+j.get_theme()+" jstree-"+j.get_theme()+"-"+j.get_theme_variant()+" "+(j.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[C?"show":"hide"](),i.event.target!==j.element[0]&&i.event.target!==j.get_container_ul()[0]||0!==j.get_container_ul().children().length){if(k=j.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),k&&k.length&&k.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(l=k.offset(),m=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-l.top,q=k.outerHeight(),t=q/3>m?["b","i","a"]:m>q-q/3?["a","i","b"]:m>q/2?["i","a","b"]:["i","b","a"],a.each(t,function(b,e){switch(e){case"b":o=l.left-6,p=l.top,r=j.get_parent(k),s=k.parent().index();break;case"i":A=j.settings.dnd.inside_pos,B=j.get_node(k.parent()),o=l.left-2,p=l.top+q/2+1,r=B.id,s="first"===A?0:"last"===A?B.children.length:Math.min(A,B.children.length);break;case"a":o=l.left-6,p=l.top+q,r=j.get_parent(k),s=k.parent().index()+1}for(u=!0,v=0,w=i.data.nodes.length;w>v;v++)if(x=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",y=s,"move_node"===x&&"a"===e&&i.data.origin&&i.data.origin===j&&r===j.get_parent(i.data.nodes[v])&&(z=j.get_node(r),y>a.inArray(i.data.nodes[v],z.children)&&(y-=1)),u=u&&(j&&j.settings&&j.settings.dnd&&j.settings.dnd.check_while_dragging===!1||j.check(x,i.data.origin&&i.data.origin!==j?i.data.origin.get_node(i.data.nodes[v]):i.data.nodes[v],r,y,{dnd:!0,ref:j.get_node(k.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==j,is_foreign:!i.data.origin})),!u){j&&j.last_error&&(d=j.last_error());break}return"i"===e&&k.parent().is(".jstree-closed")&&j.settings.dnd.open_timeout&&(f=setTimeout(function(a,b){return function(){a.open_node(b)}}(j,k),j.settings.dnd.open_timeout)),u?(D=j.get_node(r,!0),D.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),D.addClass("jstree-dnd-parent")),c={ins:j,par:r,pos:"i"!==e||"last"!==A||0!==s||j.is_loaded(B)?s:"last"},g.css({left:o+"px",top:p+"px"}).show(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=C?"copy":"move"),d={},t=!0,!1):void 0}),t===!0))return}else{for(u=!0,v=0,w=i.data.nodes.length;w>v;v++)if(u=u&&j.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==j?i.data.origin.get_node(i.data.nodes[v]):i.data.nodes[v],a.jstree.root,"last",{dnd:!0,ref:j.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==j,is_foreign:!i.data.origin}),!u)break;if(u)return c={ins:j,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=C?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect="none"),g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("
        "),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:50},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("
        ").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo("body"),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageYthis.offsetWidth&&(e.left+d.width()-b.pageXg&&b.pageY-kg&&g-(b.pageY-k)j&&b.pageX-lj&&j-(b.pageX-l)f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).click()},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=JSON.stringify(b),i=[],j=this._model.data,k,l,m;if(!e){for(k=0,l=b.length;l>k;k++)(!j[b[k]]||!j[b[k]].state.loaded&&!j[b[k]].state.failed||f)&&(i.push(b[k]),m=this.get_node(b[k],!0),m&&m.length&&m.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},i.length){if(a.isFunction(g))return g.call(this,i,a.proxy(function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)m=this.get_node(b[g],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.isFunction(g.url)&&(g.url=g.url.call(this,i)),a.isFunction(g.data)&&(g.data=g.data.call(this,i)),a.ajax(g).done(a.proxy(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)m=this.get_node(b[i],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this)).fail(a.proxy(function(a){c._load_nodes.call(this,b,d,e,f)},this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",a.proxy(function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}},this)).on("clear_search.jstree",a.proxy(function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))},this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.isFunction(j)?j.call(this,c,a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(a.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("model.jstree",a.proxy(function(a,b){this.sort(b.parent,!0)},this)).on("rename_node.jstree create_node.jstree",a.proxy(function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",a.proxy(function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)},this))},this.sort=function(b,c){var d,e;if(b=this.get_node(b),b&&b.children&&b.children.length&&(b.children.sort(a.proxy(this.settings.sort,this)),c))for(d=0,e=b.children_d.length;e>d;d++)this.sort(b.children_d[d],!1)}};var m=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var b=a.proxy(function(){this.element.on(this.settings.state.events,a.proxy(function(){m&&clearTimeout(m),m=setTimeout(a.proxy(function(){this.save_state()},this),100)},this)),this.trigger("state_ready")},this);this.element.on("ready.jstree",a.proxy(function(a,c){this.element.one("restore_state.jstree",b),this.restore_state()||b()},this))},this.save_state=function(){var b={state:this.get_state(),ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(b))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.isFunction(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",a.proxy(function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root},this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.isArray(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default",c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.isArray(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.isArray(b.children)&&(b.children=this._delete_ids(b.children)),b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depthg;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1; if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this._model.data,l,m;for(l=0,m=e.children.length;m>l;l++)i.push(j?k[e.children[l]].text:k[e.children[l]].text.toLowerCase());switch(j||(h=h.toLowerCase()),b){case"delete_node":return!0;case"rename_node":return l=-1===a.inArray(h,i)||c.text&&c.text[j?"toString":"toLowerCase"]()===h,l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"create_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"copy_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"move_node":return l=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.duplicate;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)k.push(o?n[c.children[l]].text:n[c.children[l]].text.toLowerCase());l=1;while(-1!==a.inArray(o?j:j.toLowerCase(),k))j=p.call(this,i,++l).toString();e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var n=i.createElement("DIV");if(n.setAttribute("unselectable","on"),n.setAttribute("role","presentation"),n.className="jstree-wholerow",n.innerHTML=" ",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",a.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",a.proxy(function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",a.proxy(function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",a.proxy(function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}},this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",a.proxy(function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",a.proxy(function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=n.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},i.registerElement&&Object&&Object.create){var o=Object.create(HTMLElement.prototype);o.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{i.registerElement("vakata-jstree",{prototype:o})}catch(p){}}}});MediaConch/Source/Resource/html/js/policyWebEngine.js0000644000000000000000000003221113216666133021604 0ustar rootrootvar policyTreeAjax = (function() { var getData = function() { /** * Get the json for jstree * * @return json * {"policiesTree":POLICIES_JSTREE_JSON} */ webpage.get_policies_tree(function(res){ data = JSON.parse(res); if (!data.error) policyTree.setData(data.policiesTree); else mcoMessage.error(data.error); }); }; var policyImport = function(form) { /** * Import a policy from an XML (the XML is provided as POST data from a form) * * Call policy_import and policy_get * * @return json * {"policy":POLICY_JSTREE_JSON} */ webpage.import_policy(function(res){ data = JSON.parse(res); $("#xslPolicyImport_policyFile").val(""); if (!data.error) policyTree.policyImport(data.policyTree); else mcoMessage.error(data.error); }); } var policyDropped = function(data) { // data = JSON.parse(res); if (!data.error) policyTree.policyImport(data.policyTree); else mcoMessage.error(data.error); } var policyCreateFromFile = function(form) { createPolicyFromFile.addSpinner(); /** * Create a policy from a file (the file is provided as POST data from a form) * * @return json * {"policy":POLICY_JSTREE_JSON} */ webpage.policy_from_file(function(res) { data = JSON.parse(res); $("#xslPolicyCreateFromFile_file").val(""); if (data.error) { mcoMessage.error(data.error); createPolicyFromFile.removeSpinner(); } }); } var policyCreateFromFileCallback = function(policyId) { webpage.policy_get_jstree(policyId, function(res) { data = JSON.parse(res); if (!data.error) { policyTree.policyCreateFromFile(data.policyTree); createPolicyFromFile.removeSpinner(); } else { mcoMessage.error(data.error); createPolicyFromFile.removeSpinner(); } }); } var policyCreate = function(policyNode, parentId) { /** * Create a policy * @param int parentId policy ID in which the new policy will be created * * Call xslt_policy_create and policy_get * * @return json * {"policy":POLICY_JSTREE_JSON} */ webpage.xslt_policy_create(parentId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.policyCreate(data.policyTree, policyNode); else mcoMessage.error(data.error); }); } var policyEdit = function(form, policyNode) { /** * Edit a policy (POST data from a form) * @param int id policy ID of the policy to edit * * @return json * {"policy":POLICY_JSTREE_JSON} */ var name = $("#xslPolicyInfo_policyName").val(); if (name === null) name = ""; var description = $("#xslPolicyInfo_policyDescription").val(); if (description === null) description = ""; var type = $("#xslPolicyInfo_policyType").val(); if (type === null) type = ""; var license = $("#xslPolicyInfo_policyLicense").val(); if (license === null || license === "Other") license = ""; var visibility = $("#xslPolicyInfo_policyVisibility").val(); if (visibility === null) visibility = ""; webpage.policy_edit(policyNode.data.policyId, name, description, license, type, visibility, function(res){ data = JSON.parse(res); if (!data.error) policyTree.policyEdit(data.policyTree, policyNode); else mcoMessage.error(data.error); }); } var policyDelete = function(policyNode) { /** * Delete a policy * @param int id policy ID of the policy to duplicate * * @return json * {"policyId":ID} */ webpage.policy_remove(policyNode.data.policyId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.policyDelete(policyNode); else mcoMessage.error(data.error); }); } var policyExport = function(policyNode) { /** * Export XML of a policy * @param int id policy ID of the policy to export * * @return XML */ webpage.policy_export(policyNode.data.policyId, function(res){ data = JSON.parse(res); if (data.error) mcoMessage.error(data.error); }); } var policyDuplicate = function(policyNode, dstNode) { /** * Duplicate a policy * @param int id policy ID of the policy to duplicate * @param int dstPolicyId policy ID of the destination policy * * @return json * {"policy":POLICY_JSTREE_JSON} */ webpage.policy_duplicate(policyNode.data.policyId, policyTree.getPolicyId(dstNode), function(res){ data = JSON.parse(res); if (!data.error) policyTree.policyDuplicate(data.policyTree, dstNode); else mcoMessage.error(data.error); }); } var policyMove = function(policyNode, dstNode) { /** * Move a policy * @param int id policy ID of the policy to duplicate * @param int dstPolicyId policy ID of the destination policy * * @return json * {"policy":POLICY_JSTREE_JSON} */ webpage.policy_move(policyNode.data.policyId, policyTree.getPolicyId(dstNode), function(res){ data = JSON.parse(res); if (!data.error) policyTree.policyMove(data.policyTree, dstNode, policyNode); else mcoMessage.error(data.error); }); } var ruleCreate = function(policyNode) { /** * Add a rule to a policy * @param int policyId policy ID of the policy that will contain the rule * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ webpage.xslt_policy_rule_create(policyNode.data.policyId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.ruleCreate(data.rule, policyNode); else mcoMessage.error(data.error); }); } var ruleEdit = function(form, policyId, ruleNode) { /** * Edit a rule (POST data from a form) * @param int id rule ID of the rule to edit * @param int policyId policy ID of the policy that contain the rule * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ var scope = ""; var name = ""; var tracktype = ""; var field = ""; var occurrence = -1; var ope = ""; var value = ""; if ($(".ruleMediaTrace").hasClass("active")) scope = "mmt"; if (scope === "mmt") { name = $("#xslPolicyRuleMt_title").val(); if (name === null) name = ""; field = $("#xslPolicyRuleMt_field").val(); if (field === null) field = ""; ope = $("#xslPolicyRuleMt_validator").val(); if (ope === null) ope = ""; value = $("#xslPolicyRuleMt_value").val(); if (value === null) value = ""; } else { name = $("#xslPolicyRule_title").val(); if (name === null) name = ""; tracktype = $("#xslPolicyRule_trackType").val(); if (tracktype === null) tracktype = ""; field = $("#xslPolicyRule_field").val(); if (field === null) field = ""; occurrence = $("#xslPolicyRule_occurrence").val(); if (occurrence === null || occurrence === "*" || occurrence === "") occurrence = -1; ope = $("#xslPolicyRule_validator").val(); if (ope === null) ope = ""; value = $("#xslPolicyRule_value").val(); if (value === null) value = ""; } webpage.xslt_policy_rule_edit(ruleNode.data.ruleId, policyId, name, tracktype, field, occurrence, ope, value, scope, function(res){ data = JSON.parse(res); if (!data.error) policyTree.ruleEdit(data.rule, ruleNode); else mcoMessage.error(data.error); }); } var ruleDelete = function(policyId, ruleNode) { /** * Delete a rule * @param int id rule ID of the rule to delete * @param int policyId policy ID of the policy that contain the rule * * @return json * {"id":RULE_ID} */ webpage.xslt_policy_rule_delete(policyId, ruleNode.data.ruleId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.ruleDelete(ruleNode); else mcoMessage.error(data.error); }); } var ruleDuplicate = function(policyId, ruleNode, dstNode) { /** * Duplicate a rule * @param int id rule ID of the rule to duplicate * @param int policyId policy ID of the policy that contain the rule * @param int dstPolicyId policy ID of the destination policy * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ webpage.xslt_policy_rule_duplicate(policyId, ruleNode.data.ruleId, dstNode.data.policyId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.ruleDuplicate(data.rule, dstNode); else mcoMessage.error(data.error); }); } var ruleMove = function(policyId, ruleNode, dstNode) { /** * Move a rule * @param int id rule ID of the rule to move * @param int policyId policy ID of the policy that contain the rule * @param int dstPolicyId policy ID of the destination policy * * @return json * {"rule":{"tracktype":TRACKTYPE, "field":FIELD, "id":RULE_ID, "name":NAME, "value":VALUE, "occurrence":OCCURENCE, "ope":OPERATOR}} */ webpage.xslt_policy_rule_move(policyId, ruleNode.data.ruleId, dstNode.data.policyId, function(res){ data = JSON.parse(res); if (!data.error) policyTree.ruleMove(data.rule, dstNode, ruleNode); else mcoMessage.error(data.error); }); } var getFieldsList = function(trackType, field) { /** * Get list of fields for a trackType (POST : type and field) * * @return json */ if (trackType === null) trackType = ""; if (field === null) field = ""; webpage.get_fields_list(trackType, field, function(res){ data = JSON.parse(res); if (!data.error) policyTreeRulesMI.fieldsListOk(data.fields, field) else policyTreeRulesMI.fieldsListError(field); }); } var getValuesList = function(trackType, field, value) { /** * Get list of values for a trackType and a field (POST : type, field and value) * * @return json */ if (trackType === null) trackType = ""; if (field === null) field = ""; if (value === null) value = ""; webpage.get_values_list(trackType, field, value, function(res){ data = JSON.parse(res); if (!data.error) policyTreeRulesMI.valuesListOk(data.values, value); else policyTreeRulesMI.valuesListError(value); }); } return { getData: getData, policyImport: policyImport, policyDropped: policyDropped, policyCreateFromFile: policyCreateFromFile, policyCreateFromFileCallback: policyCreateFromFileCallback, policyCreate: policyCreate, policyEdit: policyEdit, policyDelete: policyDelete, policyDuplicate: policyDuplicate, policyMove: policyMove, policyExport: policyExport, ruleCreate: ruleCreate, ruleEdit: ruleEdit, ruleDelete: ruleDelete, ruleDuplicate: ruleDuplicate, ruleMove: ruleMove, getFieldsList: getFieldsList, getValuesList: getValuesList, }; })(); MediaConch/Source/Resource/html/js/bootstrap.js0000644000000000000000000021011313216666133020535 0ustar rootroot/*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under the MIT license */ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } +function ($) { 'use strict'; var version = $.fn.jquery.split(' ')[0].split('.') if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') } }(jQuery); /* ======================================================================== * Bootstrap: transition.js v3.3.7 * http://getbootstrap.com/javascript/#transitions * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) // ============================================================ function transitionEnd() { var el = document.createElement('bootstrap') var transEndEventNames = { WebkitTransition : 'webkitTransitionEnd', MozTransition : 'transitionend', OTransition : 'oTransitionEnd otransitionend', transition : 'transitionend' } for (var name in transEndEventNames) { if (el.style[name] !== undefined) { return { end: transEndEventNames[name] } } } return false // explicit for ie8 ( ._.) } // http://blog.alexmaccaw.com/css-transitions $.fn.emulateTransitionEnd = function (duration) { var called = false var $el = this $(this).one('bsTransitionEnd', function () { called = true }) var callback = function () { if (!called) $($el).trigger($.support.transition.end) } setTimeout(callback, duration) return this } $(function () { $.support.transition = transitionEnd() if (!$.support.transition) return $.event.special.bsTransitionEnd = { bindType: $.support.transition.end, delegateType: $.support.transition.end, handle: function (e) { if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) } } }) }(jQuery); /* ======================================================================== * Bootstrap: alert.js v3.3.7 * http://getbootstrap.com/javascript/#alerts * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // ALERT CLASS DEFINITION // ====================== var dismiss = '[data-dismiss="alert"]' var Alert = function (el) { $(el).on('click', dismiss, this.close) } Alert.VERSION = '3.3.7' Alert.TRANSITION_DURATION = 150 Alert.prototype.close = function (e) { var $this = $(this) var selector = $this.attr('data-target') if (!selector) { selector = $this.attr('href') selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } var $parent = $(selector === '#' ? [] : selector) if (e) e.preventDefault() if (!$parent.length) { $parent = $this.closest('.alert') } $parent.trigger(e = $.Event('close.bs.alert')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { // detach from parent, fire event then clean up data $parent.detach().trigger('closed.bs.alert').remove() } $.support.transition && $parent.hasClass('fade') ? $parent .one('bsTransitionEnd', removeElement) .emulateTransitionEnd(Alert.TRANSITION_DURATION) : removeElement() } // ALERT PLUGIN DEFINITION // ======================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.alert') if (!data) $this.data('bs.alert', (data = new Alert(this))) if (typeof option == 'string') data[option].call($this) }) } var old = $.fn.alert $.fn.alert = Plugin $.fn.alert.Constructor = Alert // ALERT NO CONFLICT // ================= $.fn.alert.noConflict = function () { $.fn.alert = old return this } // ALERT DATA-API // ============== $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) }(jQuery); /* ======================================================================== * Bootstrap: button.js v3.3.7 * http://getbootstrap.com/javascript/#buttons * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // BUTTON PUBLIC CLASS DEFINITION // ============================== var Button = function (element, options) { this.$element = $(element) this.options = $.extend({}, Button.DEFAULTS, options) this.isLoading = false } Button.VERSION = '3.3.7' Button.DEFAULTS = { loadingText: 'loading...' } Button.prototype.setState = function (state) { var d = 'disabled' var $el = this.$element var val = $el.is('input') ? 'val' : 'html' var data = $el.data() state += 'Text' if (data.resetText == null) $el.data('resetText', $el[val]()) // push to event loop to allow forms to submit setTimeout($.proxy(function () { $el[val](data[state] == null ? this.options[state] : data[state]) if (state == 'loadingText') { this.isLoading = true $el.addClass(d).attr(d, d).prop(d, true) } else if (this.isLoading) { this.isLoading = false $el.removeClass(d).removeAttr(d).prop(d, false) } }, this), 0) } Button.prototype.toggle = function () { var changed = true var $parent = this.$element.closest('[data-toggle="buttons"]') if ($parent.length) { var $input = this.$element.find('input') if ($input.prop('type') == 'radio') { if ($input.prop('checked')) changed = false $parent.find('.active').removeClass('active') this.$element.addClass('active') } else if ($input.prop('type') == 'checkbox') { if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false this.$element.toggleClass('active') } $input.prop('checked', this.$element.hasClass('active')) if (changed) $input.trigger('change') } else { this.$element.attr('aria-pressed', !this.$element.hasClass('active')) this.$element.toggleClass('active') } } // BUTTON PLUGIN DEFINITION // ======================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.button') var options = typeof option == 'object' && option if (!data) $this.data('bs.button', (data = new Button(this, options))) if (option == 'toggle') data.toggle() else if (option) data.setState(option) }) } var old = $.fn.button $.fn.button = Plugin $.fn.button.Constructor = Button // BUTTON NO CONFLICT // ================== $.fn.button.noConflict = function () { $.fn.button = old return this } // BUTTON DATA-API // =============== $(document) .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { var $btn = $(e.target).closest('.btn') Plugin.call($btn, 'toggle') if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { // Prevent double click on radios, and the double selections (so cancellation) on checkboxes e.preventDefault() // The target component still receive the focus if ($btn.is('input,button')) $btn.trigger('focus') else $btn.find('input:visible,button:visible').first().trigger('focus') } }) .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) }) }(jQuery); /* ======================================================================== * Bootstrap: carousel.js v3.3.7 * http://getbootstrap.com/javascript/#carousel * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // CAROUSEL CLASS DEFINITION // ========================= var Carousel = function (element, options) { this.$element = $(element) this.$indicators = this.$element.find('.carousel-indicators') this.options = options this.paused = null this.sliding = null this.interval = null this.$active = null this.$items = null this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) } Carousel.VERSION = '3.3.7' Carousel.TRANSITION_DURATION = 600 Carousel.DEFAULTS = { interval: 5000, pause: 'hover', wrap: true, keyboard: true } Carousel.prototype.keydown = function (e) { if (/input|textarea/i.test(e.target.tagName)) return switch (e.which) { case 37: this.prev(); break case 39: this.next(); break default: return } e.preventDefault() } Carousel.prototype.cycle = function (e) { e || (this.paused = false) this.interval && clearInterval(this.interval) this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) return this } Carousel.prototype.getItemIndex = function (item) { this.$items = item.parent().children('.item') return this.$items.index(item || this.$active) } Carousel.prototype.getItemForDirection = function (direction, active) { var activeIndex = this.getItemIndex(active) var willWrap = (direction == 'prev' && activeIndex === 0) || (direction == 'next' && activeIndex == (this.$items.length - 1)) if (willWrap && !this.options.wrap) return active var delta = direction == 'prev' ? -1 : 1 var itemIndex = (activeIndex + delta) % this.$items.length return this.$items.eq(itemIndex) } Carousel.prototype.to = function (pos) { var that = this var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) if (pos > (this.$items.length - 1) || pos < 0) return if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" if (activeIndex == pos) return this.pause().cycle() return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) } Carousel.prototype.pause = function (e) { e || (this.paused = true) if (this.$element.find('.next, .prev').length && $.support.transition) { this.$element.trigger($.support.transition.end) this.cycle(true) } this.interval = clearInterval(this.interval) return this } Carousel.prototype.next = function () { if (this.sliding) return return this.slide('next') } Carousel.prototype.prev = function () { if (this.sliding) return return this.slide('prev') } Carousel.prototype.slide = function (type, next) { var $active = this.$element.find('.item.active') var $next = next || this.getItemForDirection(type, $active) var isCycling = this.interval var direction = type == 'next' ? 'left' : 'right' var that = this if ($next.hasClass('active')) return (this.sliding = false) var relatedTarget = $next[0] var slideEvent = $.Event('slide.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) this.$element.trigger(slideEvent) if (slideEvent.isDefaultPrevented()) return this.sliding = true isCycling && this.pause() if (this.$indicators.length) { this.$indicators.find('.active').removeClass('active') var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) $nextIndicator && $nextIndicator.addClass('active') } var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" if ($.support.transition && this.$element.hasClass('slide')) { $next.addClass(type) $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) $active .one('bsTransitionEnd', function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false setTimeout(function () { that.$element.trigger(slidEvent) }, 0) }) .emulateTransitionEnd(Carousel.TRANSITION_DURATION) } else { $active.removeClass('active') $next.addClass('active') this.sliding = false this.$element.trigger(slidEvent) } isCycling && this.cycle() return this } // CAROUSEL PLUGIN DEFINITION // ========================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.carousel') var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) var action = typeof option == 'string' ? option : options.slide if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option) else if (action) data[action]() else if (options.interval) data.pause().cycle() }) } var old = $.fn.carousel $.fn.carousel = Plugin $.fn.carousel.Constructor = Carousel // CAROUSEL NO CONFLICT // ==================== $.fn.carousel.noConflict = function () { $.fn.carousel = old return this } // CAROUSEL DATA-API // ================= var clickHandler = function (e) { var href var $this = $(this) var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 if (!$target.hasClass('carousel')) return var options = $.extend({}, $target.data(), $this.data()) var slideIndex = $this.attr('data-slide-to') if (slideIndex) options.interval = false Plugin.call($target, options) if (slideIndex) { $target.data('bs.carousel').to(slideIndex) } e.preventDefault() } $(document) .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) $(window).on('load', function () { $('[data-ride="carousel"]').each(function () { var $carousel = $(this) Plugin.call($carousel, $carousel.data()) }) }) }(jQuery); /* ======================================================================== * Bootstrap: collapse.js v3.3.7 * http://getbootstrap.com/javascript/#collapse * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ /* jshint latedef: false */ +function ($) { 'use strict'; // COLLAPSE PUBLIC CLASS DEFINITION // ================================ var Collapse = function (element, options) { this.$element = $(element) this.options = $.extend({}, Collapse.DEFAULTS, options) this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + '[data-toggle="collapse"][data-target="#' + element.id + '"]') this.transitioning = null if (this.options.parent) { this.$parent = this.getParent() } else { this.addAriaAndCollapsedClass(this.$element, this.$trigger) } if (this.options.toggle) this.toggle() } Collapse.VERSION = '3.3.7' Collapse.TRANSITION_DURATION = 350 Collapse.DEFAULTS = { toggle: true } Collapse.prototype.dimension = function () { var hasWidth = this.$element.hasClass('width') return hasWidth ? 'width' : 'height' } Collapse.prototype.show = function () { if (this.transitioning || this.$element.hasClass('in')) return var activesData var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') if (actives && actives.length) { activesData = actives.data('bs.collapse') if (activesData && activesData.transitioning) return } var startEvent = $.Event('show.bs.collapse') this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return if (actives && actives.length) { Plugin.call(actives, 'hide') activesData || actives.data('bs.collapse', null) } var dimension = this.dimension() this.$element .removeClass('collapse') .addClass('collapsing')[dimension](0) .attr('aria-expanded', true) this.$trigger .removeClass('collapsed') .attr('aria-expanded', true) this.transitioning = 1 var complete = function () { this.$element .removeClass('collapsing') .addClass('collapse in')[dimension]('') this.transitioning = 0 this.$element .trigger('shown.bs.collapse') } if (!$.support.transition) return complete.call(this) var scrollSize = $.camelCase(['scroll', dimension].join('-')) this.$element .one('bsTransitionEnd', $.proxy(complete, this)) .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) } Collapse.prototype.hide = function () { if (this.transitioning || !this.$element.hasClass('in')) return var startEvent = $.Event('hide.bs.collapse') this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return var dimension = this.dimension() this.$element[dimension](this.$element[dimension]())[0].offsetHeight this.$element .addClass('collapsing') .removeClass('collapse in') .attr('aria-expanded', false) this.$trigger .addClass('collapsed') .attr('aria-expanded', false) this.transitioning = 1 var complete = function () { this.transitioning = 0 this.$element .removeClass('collapsing') .addClass('collapse') .trigger('hidden.bs.collapse') } if (!$.support.transition) return complete.call(this) this.$element [dimension](0) .one('bsTransitionEnd', $.proxy(complete, this)) .emulateTransitionEnd(Collapse.TRANSITION_DURATION) } Collapse.prototype.toggle = function () { this[this.$element.hasClass('in') ? 'hide' : 'show']() } Collapse.prototype.getParent = function () { return $(this.options.parent) .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') .each($.proxy(function (i, element) { var $element = $(element) this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) }, this)) .end() } Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { var isOpen = $element.hasClass('in') $element.attr('aria-expanded', isOpen) $trigger .toggleClass('collapsed', !isOpen) .attr('aria-expanded', isOpen) } function getTargetFromTrigger($trigger) { var href var target = $trigger.attr('data-target') || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 return $(target) } // COLLAPSE PLUGIN DEFINITION // ========================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.collapse') var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.collapse $.fn.collapse = Plugin $.fn.collapse.Constructor = Collapse // COLLAPSE NO CONFLICT // ==================== $.fn.collapse.noConflict = function () { $.fn.collapse = old return this } // COLLAPSE DATA-API // ================= $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { var $this = $(this) if (!$this.attr('data-target')) e.preventDefault() var $target = getTargetFromTrigger($this) var data = $target.data('bs.collapse') var option = data ? 'toggle' : $this.data() Plugin.call($target, option) }) }(jQuery); /* ======================================================================== * Bootstrap: dropdown.js v3.3.7 * http://getbootstrap.com/javascript/#dropdowns * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // DROPDOWN CLASS DEFINITION // ========================= var backdrop = '.dropdown-backdrop' var toggle = '[data-toggle="dropdown"]' var Dropdown = function (element) { $(element).on('click.bs.dropdown', this.toggle) } Dropdown.VERSION = '3.3.7' function getParent($this) { var selector = $this.attr('data-target') if (!selector) { selector = $this.attr('href') selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } var $parent = selector && $(selector) return $parent && $parent.length ? $parent : $this.parent() } function clearMenus(e) { if (e && e.which === 3) return $(backdrop).remove() $(toggle).each(function () { var $this = $(this) var $parent = getParent($this) var relatedTarget = { relatedTarget: this } if (!$parent.hasClass('open')) return if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) if (e.isDefaultPrevented()) return $this.attr('aria-expanded', 'false') $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) }) } Dropdown.prototype.toggle = function (e) { var $this = $(this) if ($this.is('.disabled, :disabled')) return var $parent = getParent($this) var isActive = $parent.hasClass('open') clearMenus() if (!isActive) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { // if mobile we use a backdrop because click events don't delegate $(document.createElement('div')) .addClass('dropdown-backdrop') .insertAfter($(this)) .on('click', clearMenus) } var relatedTarget = { relatedTarget: this } $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) if (e.isDefaultPrevented()) return $this .trigger('focus') .attr('aria-expanded', 'true') $parent .toggleClass('open') .trigger($.Event('shown.bs.dropdown', relatedTarget)) } return false } Dropdown.prototype.keydown = function (e) { if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return var $this = $(this) e.preventDefault() e.stopPropagation() if ($this.is('.disabled, :disabled')) return var $parent = getParent($this) var isActive = $parent.hasClass('open') if (!isActive && e.which != 27 || isActive && e.which == 27) { if (e.which == 27) $parent.find(toggle).trigger('focus') return $this.trigger('click') } var desc = ' li:not(.disabled):visible a' var $items = $parent.find('.dropdown-menu' + desc) if (!$items.length) return var index = $items.index(e.target) if (e.which == 38 && index > 0) index-- // up if (e.which == 40 && index < $items.length - 1) index++ // down if (!~index) index = 0 $items.eq(index).trigger('focus') } // DROPDOWN PLUGIN DEFINITION // ========================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.dropdown') if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) if (typeof option == 'string') data[option].call($this) }) } var old = $.fn.dropdown $.fn.dropdown = Plugin $.fn.dropdown.Constructor = Dropdown // DROPDOWN NO CONFLICT // ==================== $.fn.dropdown.noConflict = function () { $.fn.dropdown = old return this } // APPLY TO STANDARD DROPDOWN ELEMENTS // =================================== $(document) .on('click.bs.dropdown.data-api', clearMenus) .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) }(jQuery); /* ======================================================================== * Bootstrap: modal.js v3.3.7 * http://getbootstrap.com/javascript/#modals * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // MODAL CLASS DEFINITION // ====================== var Modal = function (element, options) { this.options = options this.$body = $(document.body) this.$element = $(element) this.$dialog = this.$element.find('.modal-dialog') this.$backdrop = null this.isShown = null this.originalBodyPad = null this.scrollbarWidth = 0 this.ignoreBackdropClick = false if (this.options.remote) { this.$element .find('.modal-content') .load(this.options.remote, $.proxy(function () { this.$element.trigger('loaded.bs.modal') }, this)) } } Modal.VERSION = '3.3.7' Modal.TRANSITION_DURATION = 300 Modal.BACKDROP_TRANSITION_DURATION = 150 Modal.DEFAULTS = { backdrop: true, keyboard: true, show: true } Modal.prototype.toggle = function (_relatedTarget) { return this.isShown ? this.hide() : this.show(_relatedTarget) } Modal.prototype.show = function (_relatedTarget) { var that = this var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) this.$element.trigger(e) if (this.isShown || e.isDefaultPrevented()) return this.isShown = true this.checkScrollbar() this.setScrollbar() this.$body.addClass('modal-open') this.escape() this.resize() this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) this.$dialog.on('mousedown.dismiss.bs.modal', function () { that.$element.one('mouseup.dismiss.bs.modal', function (e) { if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true }) }) this.backdrop(function () { var transition = $.support.transition && that.$element.hasClass('fade') if (!that.$element.parent().length) { that.$element.appendTo(that.$body) // don't move modals dom position } that.$element .show() .scrollTop(0) that.adjustDialog() if (transition) { that.$element[0].offsetWidth // force reflow } that.$element.addClass('in') that.enforceFocus() var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) transition ? that.$dialog // wait for modal to slide in .one('bsTransitionEnd', function () { that.$element.trigger('focus').trigger(e) }) .emulateTransitionEnd(Modal.TRANSITION_DURATION) : that.$element.trigger('focus').trigger(e) }) } Modal.prototype.hide = function (e) { if (e) e.preventDefault() e = $.Event('hide.bs.modal') this.$element.trigger(e) if (!this.isShown || e.isDefaultPrevented()) return this.isShown = false this.escape() this.resize() $(document).off('focusin.bs.modal') this.$element .removeClass('in') .off('click.dismiss.bs.modal') .off('mouseup.dismiss.bs.modal') this.$dialog.off('mousedown.dismiss.bs.modal') $.support.transition && this.$element.hasClass('fade') ? this.$element .one('bsTransitionEnd', $.proxy(this.hideModal, this)) .emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal() } Modal.prototype.enforceFocus = function () { $(document) .off('focusin.bs.modal') // guard against infinite focus loop .on('focusin.bs.modal', $.proxy(function (e) { if (document !== e.target && this.$element[0] !== e.target && !this.$element.has(e.target).length) { this.$element.trigger('focus') } }, this)) } Modal.prototype.escape = function () { if (this.isShown && this.options.keyboard) { this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { e.which == 27 && this.hide() }, this)) } else if (!this.isShown) { this.$element.off('keydown.dismiss.bs.modal') } } Modal.prototype.resize = function () { if (this.isShown) { $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) } else { $(window).off('resize.bs.modal') } } Modal.prototype.hideModal = function () { var that = this this.$element.hide() this.backdrop(function () { that.$body.removeClass('modal-open') that.resetAdjustments() that.resetScrollbar() that.$element.trigger('hidden.bs.modal') }) } Modal.prototype.removeBackdrop = function () { this.$backdrop && this.$backdrop.remove() this.$backdrop = null } Modal.prototype.backdrop = function (callback) { var that = this var animate = this.$element.hasClass('fade') ? 'fade' : '' if (this.isShown && this.options.backdrop) { var doAnimate = $.support.transition && animate this.$backdrop = $(document.createElement('div')) .addClass('modal-backdrop ' + animate) .appendTo(this.$body) this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { if (this.ignoreBackdropClick) { this.ignoreBackdropClick = false return } if (e.target !== e.currentTarget) return this.options.backdrop == 'static' ? this.$element[0].focus() : this.hide() }, this)) if (doAnimate) this.$backdrop[0].offsetWidth // force reflow this.$backdrop.addClass('in') if (!callback) return doAnimate ? this.$backdrop .one('bsTransitionEnd', callback) .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback() } else if (!this.isShown && this.$backdrop) { this.$backdrop.removeClass('in') var callbackRemove = function () { that.removeBackdrop() callback && callback() } $.support.transition && this.$element.hasClass('fade') ? this.$backdrop .one('bsTransitionEnd', callbackRemove) .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove() } else if (callback) { callback() } } // these following methods are used to handle overflowing modals Modal.prototype.handleUpdate = function () { this.adjustDialog() } Modal.prototype.adjustDialog = function () { var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight this.$element.css({ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' }) } Modal.prototype.resetAdjustments = function () { this.$element.css({ paddingLeft: '', paddingRight: '' }) } Modal.prototype.checkScrollbar = function () { var fullWindowWidth = window.innerWidth if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 var documentElementRect = document.documentElement.getBoundingClientRect() fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) } this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth this.scrollbarWidth = this.measureScrollbar() } Modal.prototype.setScrollbar = function () { var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) this.originalBodyPad = document.body.style.paddingRight || '' if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) } Modal.prototype.resetScrollbar = function () { this.$body.css('padding-right', this.originalBodyPad) } Modal.prototype.measureScrollbar = function () { // thx walsh var scrollDiv = document.createElement('div') scrollDiv.className = 'modal-scrollbar-measure' this.$body.append(scrollDiv) var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth this.$body[0].removeChild(scrollDiv) return scrollbarWidth } // MODAL PLUGIN DEFINITION // ======================= function Plugin(option, _relatedTarget) { return this.each(function () { var $this = $(this) var data = $this.data('bs.modal') var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('bs.modal', (data = new Modal(this, options))) if (typeof option == 'string') data[option](_relatedTarget) else if (options.show) data.show(_relatedTarget) }) } var old = $.fn.modal $.fn.modal = Plugin $.fn.modal.Constructor = Modal // MODAL NO CONFLICT // ================= $.fn.modal.noConflict = function () { $.fn.modal = old return this } // MODAL DATA-API // ============== $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { var $this = $(this) var href = $this.attr('href') var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) if ($this.is('a')) e.preventDefault() $target.one('show.bs.modal', function (showEvent) { if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown $target.one('hidden.bs.modal', function () { $this.is(':visible') && $this.trigger('focus') }) }) Plugin.call($target, option, this) }) }(jQuery); /* ======================================================================== * Bootstrap: tooltip.js v3.3.7 * http://getbootstrap.com/javascript/#tooltip * Inspired by the original jQuery.tipsy by Jason Frame * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // TOOLTIP PUBLIC CLASS DEFINITION // =============================== var Tooltip = function (element, options) { this.type = null this.options = null this.enabled = null this.timeout = null this.hoverState = null this.$element = null this.inState = null this.init('tooltip', element, options) } Tooltip.VERSION = '3.3.7' Tooltip.TRANSITION_DURATION = 150 Tooltip.DEFAULTS = { animation: true, placement: 'top', selector: false, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, container: false, viewport: { selector: 'body', padding: 0 } } Tooltip.prototype.init = function (type, element, options) { this.enabled = true this.type = type this.$element = $(element) this.options = this.getOptions(options) this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) this.inState = { click: false, hover: false, focus: false } if (this.$element[0] instanceof document.constructor && !this.options.selector) { throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') } var triggers = this.options.trigger.split(' ') for (var i = triggers.length; i--;) { var trigger = triggers[i] if (trigger == 'click') { this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) } else if (trigger != 'manual') { var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) } } this.options.selector ? (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : this.fixTitle() } Tooltip.prototype.getDefaults = function () { return Tooltip.DEFAULTS } Tooltip.prototype.getOptions = function (options) { options = $.extend({}, this.getDefaults(), this.$element.data(), options) if (options.delay && typeof options.delay == 'number') { options.delay = { show: options.delay, hide: options.delay } } return options } Tooltip.prototype.getDelegateOptions = function () { var options = {} var defaults = this.getDefaults() this._options && $.each(this._options, function (key, value) { if (defaults[key] != value) options[key] = value }) return options } Tooltip.prototype.enter = function (obj) { var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) $(obj.currentTarget).data('bs.' + this.type, self) } if (obj instanceof $.Event) { self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true } if (self.tip().hasClass('in') || self.hoverState == 'in') { self.hoverState = 'in' return } clearTimeout(self.timeout) self.hoverState = 'in' if (!self.options.delay || !self.options.delay.show) return self.show() self.timeout = setTimeout(function () { if (self.hoverState == 'in') self.show() }, self.options.delay.show) } Tooltip.prototype.isInStateTrue = function () { for (var key in this.inState) { if (this.inState[key]) return true } return false } Tooltip.prototype.leave = function (obj) { var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) $(obj.currentTarget).data('bs.' + this.type, self) } if (obj instanceof $.Event) { self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false } if (self.isInStateTrue()) return clearTimeout(self.timeout) self.hoverState = 'out' if (!self.options.delay || !self.options.delay.hide) return self.hide() self.timeout = setTimeout(function () { if (self.hoverState == 'out') self.hide() }, self.options.delay.hide) } Tooltip.prototype.show = function () { var e = $.Event('show.bs.' + this.type) if (this.hasContent() && this.enabled) { this.$element.trigger(e) var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) if (e.isDefaultPrevented() || !inDom) return var that = this var $tip = this.tip() var tipId = this.getUID(this.type) this.setContent() $tip.attr('id', tipId) this.$element.attr('aria-describedby', tipId) if (this.options.animation) $tip.addClass('fade') var placement = typeof this.options.placement == 'function' ? this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement var autoToken = /\s?auto?\s?/i var autoPlace = autoToken.test(placement) if (autoPlace) placement = placement.replace(autoToken, '') || 'top' $tip .detach() .css({ top: 0, left: 0, display: 'block' }) .addClass(placement) .data('bs.' + this.type, this) this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) this.$element.trigger('inserted.bs.' + this.type) var pos = this.getPosition() var actualWidth = $tip[0].offsetWidth var actualHeight = $tip[0].offsetHeight if (autoPlace) { var orgPlacement = placement var viewportDim = this.getPosition(this.$viewport) placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : placement $tip .removeClass(orgPlacement) .addClass(placement) } var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) this.applyPlacement(calculatedOffset, placement) var complete = function () { var prevHoverState = that.hoverState that.$element.trigger('shown.bs.' + that.type) that.hoverState = null if (prevHoverState == 'out') that.leave(that) } $.support.transition && this.$tip.hasClass('fade') ? $tip .one('bsTransitionEnd', complete) .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete() } } Tooltip.prototype.applyPlacement = function (offset, placement) { var $tip = this.tip() var width = $tip[0].offsetWidth var height = $tip[0].offsetHeight // manually read margins because getBoundingClientRect includes difference var marginTop = parseInt($tip.css('margin-top'), 10) var marginLeft = parseInt($tip.css('margin-left'), 10) // we must check for NaN for ie 8/9 if (isNaN(marginTop)) marginTop = 0 if (isNaN(marginLeft)) marginLeft = 0 offset.top += marginTop offset.left += marginLeft // $.fn.offset doesn't round pixel values // so we use setOffset directly with our own function B-0 $.offset.setOffset($tip[0], $.extend({ using: function (props) { $tip.css({ top: Math.round(props.top), left: Math.round(props.left) }) } }, offset), 0) $tip.addClass('in') // check to see if placing tip in new offset caused the tip to resize itself var actualWidth = $tip[0].offsetWidth var actualHeight = $tip[0].offsetHeight if (placement == 'top' && actualHeight != height) { offset.top = offset.top + height - actualHeight } var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) if (delta.left) offset.left += delta.left else offset.top += delta.top var isVertical = /top|bottom/.test(placement) var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' $tip.offset(offset) this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) } Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { this.arrow() .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') .css(isVertical ? 'top' : 'left', '') } Tooltip.prototype.setContent = function () { var $tip = this.tip() var title = this.getTitle() $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) $tip.removeClass('fade in top bottom left right') } Tooltip.prototype.hide = function (callback) { var that = this var $tip = $(this.$tip) var e = $.Event('hide.bs.' + this.type) function complete() { if (that.hoverState != 'in') $tip.detach() if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. that.$element .removeAttr('aria-describedby') .trigger('hidden.bs.' + that.type) } callback && callback() } this.$element.trigger(e) if (e.isDefaultPrevented()) return $tip.removeClass('in') $.support.transition && $tip.hasClass('fade') ? $tip .one('bsTransitionEnd', complete) .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : complete() this.hoverState = null return this } Tooltip.prototype.fixTitle = function () { var $e = this.$element if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') } } Tooltip.prototype.hasContent = function () { return this.getTitle() } Tooltip.prototype.getPosition = function ($element) { $element = $element || this.$element var el = $element[0] var isBody = el.tagName == 'BODY' var elRect = el.getBoundingClientRect() if (elRect.width == null) { // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) } var isSvg = window.SVGElement && el instanceof window.SVGElement // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. // See https://github.com/twbs/bootstrap/issues/20280 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null return $.extend({}, elRect, scroll, outerDims, elOffset) } Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } } Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { var delta = { top: 0, left: 0 } if (!this.$viewport) return delta var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 var viewportDimensions = this.getPosition(this.$viewport) if (/right|left/.test(placement)) { var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight if (topEdgeOffset < viewportDimensions.top) { // top overflow delta.top = viewportDimensions.top - topEdgeOffset } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset } } else { var leftEdgeOffset = pos.left - viewportPadding var rightEdgeOffset = pos.left + viewportPadding + actualWidth if (leftEdgeOffset < viewportDimensions.left) { // left overflow delta.left = viewportDimensions.left - leftEdgeOffset } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset } } return delta } Tooltip.prototype.getTitle = function () { var title var $e = this.$element var o = this.options title = $e.attr('data-original-title') || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) return title } Tooltip.prototype.getUID = function (prefix) { do prefix += ~~(Math.random() * 1000000) while (document.getElementById(prefix)) return prefix } Tooltip.prototype.tip = function () { if (!this.$tip) { this.$tip = $(this.options.template) if (this.$tip.length != 1) { throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') } } return this.$tip } Tooltip.prototype.arrow = function () { return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) } Tooltip.prototype.enable = function () { this.enabled = true } Tooltip.prototype.disable = function () { this.enabled = false } Tooltip.prototype.toggleEnabled = function () { this.enabled = !this.enabled } Tooltip.prototype.toggle = function (e) { var self = this if (e) { self = $(e.currentTarget).data('bs.' + this.type) if (!self) { self = new this.constructor(e.currentTarget, this.getDelegateOptions()) $(e.currentTarget).data('bs.' + this.type, self) } } if (e) { self.inState.click = !self.inState.click if (self.isInStateTrue()) self.enter(self) else self.leave(self) } else { self.tip().hasClass('in') ? self.leave(self) : self.enter(self) } } Tooltip.prototype.destroy = function () { var that = this clearTimeout(this.timeout) this.hide(function () { that.$element.off('.' + that.type).removeData('bs.' + that.type) if (that.$tip) { that.$tip.detach() } that.$tip = null that.$arrow = null that.$viewport = null that.$element = null }) } // TOOLTIP PLUGIN DEFINITION // ========================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.tooltip') var options = typeof option == 'object' && option if (!data && /destroy|hide/.test(option)) return if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.tooltip $.fn.tooltip = Plugin $.fn.tooltip.Constructor = Tooltip // TOOLTIP NO CONFLICT // =================== $.fn.tooltip.noConflict = function () { $.fn.tooltip = old return this } }(jQuery); /* ======================================================================== * Bootstrap: popover.js v3.3.7 * http://getbootstrap.com/javascript/#popovers * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // POPOVER PUBLIC CLASS DEFINITION // =============================== var Popover = function (element, options) { this.init('popover', element, options) } if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') Popover.VERSION = '3.3.7' Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { placement: 'right', trigger: 'click', content: '', template: '' }) // NOTE: POPOVER EXTENDS tooltip.js // ================================ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) Popover.prototype.constructor = Popover Popover.prototype.getDefaults = function () { return Popover.DEFAULTS } Popover.prototype.setContent = function () { var $tip = this.tip() var title = this.getTitle() var content = this.getContent() $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' ](content) $tip.removeClass('fade top bottom left right in') // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do // this manually by checking the contents. if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() } Popover.prototype.hasContent = function () { return this.getTitle() || this.getContent() } Popover.prototype.getContent = function () { var $e = this.$element var o = this.options return $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) } Popover.prototype.arrow = function () { return (this.$arrow = this.$arrow || this.tip().find('.arrow')) } // POPOVER PLUGIN DEFINITION // ========================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.popover') var options = typeof option == 'object' && option if (!data && /destroy|hide/.test(option)) return if (!data) $this.data('bs.popover', (data = new Popover(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.popover $.fn.popover = Plugin $.fn.popover.Constructor = Popover // POPOVER NO CONFLICT // =================== $.fn.popover.noConflict = function () { $.fn.popover = old return this } }(jQuery); /* ======================================================================== * Bootstrap: scrollspy.js v3.3.7 * http://getbootstrap.com/javascript/#scrollspy * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // SCROLLSPY CLASS DEFINITION // ========================== function ScrollSpy(element, options) { this.$body = $(document.body) this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) this.options = $.extend({}, ScrollSpy.DEFAULTS, options) this.selector = (this.options.target || '') + ' .nav li > a' this.offsets = [] this.targets = [] this.activeTarget = null this.scrollHeight = 0 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) this.refresh() this.process() } ScrollSpy.VERSION = '3.3.7' ScrollSpy.DEFAULTS = { offset: 10 } ScrollSpy.prototype.getScrollHeight = function () { return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) } ScrollSpy.prototype.refresh = function () { var that = this var offsetMethod = 'offset' var offsetBase = 0 this.offsets = [] this.targets = [] this.scrollHeight = this.getScrollHeight() if (!$.isWindow(this.$scrollElement[0])) { offsetMethod = 'position' offsetBase = this.$scrollElement.scrollTop() } this.$body .find(this.selector) .map(function () { var $el = $(this) var href = $el.data('target') || $el.attr('href') var $href = /^#./.test(href) && $(href) return ($href && $href.length && $href.is(':visible') && [[$href[offsetMethod]().top + offsetBase, href]]) || null }) .sort(function (a, b) { return a[0] - b[0] }) .each(function () { that.offsets.push(this[0]) that.targets.push(this[1]) }) } ScrollSpy.prototype.process = function () { var scrollTop = this.$scrollElement.scrollTop() + this.options.offset var scrollHeight = this.getScrollHeight() var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() var offsets = this.offsets var targets = this.targets var activeTarget = this.activeTarget var i if (this.scrollHeight != scrollHeight) { this.refresh() } if (scrollTop >= maxScroll) { return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) } if (activeTarget && scrollTop < offsets[0]) { this.activeTarget = null return this.clear() } for (i = offsets.length; i--;) { activeTarget != targets[i] && scrollTop >= offsets[i] && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) && this.activate(targets[i]) } } ScrollSpy.prototype.activate = function (target) { this.activeTarget = target this.clear() var selector = this.selector + '[data-target="' + target + '"],' + this.selector + '[href="' + target + '"]' var active = $(selector) .parents('li') .addClass('active') if (active.parent('.dropdown-menu').length) { active = active .closest('li.dropdown') .addClass('active') } active.trigger('activate.bs.scrollspy') } ScrollSpy.prototype.clear = function () { $(this.selector) .parentsUntil(this.options.target, '.active') .removeClass('active') } // SCROLLSPY PLUGIN DEFINITION // =========================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.scrollspy') var options = typeof option == 'object' && option if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.scrollspy $.fn.scrollspy = Plugin $.fn.scrollspy.Constructor = ScrollSpy // SCROLLSPY NO CONFLICT // ===================== $.fn.scrollspy.noConflict = function () { $.fn.scrollspy = old return this } // SCROLLSPY DATA-API // ================== $(window).on('load.bs.scrollspy.data-api', function () { $('[data-spy="scroll"]').each(function () { var $spy = $(this) Plugin.call($spy, $spy.data()) }) }) }(jQuery); /* ======================================================================== * Bootstrap: tab.js v3.3.7 * http://getbootstrap.com/javascript/#tabs * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // TAB CLASS DEFINITION // ==================== var Tab = function (element) { // jscs:disable requireDollarBeforejQueryAssignment this.element = $(element) // jscs:enable requireDollarBeforejQueryAssignment } Tab.VERSION = '3.3.7' Tab.TRANSITION_DURATION = 150 Tab.prototype.show = function () { var $this = this.element var $ul = $this.closest('ul:not(.dropdown-menu)') var selector = $this.data('target') if (!selector) { selector = $this.attr('href') selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } if ($this.parent('li').hasClass('active')) return var $previous = $ul.find('.active:last a') var hideEvent = $.Event('hide.bs.tab', { relatedTarget: $this[0] }) var showEvent = $.Event('show.bs.tab', { relatedTarget: $previous[0] }) $previous.trigger(hideEvent) $this.trigger(showEvent) if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return var $target = $(selector) this.activate($this.closest('li'), $ul) this.activate($target, $target.parent(), function () { $previous.trigger({ type: 'hidden.bs.tab', relatedTarget: $this[0] }) $this.trigger({ type: 'shown.bs.tab', relatedTarget: $previous[0] }) }) } Tab.prototype.activate = function (element, container, callback) { var $active = container.find('> .active') var transition = callback && $.support.transition && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) function next() { $active .removeClass('active') .find('> .dropdown-menu > .active') .removeClass('active') .end() .find('[data-toggle="tab"]') .attr('aria-expanded', false) element .addClass('active') .find('[data-toggle="tab"]') .attr('aria-expanded', true) if (transition) { element[0].offsetWidth // reflow for transition element.addClass('in') } else { element.removeClass('fade') } if (element.parent('.dropdown-menu').length) { element .closest('li.dropdown') .addClass('active') .end() .find('[data-toggle="tab"]') .attr('aria-expanded', true) } callback && callback() } $active.length && transition ? $active .one('bsTransitionEnd', next) .emulateTransitionEnd(Tab.TRANSITION_DURATION) : next() $active.removeClass('in') } // TAB PLUGIN DEFINITION // ===================== function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.tab') if (!data) $this.data('bs.tab', (data = new Tab(this))) if (typeof option == 'string') data[option]() }) } var old = $.fn.tab $.fn.tab = Plugin $.fn.tab.Constructor = Tab // TAB NO CONFLICT // =============== $.fn.tab.noConflict = function () { $.fn.tab = old return this } // TAB DATA-API // ============ var clickHandler = function (e) { e.preventDefault() Plugin.call($(this), 'show') } $(document) .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) }(jQuery); /* ======================================================================== * Bootstrap: affix.js v3.3.7 * http://getbootstrap.com/javascript/#affix * ======================================================================== * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +function ($) { 'use strict'; // AFFIX CLASS DEFINITION // ====================== var Affix = function (element, options) { this.options = $.extend({}, Affix.DEFAULTS, options) this.$target = $(this.options.target) .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) this.$element = $(element) this.affixed = null this.unpin = null this.pinnedOffset = null this.checkPosition() } Affix.VERSION = '3.3.7' Affix.RESET = 'affix affix-top affix-bottom' Affix.DEFAULTS = { offset: 0, target: window } Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { var scrollTop = this.$target.scrollTop() var position = this.$element.offset() var targetHeight = this.$target.height() if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false if (this.affixed == 'bottom') { if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' } var initializing = this.affixed == null var colliderTop = initializing ? scrollTop : position.top var colliderHeight = initializing ? targetHeight : height if (offsetTop != null && scrollTop <= offsetTop) return 'top' if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' return false } Affix.prototype.getPinnedOffset = function () { if (this.pinnedOffset) return this.pinnedOffset this.$element.removeClass(Affix.RESET).addClass('affix') var scrollTop = this.$target.scrollTop() var position = this.$element.offset() return (this.pinnedOffset = position.top - scrollTop) } Affix.prototype.checkPositionWithEventLoop = function () { setTimeout($.proxy(this.checkPosition, this), 1) } Affix.prototype.checkPosition = function () { if (!this.$element.is(':visible')) return var height = this.$element.height() var offset = this.options.offset var offsetTop = offset.top var offsetBottom = offset.bottom var scrollHeight = Math.max($(document).height(), $(document.body).height()) if (typeof offset != 'object') offsetBottom = offsetTop = offset if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) if (this.affixed != affix) { if (this.unpin != null) this.$element.css('top', '') var affixType = 'affix' + (affix ? '-' + affix : '') var e = $.Event(affixType + '.bs.affix') this.$element.trigger(e) if (e.isDefaultPrevented()) return this.affixed = affix this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null this.$element .removeClass(Affix.RESET) .addClass(affixType) .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') } if (affix == 'bottom') { this.$element.offset({ top: scrollHeight - height - offsetBottom }) } } // AFFIX PLUGIN DEFINITION // ======================= function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.affix') var options = typeof option == 'object' && option if (!data) $this.data('bs.affix', (data = new Affix(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.affix $.fn.affix = Plugin $.fn.affix.Constructor = Affix // AFFIX NO CONFLICT // ================= $.fn.affix.noConflict = function () { $.fn.affix = old return this } // AFFIX DATA-API // ============== $(window).on('load', function () { $('[data-spy="affix"]').each(function () { var $spy = $(this) var data = $spy.data() data.offset = data.offset || {} if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom if (data.offsetTop != null) data.offset.top = data.offsetTop Plugin.call($spy, data) }) }) }(jQuery); MediaConch/Source/Resource/html/js/jstreegrid.js0000644000000000000000000012610013216666133020664 0ustar rootroot/* * http://github.com/deitch/jstree-grid * * This plugin handles adding a grid to a tree to display additional data * * Licensed under the MIT license: * http://www.opensource.org/licenses/mit-license.php * * Works only with jstree version >= 3.3.0 * * $Date: 2015-11-29 $ * $Revision: 3.4.2 $ */ /*jslint nomen:true */ /*jshint unused:vars */ /*global console, navigator, document, jQuery, define, localStorage */ /* AMD support added by jochenberger per https://github.com/deitch/jstree-grid/pull/49 * */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery', 'jstree'], factory); } else { // Browser globals factory(jQuery); } }(function ($) { var BLANKRE = /^\s*$/g, IDREGEX = /[\\:&!^|()\[\]<>@*'+~#";,= \/${}%]/g, escapeId = function (id) { return (id||"").replace(IDREGEX,'\\$&'); }, NODE_DATA_ATTR = "data-jstreegrid", COL_DATA_ATTR = "data-jstreegrid-column", SEARCHCLASS = "jstree-search", SPECIAL_TITLE = "_DATA_", LEVELINDENT = 24, styled = false, GRIDCELLID_PREFIX = "jsgrid_",GRIDCELLID_POSTFIX = "_col", MINCOLWIDTH = 10, findDataCell = function (from,id) { return from.find("div["+NODE_DATA_ATTR+"='"+id+"']"); }, isClickedSep = false, toResize = null, oldMouseX = 0, newMouseX = 0, /*jslint regexp:true */ htmlstripre = /<\/?[^>]+>/gi, /*jslint regexp:false */ getIndent = function(node,tree) { var div, i, li, width; // did we already save it for this tree? tree._gridSettings = tree._gridSettings || {}; if (tree._gridSettings.indent > 0) { width = tree._gridSettings.indent; } else { // create a new div on the DOM but not visible on the page div = $("
        "); i = node.prev("i"); li = i.parent(); // add to that div all of the classes on the tree root div.addClass(tree.get_node("#",true).attr("class")); // move the li to the temporary div root li.appendTo(div); // attach to the body quickly div.appendTo($("body")); // get the width width = i.width() || LEVELINDENT; // detach the li from the new div and destroy the new div li.detach(); div.remove(); // save it for the future tree._gridSettings.indent = width; } return(width); }, copyData = function (fromtree,from,totree,to,recurse) { var i, j; to.data = $.extend(true, {}, from.data); if (from && from.children_d && recurse) { for(i = 0, j = from.children_d.length; i < j; i++) { copyData(fromtree,fromtree.get_node(from.children_d[i]),totree,totree.get_node(to.children_d[i]),recurse); } } }, findLastClosedNode = function (tree,id) { // first get our node var ret, node = tree.get_node(id), children = node.children; // is it closed? if (!children || children.length <= 0 || !node.state.opened) { ret = id; } else { ret = findLastClosedNode(tree,children[children.length-1]); } return(ret); }, renderAWidth = function(node,tree) { var depth, width, fullWidth = parseInt(tree.settings.grid.columns[0].width,10) + parseInt(tree._gridSettings.treeWidthDiff,10); // need to use a selector in jquery 1.4.4+ depth = tree.get_node(node).parents.length; width = fullWidth - depth*getIndent(node,tree); // the following line is no longer needed, since we are doing this inside a //a.css({"vertical-align": "top", "overflow":"hidden"}); return(fullWidth); }, renderATitle = function(node,t,tree) { var a = node.hasClass("jstree-anchor") ? node : node.children("[class~='jstree-anchor']"), title, col = tree.settings.grid.columns[0]; // get the title title = ""; if (col.title) { if (col.title === SPECIAL_TITLE) { title = tree.get_text(t); } else if (t.attr(col.title)) { title = t.attr(col.title); } } // strip out HTML title = title.replace(htmlstripre, ''); if (title) { a.attr("title",title); } }, getCellData = function (value,data) { var val; // get the contents of the cell - value could be a string or a function if (value !== undefined && value !== null) { if (typeof(value) === "function") { val = value(data); } else if (data.data !== null && data.data !== undefined && data.data[value] !== undefined) { val = data.data[value]; } else { val = ""; } } else { val = ""; } return val; }; $.jstree.defaults.grid = { width: 'auto' }; $.jstree.plugins.grid = function(options,parent) { this._initialize = function () { if (!this._initialized) { var s = this.settings.grid || {}, styles, container = this.element, i, gs = this._gridSettings = { columns : s.columns || [], treeClass : "jstree-grid-col-0", context: s.contextmenu || false, columnWidth : s.columnWidth, defaultConf : {"*display":"inline","*+display":"inline"}, isThemeroller : !!this._data.themeroller, treeWidthDiff : 0, resizable : s.resizable, draggable : s.draggable, stateful: s.stateful, indent: 0, sortOrder: 'text', sortAsc: true, fixedHeader: s.fixedHeader !== false, width: s.width, height: s.height, gridcontextmenu : s.gridcontextmenu }, cols = gs.columns, treecol = 0, columnSearch = false; if(gs.gridcontextmenu === true) { gs.gridcontextmenu = function (grid,tree,node,val,col,t,target) { return { "edit": { label: "Edit", "action": function (data) { var obj = t.get_node(node); grid._edit(obj,col,target); } } } } } else if (gs.gridcontextmenu === false) { gs.gridcontextmenu = false; } // find which column our tree shuld go in for (i=0;i'+styles.join("\n")+'').appendTo("head"); } this.gridWrapper = $("
        ").addClass("jstree-grid-wrapper").insertAfter(container); this.midWrapper = $("
        ").addClass("jstree-grid-midwrapper").appendTo(this.gridWrapper); // set the wrapper width if (s.width) { this.gridWrapper.width(s.width); } if (s.height) { this.gridWrapper.height(s.height); } // create the data columns for (i=0;i
        ").addClass("jstree-default jstree-grid-column jstree-grid-column-"+i+" jstree-grid-column-root-"+this.rootid).appendTo(this.midWrapper); } this.midWrapper.children("div:eq("+treecol+")").append(container); container.addClass("jstree-grid-cell"); //move header with scroll if (gs.fixedHeader) { this.gridWrapper.scroll(function() { $(this).find('.jstree-grid-header').css('top', $(this).scrollTop()); }); } // copy original sort function var defaultSort = $.proxy(this.settings.sort, this); // override sort function this.settings.sort = function (a, b) { var bigger, colrefs = this.colrefs; if (gs.sortOrder==='text') { bigger = (defaultSort(a, b) === 1); } else { // gs.sortOrder just refers to the unique random name for this column // we need to get the correct value var nodeA = this.get_node(a), nodeB = this.get_node(b), value = colrefs[gs.sortOrder].value, valueA = typeof(value) === 'function' ? value(nodeA) : nodeA.data[value], valueB = typeof(value) === 'function' ? value(nodeB) : nodeB.data[value]; bigger = valueA > valueB; } if (gs.sortAsc===false) bigger = !bigger; return bigger ? 1 : -1; }; // sortable columns when jQuery UI is available if (gs.draggable) { if (!$.ui || !$.ui.sortable) { console.warn('[jstree-grid] draggable option requires jQuery UI'); } else { var from, to; $(this.midWrapper).sortable({ axis: "x", handle: ".jstree-grid-header", cancel: ".jstree-grid-separator", start: function (event, ui) { from = ui.item.index(); }, stop: function (event, ui) { to = ui.item.index(); gs.columns.splice(to, 0, gs.columns.splice(from, 1)[0]); } }); } } //public function. validate searchObject keys, set columnSearch flag, calls jstree search and reset columnSearch flag this.searchColumn = function (searchObj) { var validatedSearchObj = {}; if(typeof searchObj == 'object') { for(var columnIndex in searchObj) { if(searchObj.hasOwnProperty(columnIndex)) { // keys should be the index of a column. This means the following: // only integers and smaller than the number of columns and bigger or equal to 0 // (possilbe idea for in the future: ability to set key as a more human readable term like the column header and then map it here to an index) if (columnIndex % 1 === 0 && columnIndex < cols.length && columnIndex >= 0) { validatedSearchObj[columnIndex] = searchObj[columnIndex]; } } } } columnSearch = validatedSearchObj; if(Object.keys(validatedSearchObj).length !== 0){ //the search string doesn't matter. we'll use the search string in the columnSearch object! this.search('someValue'); } else { // nothing to search so reset jstree's search by passing an empty string this.search(''); } columnSearch = false; } // set default search for each column with no user defined search function (used when doing a columnSearch) for(i=0; idiv.jstree-grid-cell-root-'+this.rootid+' {line-height: '+anchorHeight+'px; height: '+anchorHeight+'px;}').appendTo("head"); // add container classes to the wrapper - EXCEPT those that are added by jstree, i.e. "jstree" and "jstree-*" q = cls.split(/\s+/).map(function(i){ var match = i.match(/^jstree(-|$)/); return (match ? "" : i); }); this.gridWrapper.addClass(q.join(" ")); },this)) .on("move_node.jstree",$.proxy(function(e,data){ var node = data.new_instance.element; //renderAWidth(node,this); // check all the children, because we could drag a tree over node.find("li > a").each($.proxy(function(i,elm){ //renderAWidth($(elm),this); },this)); },this)) .on("hover_node.jstree",$.proxy(function(node,selected,event){ var id = selected.node.id; if (this._hover_node !== null && this._hover_node !== undefined) { findDataCell(this.gridWrapper,this._hover_node).removeClass("jstree-hovered"); } this._hover_node = id; findDataCell(this.gridWrapper,id).addClass("jstree-hovered"); },this)) .on("dehover_node.jstree",$.proxy(function(node,selected,event){ var id = selected.node.id; this._hover_node = null; findDataCell(this.gridWrapper,id).removeClass("jstree-hovered"); },this)) .on("select_node.jstree",$.proxy(function(node,selected,event){ var id = selected.node.id; findDataCell(this.gridWrapper,id).addClass("jstree-clicked"); this.get_node(selected.node.id,true).children("div.jstree-grid-cell").addClass("jstree-clicked"); },this)) .on("deselect_node.jstree",$.proxy(function(node,selected,event){ var id = selected.node.id; findDataCell(this.gridWrapper,id).removeClass("jstree-clicked"); },this)) .on("deselect_all.jstree",$.proxy(function(node,selected,event){ // get all of the ids that were unselected var ids = selected.node || [], i; for (i=0;i"); //col.appendTo(colgroup); cl = cols[i].headerClass || ""; ccl = cols[i].columnClass || ""; val = cols[i].header || ""; do { coluuid = String(Math.floor(Math.random()*10000)); } while(this.colrefs[coluuid] !== undefined); // create a unique name for this column name = cols[i].value ? coluuid : "text"; this.colrefs[name] = cols[i]; if (val) {hasHeaders = true;} if(gs.stateful && localStorage['jstree-root-'+rootid+'-column-'+i]) width = localStorage['jstree-root-'+rootid+'-column-'+i]; else width = cols[i].width || defaultWidth; // we only deal with borders if width is not auto and not percentages borPadWidth = tr ? 1+6 : 2+8; // account for the borders and padding if (width !== 'auto' && typeof(width) !== "string") { width -= borPadWidth; } col = this.midWrapper.children("div.jstree-grid-column-"+i); last = $("
        ").css(conf).addClass("jstree-grid-div-"+this.uniq+"-"+i+" "+(tr?"ui-widget-header ":"")+" jstree-grid-header jstree-grid-header-cell jstree-grid-header-"+classAdd+" "+cl+" "+ccl).html(val); last.addClass((tr?"ui-widget-header ":"")+"jstree-grid-header jstree-grid-header-"+classAdd); if (this.settings.core.themes.ellipsis === true){ last.addClass('jstree-grid-ellipsis'); } last.prependTo(col); last.attr(COL_DATA_ATTR, name); totalWidth += last.outerWidth(); puller = $("
         
        ").appendTo(last); col.width(width); col.css("min-width",width); col.css("max-width",width); } last.addClass((tr?"ui-widget-header ":"")+"jstree-grid-header jstree-grid-header-last jstree-grid-header-"+classAdd); // if there is no width given for the last column, do it via automatic if (cols[cols.length-1].width === undefined) { totalWidth -= width; col.css({width:"auto"}); last.addClass("jstree-grid-width-auto").next(".jstree-grid-separator").remove(); } if (hasHeaders) { // save the offset of the div from the body //gs.divOffset = header.parent().offset().left; gs.header = header; } else { $("div.jstree-grid-header").hide(); } if (!this.bound && resizable) { this.bound = true; $(document).mouseup(function () { var ref, cols, width, headers, currentTree, colNum; if (isClickedSep) { colNum = toResize.prevAll(".jstree-grid-column").length; currentTree = toResize.closest(".jstree-grid-wrapper").find(".jstree"); ref = $.jstree.reference(currentTree); cols = ref.settings.grid.columns; headers = toResize.parent().children("div.jstree-grid-column"); if (isNaN(colNum) || colNum < 0) { ref._gridSettings.treeWidthDiff = currentTree.find("ins:eq(0)").width() + currentTree.find("[class~='jstree-anchor']:eq(0)").width() - ref._gridSettings.columns[0].width; } width = ref._gridSettings.columns[colNum].width = parseFloat(toResize.css("width")); isClickedSep = false; toResize = null; currentTree.trigger("resize_column.jstree-grid", [colNum,width]); } }).mousemove(function (e) { if (isClickedSep) { newMouseX = e.pageX; var diff = newMouseX - oldMouseX, oldPrevHeaderInner, oldPrevColWidth, newPrevColWidth; if (diff !== 0){ oldPrevHeaderInner = toResize.width(); oldPrevColWidth = parseFloat(toResize.css("width")); // handle a Chrome issue with columns set to auto // thanks to Brabus https://github.com/side-by-side if (!oldPrevColWidth) {oldPrevColWidth = toResize.innerWidth();} // make sure that diff cannot be beyond the left/right limits diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; newPrevColWidth = oldPrevColWidth+diff; // only do this if we are not shrinking past 0 on left - and limit it to that amount if ((diff > 0 || oldPrevHeaderInner > 0) && newPrevColWidth > MINCOLWIDTH) { toResize.width(newPrevColWidth+"px"); toResize.css("min-width",newPrevColWidth+"px"); toResize.css("max-width",newPrevColWidth+"px"); oldMouseX = newMouseX; } } } }); this.gridWrapper.on("selectstart", ".jstree-grid-resizable-separator", function () { return false; }).on("mousedown", ".jstree-grid-resizable-separator", function (e) { isClickedSep = true; oldMouseX = e.pageX; toResize = $(this).closest("div.jstree-grid-column"); // the max rightmost position we will allow is the right-most of the wrapper minus a buffer (10) return false; }) .on("dblclick", ".jstree-grid-resizable-separator", function (e) { var clickedSep = $(this), col = clickedSep.closest("div.jstree-grid-column"), oldPrevColWidth = parseFloat(col.css("width")), newWidth = 0, diff, colNum = col.prevAll(".jstree-grid-column").length, oldPrevHeaderInner = col.width(), newPrevColWidth; //find largest width col.find(".jstree-grid-cell").each(function() { var item = $(this), width; item.css("position", "absolute"); item.css("width", "auto"); width = item.outerWidth(); item.css("position", "relative"); if (width>newWidth) { newWidth = width; } }); diff = newWidth-oldPrevColWidth; // make sure that diff cannot be beyond the left limits diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; newPrevColWidth = (oldPrevColWidth+diff)+"px"; col.width(newPrevColWidth); col.css("min-width",newPrevColWidth); col.css("max-width",newPrevColWidth); $(this).closest(".jstree-grid-wrapper").find(".jstree").trigger("resize_column.jstree-grid",[colNum,newPrevColWidth]); }) .on("click", ".jstree-grid-separator", function (e) { // don't sort after resize e.stopPropagation(); }); } this.gridWrapper.on("click", ".jstree-grid-header-cell", function (e) { if (!_this.sort) { return; } // get column var name = $(this).attr(COL_DATA_ATTR); // sort order var symbol; if (gs.sortOrder === name && gs.sortAsc === true) { gs.sortAsc = false; symbol = "↓"; } else { gs.sortOrder = name; gs.sortAsc = true; symbol = "↑"; } // add sort arrow $(this.closest('.jstree-grid-wrapper')).find(".jstree-grid-sort-icon").remove(); $("").addClass("jstree-grid-sort-icon").appendTo($(this)).html(symbol); // sort by column var rootNode = _this.get_node('#'); _this.sort(rootNode, true); _this.redraw_node(rootNode, true); }); }; /* * Override redraw_node to correctly insert the grid */ this.redraw_node = function(obj, deep, is_callback, force_render) { // first allow the parent to redraw the node obj = parent.redraw_node.call(this, obj, deep, is_callback, force_render); // next prepare the grid for a redrawn node - but only if ths node is not hidden (search does that) if (obj && !this.is_hidden(obj)) { this._prepare_grid(obj); } return obj; }; this.refresh = function () { this._clean_grid(); return parent.refresh.apply(this,arguments); }; /* * Override set_id to update cell attributes */ this.set_id = function (obj, id) { var old; if(obj) { old = obj.id; } var result = parent.set_id.apply(this,arguments); if(result) { if (old !== undefined) { var grid = this.gridWrapper, oldNodes = [old], i; // get children if (obj && obj.children_d) { oldNodes = oldNodes.concat(obj.children_d); } // update id in children for (i=0;i", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), h2 = $("<"+"input />", { "value" : t, "class" : "jstree-rename-input", "css" : { "padding" : "0", "border" : "1px solid silver", "box-sizing" : "border-box", "display" : "inline-block", "height" : (this._data.core.li_height) + "px", "lineHeight" : (this._data.core.li_height) + "px", "width" : "150px" // will be set a bit further down }, "blur" : $.proxy(function () { var v = h2.val(); // save the value if changed if(v === "" || v === t) { v = t; } else { obj.data[col.value] = v; this.element.trigger('update_cell.jstree-grid',{node:obj, col:col.value, value:v, old:t}); this._prepare_grid(this.get_node(obj,true)); } h2.remove(); element.show(); }, this), "keydown" : function (event) { var key = event.which; if(key === 27) { this.value = t; } if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { event.stopImmediatePropagation(); } if(key === 27 || key === 13) { event.preventDefault(); this.blur(); } }, "click" : function (e) { e.stopImmediatePropagation(); }, "mousedown" : function (e) { e.stopImmediatePropagation(); }, "keyup" : function (event) { h2.width(Math.min(h1.text("pW" + this.value).width(),w)); }, "keypress" : function(event) { if(event.which === 13) { return false; } } }), fn = { fontFamily : element.css('fontFamily') || '', fontSize : element.css('fontSize') || '', fontWeight : element.css('fontWeight') || '', fontStyle : element.css('fontStyle') || '', fontStretch : element.css('fontStretch') || '', fontVariant : element.css('fontVariant') || '', letterSpacing : element.css('letterSpacing') || '', wordSpacing : element.css('wordSpacing') || '' }; element.hide(); element.parent().append(h2); h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); }; this.grid_hide_column = function (col) { this.midWrapper.find(".jstree-grid-column-"+col).hide(); }; this.grid_show_column = function (col) { this.midWrapper.find(".jstree-grid-column-"+col).show(); }; this._prepare_grid = function (obj) { var gs = this._gridSettings, c = gs.treeClass, _this = this, t, cols = gs.columns || [], width, tr = gs.isThemeroller, tree = this.element, rootid = this.rootid, classAdd = (tr?"themeroller":"regular"), img, objData = this.get_node(obj), defaultWidth = gs.columnWidth, conf = gs.defaultConf, cellClickHandler = function (tree,node,val,col,t) { return function(e) { //node = tree.find("#"+node.attr("id")); var event = jQuery.Event("select_cell.jstree-grid"); tree.trigger(event, [{value: val,column: col.header,node: node,grid:$(this),sourceName: col.value}]); if (!event.isDefaultPrevented()) { node.children(".jstree-anchor").trigger("click.jstree",e); } }; }, cellRightClickHandler = function (tree,node,val,col,t) { return function (e) { if (gs.gridcontextmenu) { e.preventDefault(); $.vakata.context.show(this,{ 'x' : e.pageX, 'y' : e.pageY }, gs.gridcontextmenu(_this,tree,node,val,col,t,e.target)); } }; }, hoverInHandler = function (node, jsTreeInstance) { return function() { jsTreeInstance.hover_node(node); }; }, hoverOutHandler = function (node, jsTreeInstance) { return function() { jsTreeInstance.dehover_node(node); }; }, i, val, cl, wcl, ccl, a, last, valClass, wideValClass, span, paddingleft, title, gridCellName, gridCellParentId, gridCellParent, gridCellPrev, gridCellPrevId, gridCellNext, gridCellNextId, gridCellChild, gridCellChildId, col, content, tmpWidth, mw = this.midWrapper, dataCell, lid = objData.id, highlightSearch, isClicked, peers = this.get_node(objData.parent).children, // find my position in the list of peers. "peers" is the list of everyone at my level under my parent, in order pos = $.inArray(lid,peers), hc = this.holdingCells, rendered = false, closed; // get our column definition t = $(obj); // find the a children a = t.children("[class~='jstree-anchor']"); highlightSearch = a.hasClass(SEARCHCLASS); isClicked = a.hasClass("jstree-clicked"); if (a.length === 1) { closed = !objData.state.opened; gridCellName = GRIDCELLID_PREFIX+escapeId(lid)+GRIDCELLID_POSTFIX; gridCellParentId = objData.parent === "#" ? null : objData.parent; a.addClass(c); //renderAWidth(a,_this); renderATitle(a,t,_this); last = a; // find which column our tree shuld go in var s = this.settings.grid; var treecol = 0; for (i=0;i' : '';} } else { content = val; } // content cannot be blank, or it messes up heights if (content === undefined || content === null || BLANKRE.test(content)) { content = " "; } // get the valueClass valClass = col.valueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.valueClass] || "" : ""; if (valClass && col.valueClassPrefix && col.valueClassPrefix !== "") { valClass = col.valueClassPrefix + valClass; } // get the wideValueClass wideValClass = col.wideValueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.wideValueClass] || "" : ""; if (wideValClass && col.wideValueClassPrefix && col.wideValueClassPrefix !== "") { wideValClass = col.wideValueClassPrefix + wideValClass; } // get the title title = col.title && objData.data !== null && objData.data !== undefined ? objData.data[col.title] || "" : ""; // strip out HTML title = title.replace(htmlstripre, ''); // get the width paddingleft = 7; width = col.width || defaultWidth; if (width !== 'auto') { width = tmpWidth || (width - paddingleft); } last = findDataCell(dataCell, lid); if (!last || last.length < 1) { last = $("
        "); $("").appendTo(last); last.attr("id",gridCellName+i); last.addClass(gridCellName); last.attr(NODE_DATA_ATTR,lid); if (highlightSearch) { last.addClass(SEARCHCLASS); } else { last.removeClass(SEARCHCLASS); } if (isClicked) { last.addClass("jstree-clicked"); } else { last.removeClass("jstree-clicked"); } if (this.settings.core.themes.ellipsis === true && i !== treecol) { last.addClass('jstree-grid-ellipsis'); } } // we need to put it in the dataCell - after the parent, but the position matters // if we have no parent, then we are one of the root nodes, but still need to look at peers // if we are first, i.e. pos === 0, we go right after the parent; // if we are not first, and our previous peer (one before us) is closed, we go right after the previous peer cell // if we are not first, and our previous peer is opened, then we have to find its youngest & lowest closed child (incl. leaf) // // probably be much easier to go *before* our next one // but that one might not be drawn yet // here is the logic for jstree drawing: // it draws peers from first to last or from last to first // it draws children before a parent // // so I can rely on my *parent* not being drawn, but I cannot rely on my previous peer or my next peer being drawn // so we do the following: // 1- We are the first child: install after the parent // 2- Our previous peer is already drawn: install after the previous peer // 3- Our previous peer is not drawn, we have a child that is drawn: install right before our first child // 4- Our previous peer is not drawn, we have no child that is drawn, our next peer is drawn: install right before our next peer // 5- Our previous peer is not drawn, we have no child that is drawn, our next peer is not drawn: install right after parent gridCellPrevId = pos <=0 ? objData.parent : findLastClosedNode(this,peers[pos-1]); gridCellPrev = findDataCell(dataCell,gridCellPrevId); gridCellNextId = pos >= peers.length-1 ? "NULL" : peers[pos+1]; gridCellNext = findDataCell(dataCell,gridCellNextId); gridCellChildId = objData.children && objData.children.length > 0 ? objData.children[0] : "NULL"; gridCellChild = findDataCell(dataCell,gridCellChildId); gridCellParent = findDataCell(dataCell,gridCellParentId); // if our parent is already drawn, then we put this in the right order under our parent if (gridCellParentId) { if (gridCellParent && gridCellParent.length > 0) { if (gridCellPrev && gridCellPrev.length > 0) { last.insertAfter(gridCellPrev); } else if (gridCellChild && gridCellChild.length > 0) { last.insertBefore(gridCellChild); } else if (gridCellNext && gridCellNext.length > 0) { last.insertBefore(gridCellNext); } else { last.insertAfter(gridCellParent); } rendered = true; } else { rendered = false; } // always put it in the holding cells, and then sort when the parent comes in, in case parent is (re)drawn later hc[gridCellName+i] = last; } else { if (gridCellPrev && gridCellPrev.length > 0) { last.insertAfter(gridCellPrev); } else if (gridCellChild && gridCellChild.length > 0) { last.insertBefore(gridCellChild); } else if (gridCellNext && gridCellNext.length > 0) { last.insertBefore(gridCellNext); } else { last.appendTo(dataCell); } rendered = true; } // do we have any children waiting for this cell? walk down through the children/grandchildren/etc tree if (rendered) { last.after(this.getHoldingCells(objData,i,hc)); } // need to make the height of this match the line height of the tree. How? span = last.children("span"); // create a span inside the div, so we can control what happens in the whole div versus inside just the text/background span.addClass(cl+" "+valClass).html(content); last = last.css(conf).addClass("jstree-grid-cell jstree-grid-cell-regular jstree-grid-cell-root-"+rootid+" jstree-grid-cell-"+classAdd+" "+wcl+ " " + wideValClass + (tr?" ui-state-default":"")).addClass("jstree-grid-col-"+i).addClass("jstree-animated"); // add click handler for clicking inside a grid cell last.click(cellClickHandler(tree,t,val,col,this)); last.on("contextmenu",cellRightClickHandler(tree,t,val,col,this)); last.hover(hoverInHandler(t, this), hoverOutHandler(t, this)); if (title) { span.attr("title",title); } tree.trigger("render_cell.jstree-grid", [{value: val, column: col.header, node: t, sourceName: col.value}]); } last.addClass("jstree-grid-cell-last"+(tr?" ui-state-default":"")); // if there is no width given for the last column, do it via automatic if (cols[cols.length-1].width === undefined) { last.addClass("jstree-grid-width-auto").next(".jstree-grid-separator").remove(); } } this.element.css({'overflow-y':'auto !important'}); }; // clean up holding cells this.holdingCells = {}; // need to do alternating background colors or borders }; })); MediaConch/Source/Resource/html/js/users/0000755000000000000000000000000013216666133017325 5ustar rootrootMediaConch/Source/Resource/html/js/users/userWebEngine.js0000644000000000000000000001152013216666133022424 0ustar rootrootvar user = (function() { var mcoUserToken; var setMcoUserToken = function(token) { mcoUserToken = token; } var getMcoUserToken = function() { return mcoUserToken; } var loadToken = function() { webpage.get_mco_token(function(t) { setMcoUserToken(t); }); } var loginForToken = function(form, callbackSuccess, callbackError) { var username = form[0][0].value; var password = form[0][1].value; webpage.get_version(function(version) { $.post({ url: urlUtils.publicApi('login/ckeck'), data: { username: username, password: password, app: 'mc-gui', version: version } }).done(function(data) { setMcoUserToken(data.key); webpage.save_mco_token(data.key); if (undefined !== callbackSuccess) { functionsUtils.executeFunctionByName(callbackSuccess, window); } }).fail(function (jqXHR) { if (undefined !== callbackError) { functionsUtils.executeFunctionByName(callbackError, window, jqXHR); } }); }); } var pushPolicyToMCO = function(policy, visibility) { webpage.policy_get_xml(policy, function(xml) { $.post({ url: urlUtils.protectedApi('policies/import'), data: { xml: xml, visibility: visibility }, beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }).done(function(data) { mcoMessage.success('Successfuly added to MediaConchOnline'); }).fail(function (jqXHR) { var data = JSON.parse(jqXHR.responseText); if (undefined !== data.message) { mcoMessage.error(data.message); } else { mcoMessage.error('Error'); } }); }); } var policyUnpublish = function(policyId, button) { /** * Unpublish a policy * @param int id policy ID of the policy to unpublish * * @return json * {"policyId":ID} */ $.ajax({ url: urlUtils.protectedApi('publicpolicies/unpublish/' + policyId), method: 'PUT', beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { unpublishPolicy.success(button); }) .fail(function (jqXHR) { unpublishPolicy.error(button); }) }; getPoliciesList = function() { $.get({ url: urlUtils.protectedApi('userpolicies/list'), beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { userPoliciesModal.displayPoliciesList(data.list); }) .fail(function (jqXHR) { userPoliciesModal.policiesListError(); }) }; getPolicy = function(policyId, button) { $.get({ url: urlUtils.protectedApi('userpolicies/policy/' + policyId), dataType: 'text', beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { // Save policy webpage.policy_import_data(data, function(res) { var json = JSON.parse(res); if (json.error) { userPoliciesModal.policyImportError(button); } else { // Get policy to display in jstree webpage.policy_get_jstree(json.policyId, function(res) { var json = JSON.parse(res); if (json.error) { userPoliciesModal.policyImportError(button); } else { userPoliciesModal.policyImportSuccess(button); policyTree.policyImport(json.policyTree); } }); } }); }) .fail(function (jqXHR) { userPoliciesModal.policyImportError(button); }) }; return { loadToken: loadToken, getMcoUserToken: getMcoUserToken, loginForToken: loginForToken, pushPolicyToMCO: pushPolicyToMCO, policyUnpublish: policyUnpublish, getPoliciesList: getPoliciesList, getPolicy: getPolicy, }; })(); MediaConch/Source/Resource/html/js/users/userWebKit.js0000644000000000000000000001103713216666133021751 0ustar rootrootvar user = (function() { var mcoUserToken; var setMcoUserToken = function(token) { mcoUserToken = token; } var getMcoUserToken = function() { return mcoUserToken; } var loadToken = function() { setMcoUserToken(webpage.get_mco_token()); } var loginForToken = function(form, callbackSuccess, callbackError) { var username = form[0][0].value; var password = form[0][1].value; var version = webpage.get_version(); $.post({ url: urlUtils.publicApi('login/ckeck'), data: { username: username, password: password, app: 'mc-gui', version: version } }).done(function(data) { setMcoUserToken(data.key); webpage.save_mco_token(data.key); if (undefined !== callbackSuccess) { functionsUtils.executeFunctionByName(callbackSuccess, window); } }).fail(function (jqXHR) { if (undefined !== callbackError) { functionsUtils.executeFunctionByName(callbackError, window, jqXHR); } }); }; var pushPolicyToMCO = function(policy, visibility) { $.post({ url: urlUtils.protectedApi('policies/import'), data: { xml: webpage.policy_get_xml(policy), visibility: visibility }, beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }).done(function(data) { mcoMessage.success('Successfuly added to MediaConchOnline'); }).fail(function (jqXHR) { var data = JSON.parse(jqXHR.responseText); if (undefined !== data.message) { mcoMessage.error(data.message); } else { mcoMessage.error('Error'); } }); } var policyUnpublish = function(policyId, button) { /** * Unpublish a policy * @param int id policy ID of the policy to unpublish * * @return json * {"policyId":ID} */ $.ajax({ url: urlUtils.protectedApi('publicpolicies/unpublish/' + policyId), method: 'PUT', beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { unpublishPolicy.success(button); }) .fail(function (jqXHR) { unpublishPolicy.error(button); }) }; getPoliciesList = function() { /** * User policies list * * @return json */ $.get({ url: urlUtils.protectedApi('userpolicies/list'), beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { userPoliciesModal.displayPoliciesList(data.list); }) .fail(function (jqXHR) { userPoliciesModal.policiesListError(); }) }; getPolicy = function(policyId, button) { $.get({ url: urlUtils.protectedApi('userpolicies/policy/' + policyId), dataType: 'text', beforeSend: function(xhr) { xhr.setRequestHeader('X-apiKey', getMcoUserToken()); } }) .done(function(data) { // Save policy var res = webpage.policy_import_data(data); var json = JSON.parse(res); if (json.error) { userPoliciesModal.policyImportError(button); } else { // Get policy to display in jstree var res = webpage.policy_get_jstree(json.policyId); var json = JSON.parse(res); if (json.error) { userPoliciesModal.policyImportError(button); } else { userPoliciesModal.policyImportSuccess(button); policyTree.policyImport(json.policyTree); } } }) .fail(function (jqXHR) { userPoliciesModal.policyImportError(button); }) }; return { loadToken: loadToken, getMcoUserToken: getMcoUserToken, loginForToken: loginForToken, pushPolicyToMCO: pushPolicyToMCO, policyUnpublish: policyUnpublish, getPoliciesList: getPoliciesList, getPolicy: getPolicy, }; })(); MediaConch/Source/Resource/html/js/policyTreeRulesMT.js0000644000000000000000000000603713216666133022123 0ustar rootrootvar policyTreeRulesMT = (function() { var display = function(node) { // Check if rule is part of a policy system var system = true; if ('u' == policyTree.getInstance().get_node(node.parent).type) { system = false; } // Enable/disable MI/MT switch button $('.ruleMediaTrace').prop('disabled', system); $('.ruleMediaInfo').prop('disabled', system); $('.ruleMediaInfoActions').addClass('hidden'); $('.ruleMediaTraceActions').removeClass('hidden'); $('.ruleMediaInfo').removeClass('active'); $('.ruleMediaTrace').addClass('active'); $('#xslPolicyRuleMt_title').val(node.text); if (policyTreeRules.isRuleMT(node)) { $('#xslPolicyRuleMt_field').val(node.data.field); if ('' != node.data.ope && $('#xslPolicyRuleMt_validator option[value="' + node.data.ope + '"]').length) { $('#xslPolicyRuleMt_validator option[value="' + node.data.ope + '"]').prop('selected', true); } else { $('#xslPolicyRuleMt_validator option[value="exists"]').prop('selected', true); } $('#xslPolicyRuleMt_validator').trigger('change'); $('#xslPolicyRuleMt_value').val(node.data.value); } else { $('#xslPolicyRuleMt_field').val(''); $('#xslPolicyRuleMt_validator option[value="exists"]').prop('selected', true); $('#xslPolicyRuleMt_validator').trigger('change'); $('#xslPolicyRuleMt_value').val(''); } if (system) { $('#xslPolicyRuleMt_title').prop('disabled', true); $('#xslPolicyRuleMt_field').prop('disabled', true); $('#xslPolicyRuleMt_validator').prop('disabled', true); $('#xslPolicyRuleMt_value').prop('disabled', true); $('#xslPolicyRuleMt_SaveRule').addClass('hidden'); $('#xslPolicyRuleMt_DuplicateRule').addClass('hidden'); $('#xslPolicyRuleMt_DeleteRule').addClass('hidden'); } else { $('#xslPolicyRuleMt_title').prop('disabled', false); $('#xslPolicyRuleMt_field').prop('disabled', false); $('#xslPolicyRuleMt_validator').prop('disabled', false); $('#xslPolicyRuleMt_value').prop('disabled', false); $('#xslPolicyRuleMt_SaveRule').removeClass('hidden'); $('#xslPolicyRuleMt_DuplicateRule').removeClass('hidden'); $('#xslPolicyRuleMt_DeleteRule').removeClass('hidden'); } $('#policyFix').affix('checkPosition'); }; var displayValueField = function(validator) { // If validator is empty do not display the value field if ('' == validator || 'exists' == validator || 'must not exist' == validator) { $('#xslPolicyRuleMt_value').parent().addClass('hidden'); } else { $('#xslPolicyRuleMt_value').parent().removeClass('hidden'); } } return { display: display, displayValueField: displayValueField, } })(); MediaConch/Source/Resource/html/js/publicPolicies/0000755000000000000000000000000013216666133021132 5ustar rootrootMediaConch/Source/Resource/html/js/publicPolicies/list.js0000644000000000000000000002075013216666133022447 0ustar rootrootfunction initPage() { user.loadToken(); mcoMessage.init('.displayMessages'); modalBinding(); // Resize policy header when screen is resized $(window).resize(function () { publicPoliciesList.policyDescriptionHeight(); }); } function modalBinding() { $('#modalPolicy').on('show.bs.modal', function (event) { var policyElem = $(event.relatedTarget).parent().parent().parent(); policyTree.refreshData(policyElem.data('policy-id'), policyElem.data('user-id')); // Set policyId and userId in modal $(this).data('policy-id', policyElem.data('policy-id')).data('user-id', policyElem.data('user-id')); // Add to my policies or unpublish button if (true === policyElem.data('allow-edit')) { $('.modalPolicyImport').hide(); $('.alert-modal-create-policy').hide(); $('.modalPolicyUnpublish').show(); } else { $('.modalPolicyUnpublish').hide(); $('.modalPolicyImport').show(); } }); $('.modalPolicyExport').on('click', function (event) { var policyElem = $('#modalPolicy'); publicPoliciesListAjax.policyExport(policyElem.data('policy-id'), policyElem.data('user-id')); }); $('.modalPolicyImport').on('click', function (event) { var policyElem = $('#modalPolicy'); publicPoliciesListAjax.policyImport(policyElem.data('policy-id'), policyElem.data('user-id'), $(this)); }); $('.modalPolicyUnpublish').on('click', function (event) { var policyElem = $('#modalPolicy'); user.policyUnpublish(policyElem.data('policy-id'), $(this)); }); } var publicPoliciesList = (function() { var displayList = function(list) { $.each(list, function(index, policy) { if (undefined === policy.license || '' == policy.license) { policy.license = 'Other'; } // Start wrapper line if (0 == index % 2) { $('#publicPoliciesList').append('
        '); } // Add to my policies or unpublish button if (true === policy.allowEdit) { var userButton = '' } else { var userButton = ''; } $('#publicPoliciesList').append( '
        \
        \
        \

        ' + policy.name + '

        \ ' + policy.description + ' \
        \

        \ Maintainer: ' + policy.user.name + ' \ License: ' + policy.license + ' \

        \
        \ ' + userButton + ' \ \
        \
        \
        ' ); // End wrapper line if (1 == index % 2) { $('#publicPoliciesList').append('
        '); } else { if (list.length == (index + 1)) { $('#publicPoliciesList').append('
        '); } } }); policyDescriptionHeight(); buttonBindings(); }; // Adapt height of policy header to have buttons on the same line var policyDescriptionHeight = function() { var previousElem; // Apply only on medium screen and up if ($(window).width() >= 768) { $('.policyBox header').each(function(index, elem) { if (index % 2) { if (previousElem.clientHeight > elem.clientHeight) { $(elem).height(previousElem.clientHeight); } else if (elem.clientHeight > previousElem.clientHeight) { $(previousElem).height(elem.clientHeight); } } else { previousElem = elem; } }); } else { $('.policyBox header').each(function(index, elem) { $(elem).height('auto'); }); } }; var buttonBindings = function() { $('.policyExport').on('click', function (event) { var policyElem = $(this).parent().parent(); publicPoliciesListAjax.policyExport(policyElem.data('policy-id'), policyElem.data('user-id')); }); $('.policyImport').on('click', function (event) { var policyElem = $(this).parent().parent(); publicPoliciesListAjax.policyImport(policyElem.data('policy-id'), policyElem.data('user-id'), $(this)); }); $('.policyUnpublish').on('click', function (event) { var policyElem = $(this).parent().parent(); user.policyUnpublish(policyElem.data('policy-id'), $(this)); }); } return { displayList: displayList, policyDescriptionHeight: policyDescriptionHeight, }; })(); var importPolicy = (function() { var success = function(data, button) { button.fadeOut(200).replaceWith(''); } var error = function(button) { button.fadeOut(200).replaceWith(''); } return { success: success, error: error, }; })(); var unpublishPolicy = (function () { var success = function(button) { // Disable button and links in policyBox and modal if (button.hasClass('policyUnpublish')) { button.parent().find('button').prop('disabled', true); button.parent().parent().addClass('policyBoxDisabled').find('h4 a').on('click', function(e) { e.preventDefault(); e.stopPropagation(); }); } else { button.parent().find('button.btn-primary').prop('disabled', true); var policyBoxId = $('#modalPolicy').data('policy-id'); $('.policyBox-' + policyBoxId).addClass('policyBoxDisabled').find('button').prop('disabled', true); $('.policyBox-' + policyBoxId).find('h4 a').on('click', function(e) { e.preventDefault(); e.stopPropagation(); }); } button.hide().after(''); } var error = function(button) { button.hide().after(''); } return { success: success, error: error, }; })(); var policyListSpinner = (function() { var show = function() { $('.publicPoliciesListSpinner').removeClass('hidden'); }; var hide = function() { $('.publicPoliciesListSpinner').addClass('hidden'); }; return { show: show, hide: hide, }; })(); var timer_for_ready = null; $(document).ready(function () { (function loop_init(time) { timer_for_ready = setTimeout(function() { if (webpage === undefined) loop_init(100); else { timer_for_ready = null; initPage(); setTimeout(function() { publicPoliciesListAjax.getList(); }, 100) } }, time); })(0); }); $(window).unload(function() { if (timer_for_ready) clearTimeout(timer_for_ready); publicPoliciesListAjax.leave(); }); MediaConch/Source/Resource/html/js/publicPolicies/listWebKit.js0000644000000000000000000000730513216666133023556 0ustar rootrootvar publicPoliciesListAjax = (function() { var get_cb = null; var getList = function() { if (undefined === user.getMcoUserToken() || '' == user.getMcoUserToken()) { var apiAddress = urlUtils.publicApi("publicpolicies/list"); } else { var apiAddress = urlUtils.protectedApi("publicpolicies/list"); } /** * Get the json for jstree * * @return json * {"policiesTree":POLICIES_JSTREE_JSON} */ var cb = $.get({ url: apiAddress, dataType: "json", beforeSend: function(xhr) { if (undefined !== user.getMcoUserToken() && '' != user.getMcoUserToken()) { xhr.setRequestHeader('X-apiKey', user.getMcoUserToken()); } } }).done(function(data) { publicPoliciesListAjax.setGetCb(null); policyListSpinner.hide(); publicPoliciesList.displayList(data.list); }).fail(function (jqXHR) { publicPoliciesListAjax.setGetCb(null); policyListSpinner.hide(); mcoMessage.fail(jqXHR); }); publicPoliciesListAjax.setGetCb(cb); }; var getApiPolicyUrl = function(policyId, policyUserId) { /** * Url of policy API * @param int policyId policy ID of the policy * @param int policyUserId user ID of the policy * * @return string * /api/public/v1/publicpolicies/policy/POLICYID/POLICYUSERID */ return urlUtils.publicApi("publicpolicies/policy/" + policyId + "/" + policyUserId) }; var policyExport = function(policyId, policyUserId) { /** * Export XML of a policy * @param int policyId policy ID of the policy to export * @param int policyUserId user ID of the policy to export * * @return XML */ $.get({ url: urlUtils.publicApi("publicpolicies/policy/export/" + policyId + "/" + policyUserId), dataType: "text", async: false }).done(function(data) { var res = webpage.policy_export_data(data); var json = JSON.parse(res); if (json.error) mcoMessage.error(json.error); }).fail(function (jqXHR) { mcoMessage.fail(jqXHR); }); }; var policyImport = function(policyId, policyUserId, button) { /** * Import a policy to user policies * @param int policyId policy ID of the policy to export * @param int policyUserId user ID of the policy to export * * @return json * {"policyId":ID} */ $.get({ url: urlUtils.publicApi("publicpolicies/policy/export/" + policyId + "/" + policyUserId), dataType: "text", async: false }).done(function(data) { var res = webpage.policy_import_data(data); var json = JSON.parse(res); if (json.error) { importPolicy.error(button); } importPolicy.success(data.policyId, button); }).fail(function (jqXHR) { importPolicy.error(button); }); }; var setGetCb = function(cb) { get_cb = cb; }; var getGetCb = function(cb) { return get_cb; }; var leave = function() { if (get_cb) { get_cb.abort(); setGetCb(null); } }; return { getList: getList, getApiPolicyUrl: getApiPolicyUrl, policyExport: policyExport, policyImport: policyImport, getGetCb: getGetCb, setGetCb: setGetCb, leave: leave }; })(); MediaConch/Source/Resource/html/js/publicPolicies/listWebEngine.js0000644000000000000000000000651013216666133024231 0ustar rootrootvar publicPoliciesListAjax = (function() { var getList = function() { if (undefined === user.getMcoUserToken() || '' == user.getMcoUserToken()) { var apiAddress = urlUtils.publicApi("publicpolicies/list"); } else { var apiAddress = urlUtils.protectedApi("publicpolicies/list"); } /** * Get the json for jstree * * @return json * {"policiesTree":POLICIES_JSTREE_JSON} */ $.get({ url: apiAddress, dataType: "json", beforeSend: function(xhr) { if (undefined !== user.getMcoUserToken() && '' != user.getMcoUserToken()) { xhr.setRequestHeader('X-apiKey', user.getMcoUserToken()); } } }).done(function(data) { policyListSpinner.hide(); publicPoliciesList.displayList(data.list); }).fail(function (jqXHR) { policyListSpinner.hide(); mcoMessage.fail(jqXHR); }); }; var getApiPolicyUrl = function(policyId, policyUserId) { /** * Url of policy API * @param int policyId policy ID of the policy * @param int policyUserId user ID of the policy * * @return string * /api/public/v1/publicpolicies/policy/POLICYID/POLICYUSERID */ return urlUtils.publicApi("publicpolicies/policy/" + policyId + "/" + policyUserId) }; var policyExport = function(policyId, policyUserId) { /** * Export XML of a policy * @param int policyId policy ID of the policy to export * @param int policyUserId user ID of the policy to export * * @return XML */ $.get({ url: urlUtils.publicApi("publicpolicies/policy/export/" + policyId + "/" + policyUserId), dataType: "text", async: false }).done(function(data) { webpage.policy_export_data(data, function (res) { var json = JSON.parse(res); if (json.error) mcoMessage.error(json.error); }); }).fail(function (jqXHR) { mcoMessage.fail(jqXHR); }); }; var policyImport = function(policyId, policyUserId, button) { /** * Import a policy to user policies * @param int policyId policy ID of the policy to export * @param int policyUserId user ID of the policy to export * * @return json * {"policyId":ID} */ $.get({ url: urlUtils.publicApi("publicpolicies/policy/export/" + policyId + "/" + policyUserId), dataType: "text", async: false }).done(function(data) { webpage.policy_import_data(data, function (res) { var json = JSON.parse(res); if (json.error) { importPolicy.error(button); } importPolicy.success(data.policyId, button); }); }).fail(function (jqXHR) { importPolicy.error(button); }); }; var leave = function () { }; return { getList: getList, getApiPolicyUrl: getApiPolicyUrl, policyExport: policyExport, policyImport: policyImport, leave: leave, }; })(); MediaConch/Source/Resource/html/js/publicPolicies/listPolicyTree.js0000644000000000000000000001215613216666133024450 0ustar rootrootvar policyTree = (function() { var instance = null; var policyId = null; var policyUserId = null; var init = function() { // Disable F2 shortcut (rename) in jstree, needs to be done before jstree initialization $('#policyTree').on('keydown.jstree', '.jstree-anchor', function(event) { if (113 == event.keyCode) { event.stopImmediatePropagation(); return false; } }); $('#policyTree').jstree({ core: { check_callback: function (operation, node, parent, position, more) { if (operation === 'copy_node' || operation === 'move_node') { return false; // disable copy and move } else { return true; } }, multiple: false, dblclick_toggle: true, data: { url: function (node) { return publicPoliciesListAjax.getApiPolicyUrl(policyId, policyUserId); }, dataType: 'json', success: function() { $('#modalPolicy .modal-body .policyError').remove(); $('#policyTree').show(); $('#modalPolicy .btn-primary').prop('disabled', false); }, error: function() { $('#policyTree').hide(); $('#modalPolicy .modal-body').append('
        Error: the requested policy can not be retrieved
        '); $('#modalPolicy .btn-primary').prop('disabled', true); } } }, plugins: ['search', 'types'], types: { default: {'icon' : 'glyphicon glyphicon-folder-open'}, a: {icon : 'glyphicon glyphicon-folder-open'}, u: {icon : 'glyphicon glyphicon-folder-open'}, s: {icon : 'glyphicon glyphicon-folder-open'}, up: {icon : 'glyphicon glyphicon-folder-open'}, sp: {icon : 'glyphicon glyphicon-folder-open'}, r: {icon : 'glyphicon glyphicon-file'}, } }) .on('refresh.jstree', function () { $(this).jstree('open_all'); }) .on('hover_node.jstree', function (event, data) { $('#' + data.node.id + '_anchor').popover({title: policyHoverTitle(data.node), content: policyHoverContent(data.node), placement: 'auto right', trigger: 'hover', html: true}).popover('show'); }) .on('ready.jstree', function () { $(this).jstree('open_all'); var to = false; $('#policyTreeSearch').keyup(function () { if(to) { clearTimeout(to); } to = setTimeout(function () { var v = $('#policyTreeSearch').val(); instance.search(v); }, 250); }); }); instance = $('#policyTree').jstree(true); } var refreshData = function(id, userId) { policyId = id; policyUserId = userId; if (null === instance) { init(); } else { instance.refresh(); } }; var policyHoverTitle = function(node) { var data = ''; if ('u' == node.type) { if ('' != node.data.description) { data = 'Policy'; } } else if ('r' == node.type) { data = 'Rule'; } return data; }; var policyHoverContent = function(node) { var data = ''; if ('u' == node.type) { if ('' != node.data.description) { data = textUtils.nl2br(textUtils.sanitizeHtml(node.data.description));; } } else if ('r' == node.type) { data += '
          '; if (undefined == node.data.scope || '' == node.data.scope) { data += '
        • Scope: MediaInfo
        • '; } else { data += '
        • Scope: MediaTrace
        • '; } if (undefined != node.data.tracktype) { data += '
        • TrackType: ' + node.data.tracktype + '
        • '; } if (undefined != node.data.field) { data += '
        • Field: ' + node.data.field + '
        • '; } if (undefined == node.data.occurrence || -1 == node.data.occurrence || '*' == node.data.occurrence) { data += '
        • Occurence: *
        • '; } else { data += '
        • Occurence: ' + node.data.occurrence + '
        • '; } if (undefined != node.data.ope) { data += '
        • Operator: ' + node.data.ope + '
        • '; } if (undefined != node.data.value) { data += '
        • Value: ' + node.data.value + '
        • '; } data += '
        '; } return data; } return { init: init, refreshData: refreshData, }; })(); MediaConch/Source/Resource/html/js/checker/0000755000000000000000000000000013216666133017570 5ustar rootrootMediaConch/Source/Resource/html/js/checker/webkit.js0000644000000000000000000002330213216666133021413 0ustar rootrootvar checkerAjax = (function() { var formRequest = function(form, formValues, formType) { var res = null; var options = []; if (formType === 'file') { if ($('#checkerUpload_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } res = webpage.on_file_upload_selected($('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), $('#checkerUpload_fixer').is(':checked'), options); } else if (formType === 'url') { if ($('#checkerOnline_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } res = webpage.on_file_online_selected($('#checkerOnline_file').val(), $('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), false, options); } else if (formType === 'repository') { if ($('#checkerRepository_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } res = webpage.on_file_repository_selected($('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), $('#checkerRepository_fixer').is(':checked'), options); } formRequestResponse(res, formValues); }; var addExisting = function() { var res = undefined; res = webpage.on_file_from_db_selected(); //Nothing to add if (res === undefined || !res.length) return; data = JSON.parse(res); var success = 0; $.each(data.success, function(index, value) { if (value.success) { success++; checkerTable.updateFileOrAddFile(value.filename, value.transactionId, value.formValues); } }); if (success > 0) { checkerTable.draw(); checkerTable.jumpToPageContainingResultId(data.success[0].transactionId); checkerTable.startWaitingLoop(); } }; var formRequestResponse = function(res, formValues) { if (res === null) { mcoMessage.error("Form is not reconized."); return; } data = JSON.parse(res); var success = 0; $.each(data.success, function(index, value) { if (value.success) { success++; checkerTable.updateFileOrAddFile(value.filename, value.transactionId, formValues); } }); if (success > 0) { checkerTable.draw(); checkerTable.jumpToPageContainingResultId(data.success[0].transactionId); checkerTable.startWaitingLoop(); if (success == 1) mcoMessage.success('File added successfuly'); else mcoMessage.success('Files added successfuly'); } else if (data.error && data.error.length) mcoMessage.error(data.error); else mcoMessage.error("An internal error appears"); }; var checkerStatus = function(ids) { checkerTable.setCheckerStatusInProgress(true); /** * Get the status for multiple files * @param array ids List of files ID * * @return json * {"status":{"fileId":{"finish":true,"tool":2,"associatedFiles":{"fileId":"fileName"}},"fileId":{"finish":false,"percent":42}}} */ res = webpage.file_is_analyzed(ids); data = JSON.parse(res); checkerTable.setCheckerStatusInProgress(false); checkerTable.processCheckerStatusRequest(data.status); }; var statusReportsMulti = function(reports) { /** * Get the implementation status and policy status for multiple files * @param array reports List of files ID and report type * * @return json * {"fileId":{"implemReport":{"valid":true,"fileId":"1","error":null},"policyReport":{"valid":false,"fileId":"1","error":null}}, ...} */ var list_ids = []; var list_policy_ids = []; $.each(reports, function(id, report) { if (report["id"] !== undefined) { list_ids.push(report["id"]); if (report["policyId"] === undefined) list_policy_ids.push(-1); else list_policy_ids.push(report["policyId"]); } }); res = webpage.status_reports_multi(list_ids, list_policy_ids); data = JSON.parse(res); $.each(data, function(index, result) { if (result.error && result.error.length) mcoMessage.error(result.error); if (result.implemReport !== undefined) implementationCell.success(result.implemReport, result.implemReport.fileId); if (result.policyReport !== undefined) policyCell.success(result.policyReport, result.policyReport.fileId); }) }; var policyStatus = function(fileId, policyId) { res = webpage.policy_is_valid(fileId, policyId); data = JSON.parse(res); policyCell.success(data, fileId); }; var policyReport = function(fileId, policy, display) { res = webpage.on_fill_policy_report(fileId, policy, display); data = JSON.parse(res); policyCell.displayReport(fileId, data); }; var implementationStatus = function(fileId, tool) { /** * Get the implementation status for a file * @param int id The file ID * @param int reportType The report type ID * * @return json * {"valid":true,"fileId":"fileId","error":null} */ res = webpage.implementation_is_valid(fileId); data = JSON.parse(res); implementationCell.success(data, fileId); }; var implementationReport = function(fileId, display, verbosity, tool) { res = webpage.on_fill_implementation_report(fileId, display, verbosity); data = JSON.parse(res); implementationCell.displayReport(fileId, data); }; var createPolicyFromFileId = function(fileId) { res = webpage.on_create_policy_from_file(fileId); data = JSON.parse(res); if (data.error && data.error.length) mediaInfoCell.createPolicyError(fileId); else mediaInfoCell.createPolicySuccess(data, fileId); }; var forceAnalyze = function(fileId) { res = webpage.checker_force_analyze(fileId); data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); else { checkerTable.startWaitingLoop(); mcoMessage.success('File reloaded successfuly'); } }; var downloadImplementationReportUrl = function(fileId, tool, display, verbosity) { webpage.on_save_implementation_report(fileId, display, verbosity); }; var downloadPolicyReportUrl = function(fileId, policy, display) { webpage.on_save_policy_report(fileId, policy, display); }; var downloadReportUrl = function(fileId, reportType, output) { if (reportType === "mi") webpage.on_save_mediainfo_report(fileId, output ? output : ""); else if (reportType === "mt") webpage.on_save_mediatrace_report(fileId); }; var reportTreeUrl = function(fileId, reportType) { if (reportType === "mi") { res = webpage.on_fill_mediainfo_report(fileId); return res; } else if (reportType === "mt") { res = webpage.on_fill_mediatrace_report(fileId); return res; } }; var getMediaInfoOutputList = function(fileId) { res = webpage.on_fill_output_list(); data = JSON.parse(res); mediaInfoCell.updateOutputList(data, fileId); }; var closeAll = function() { webpage.close_all(); }; var closeElement = function(id) { webpage.close_element(id); }; return { formRequest: formRequest, formRequestResponse: formRequestResponse, checkerStatus: checkerStatus, statusReportsMulti: statusReportsMulti, policyStatus: policyStatus, policyReport: policyReport, implementationStatus: implementationStatus, implementationReport: implementationReport, createPolicyFromFileId: createPolicyFromFileId, forceAnalyze: forceAnalyze, downloadImplementationReportUrl: downloadImplementationReportUrl, downloadPolicyReportUrl: downloadPolicyReportUrl, downloadReportUrl: downloadReportUrl, reportTreeUrl: reportTreeUrl, getMediaInfoOutputList:getMediaInfoOutputList, addExisting: addExisting, closeAll: closeAll, closeElement: closeElement, }; })(); MediaConch/Source/Resource/html/js/checker/webengine.js0000644000000000000000000002547113216666133022102 0ustar rootrootvar checkerAjax = (function() { var formRequest = function(form, formValues, formType) { var res = null; var options = []; if (formType === 'file') { if ($('#checkerUpload_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } webpage.on_file_upload_selected($('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), $('#checkerUpload_fixer').is(':checked'), options, function (res) { formRequestResponse(res, formValues); }); } else if (formType === 'url') { if ($('#checkerOnline_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } webpage.on_file_online_selected($('#checkerOnline_file').val(), $('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), false, options, function (res) { formRequestResponse(res, formValues); }); } else if (formType === 'repository') { if ($('#checkerRepository_parseSpeed').is(':checked')) { options.push("file_parsespeed"); options.push("1"); } webpage.on_file_repository_selected($('.tab-content .active .policyList').val(), $('.tab-content .active .displayList').val(), $('.tab-content .active .verbosityList').val(), $('#checkerRepository_fixer').is(':checked'), options, function (res) { formRequestResponse(res, formValues); }); } }; var addExisting = function() { var res = undefined; webpage.on_file_from_db_selected(function(res) { //Nothing to add if (res === undefined || !res.length) return; data = JSON.parse(res); var success = 0; $.each(data.success, function(index, value) { if (value.success) { success++; checkerTable.updateFileOrAddFile(value.filename, value.transactionId, value.formValues); } }); if (success > 0) { checkerTable.draw(); checkerTable.jumpToPageContainingResultId(data.success[0].transactionId); checkerTable.startWaitingLoop(); } }); }; var formRequestResponse = function(res, formValues) { if (res === null) { mcoMessage.error("Form is not reconized."); return; } data = JSON.parse(res); var success = 0; $.each(data.success, function(index, value) { if (value.success) { success++; checkerTable.updateFileOrAddFile(value.filename, value.transactionId, formValues); } }); if (success > 0) { checkerTable.draw(); checkerTable.jumpToPageContainingResultId(data.success[0].transactionId); checkerTable.startWaitingLoop(); if (success == 1) mcoMessage.success('File added successfuly'); else mcoMessage.success('Files added successfuly'); } else if (data.error && data.error.length) mcoMessage.error(data.error); else mcoMessage.error("An internal error appears"); }; var checkerStatus = function(ids) { checkerTable.setCheckerStatusInProgress(true); /** * Get the status for multiple files * @param array ids List of files ID * * @return json * {"status":{"fileId":{"finish":true,"tool":2,"associatedFiles":{"fileId":"fileName"}},"fileId":{"finish":false,"percent":42}}} */ webpage.file_is_analyzed(ids, function(res) { data = JSON.parse(res); checkerTable.setCheckerStatusInProgress(false); checkerTable.processCheckerStatusRequest(data.status); }); }; var statusReportsMulti = function(reports) { /** * Get the implementation status and policy status for multiple files * @param array reports List of files ID and report type * * @return json * {"fileId":{"implemReport":{"valid":true,"fileId":"1","error":null},"policyReport":{"valid":false,"fileId":"1","error":null}}, ...} */ var list_ids = []; var list_policy_ids = []; $.each(reports, function(id, report) { if (report["id"] !== undefined) { list_ids.push(report["id"]); if (report["policyId"] === undefined) list_policy_ids.push(-1); else list_policy_ids.push(report["policyId"]); } }); webpage.status_reports_multi(list_ids, list_policy_ids, function(res) { data = JSON.parse(res); $.each(data, function(index, result) { if (result.error && result.error.length) mcoMessage.error(result.error); if (result.implemReport !== undefined) implementationCell.success(result.implemReport, result.implemReport.fileId); if (result.policyReport !== undefined) policyCell.success(result.policyReport, result.policyReport.fileId); }) }); }; var policyStatus = function(fileId, policyId) { webpage.policy_is_valid(fileId, policyId, function(res) { data = JSON.parse(res); policyCell.success(data, fileId); }); }; var policyReport = function(fileId, policy, display) { webpage.on_fill_policy_report(fileId, policy, display, function(res) { data = JSON.parse(res); policyCell.displayReport(fileId, data); }); }; var implementationStatus = function(fileId, tool) { /** * Get the implementation status for a file * @param int id The file ID * @param int reportType The report type ID * * @return json * {"valid":true,"fileId":"fileId","error":null} */ webpage.implementation_is_valid(fileId, function(res) { data = JSON.parse(res); implementationCell.success(data, fileId); }); }; var implementationReport = function(fileId, display, verbosity, tool) { webpage.on_fill_implementation_report(fileId, display, verbosity, function(res) { data = JSON.parse(res); implementationCell.displayReport(fileId, data); }); }; var createPolicyFromFileId = function(fileId) { webpage.on_create_policy_from_file(fileId, function(res) { data = JSON.parse(res); if (data.error && data.error.length) mediaInfoCell.createPolicyError(fileId); else mediaInfoCell.createPolicySuccess(data, fileId); }); }; var forceAnalyze = function(fileId) { webpage.checker_force_analyze(fileId, function(res) { data = JSON.parse(res); if (data.error && data.error.length) mcoMessage.error(data.error); else { checkerTable.startWaitingLoop(); mcoMessage.success('File reloaded successfuly'); } }); }; var downloadImplementationReportUrl = function(fileId, tool, display, verbosity) { webpage.on_save_implementation_report(fileId, display, verbosity); }; var downloadPolicyReportUrl = function(fileId, policy, display) { webpage.on_save_policy_report(fileId, policy, display); }; var downloadReportUrl = function(fileId, reportType, output) { if (reportType === "mi") webpage.on_save_mediainfo_report(fileId, output ? output : ""); else if (reportType === "mt") webpage.on_save_mediatrace_report(fileId); }; var reportTreeUrl = function(fileId, reportType) { if (reportType === "mi") { webpage.on_fill_mediainfo_report(fileId, function(res) { return res; }); } else if (reportType === "mt") { webpage.on_fill_mediatrace_report(fileId, function(res) { return res; }); } }; var getMediaInfoOutputList = function(fileId) { webpage.on_fill_output_list(function(res) { data = JSON.parse(res); mediaInfoCell.updateOutputList(data, fileId); }); }; var closeAll = function() { webpage.close_all(); }; var closeElement = function(id) { webpage.close_element(id); }; return { formRequest: formRequest, formRequestResponse: formRequestResponse, checkerStatus: checkerStatus, statusReportsMulti: statusReportsMulti, policyStatus: policyStatus, policyReport: policyReport, implementationStatus: implementationStatus, implementationReport: implementationReport, createPolicyFromFileId: createPolicyFromFileId, forceAnalyze: forceAnalyze, downloadImplementationReportUrl: downloadImplementationReportUrl, downloadPolicyReportUrl: downloadPolicyReportUrl, downloadReportUrl: downloadReportUrl, reportTreeUrl: reportTreeUrl, getMediaInfoOutputList:getMediaInfoOutputList, addExisting: addExisting, closeAll: closeAll, closeElement: closeElement, }; })(); MediaConch/Source/Resource/html/js/checker/cellImplementation.js0000644000000000000000000002026313216666133023756 0ustar rootrootvar implementationCell = (function() { var result; var init = function(table) { result = table; }; var success = function(data, fileId) { var nodeCell = result.$('#result-' + fileId); var nodeImplem = $(result.cell(nodeCell, 1).node()); if (data.valid) { nodeImplem.addClass('success'); var implemResultText = ' Valid' } else { nodeImplem.addClass('danger'); var implemResultText = ' Not valid'; } result.cell(nodeCell, 1).data('
        ' + implemResultText + '
        '); nodeImplem.find('.implem-view').on('click', function(e) { e.preventDefault(); var nodeModal = result.$('#result-' + fileId); if (!$('#modalConformance-' + fileId).length) { $('.result-container').append(' \ '); addSpinnerToModal(fileId); checkerAjax.implementationReport(fileId, nodeModal.data('display'), nodeModal.data('verbosity'), nodeModal.data('tool')); $('#modalConformance-' + fileId + ' .implem-dld').on('click', function(e) { e.preventDefault(); var modalDisplay = $('#modalConformanceDisplay-' + fileId).val(); var modalVerbosity = $('#modalConformanceVerbosity-' + fileId).val(); checkerAjax.downloadImplementationReportUrl(fileId, nodeModal.data('tool'), modalDisplay, modalVerbosity); }); // Update report when display is changed var displayList = $('.tab-content .active .displayList').clone(); displayList.attr('id', 'modalConformanceDisplay-' + fileId); displayList.find('option').prop('selected', false); displayList.find("option[value = '" + nodeModal.data('display') + "']").prop('selected', true); $('#modalConformanceDisplay-' + fileId).replaceWith(displayList); $('#modalConformanceDisplay-' + fileId).on('change', function(e) { var modalDisplay = $('#modalConformanceDisplay-' + fileId).val(); var modalVerbosity = $('#modalConformanceVerbosity-' + fileId).val(); addSpinnerToModal(fileId); checkerAjax.implementationReport(fileId, modalDisplay, modalVerbosity, nodeModal.data('tool')); }); // Update report when verbosity is changed var verbosityList = $('.tab-content .active .verbosityList').clone(); verbosityList.attr('id', 'modalConformanceVerbosity-' + fileId); verbosityList.find('option').prop('selected', false); verbosityList.find("option[value = '" + nodeModal.data('verbosity') + "']").prop('selected', true); $('#modalConformanceVerbosity-' + fileId).replaceWith(verbosityList); $('#modalConformanceVerbosity-' + fileId).on('change', function(e) { var modalDisplay = $('#modalConformanceDisplay-' + fileId).val(); var modalVerbosity = $('#modalConformanceVerbosity-' + fileId).val(); addSpinnerToModal(fileId); checkerAjax.implementationReport(fileId, modalDisplay, modalVerbosity, nodeModal.data('tool')); }); if (2 != nodeModal.data('tool')) { $('#modalConformance-' + fileId + ' .modal-implem-verbosity').hide(); } } }); nodeImplem.find('.implem-dld').on('click', function(e) { e.preventDefault(); var nodeDld = result.$('#result-' + fileId); checkerAjax.downloadImplementationReportUrl(fileId, nodeDld.data('tool'), nodeDld.data('display'), nodeDld.data('verbosity')); }); }; var error = function(fileId) { var nodeCell = result.$('#result-' + fileId); var nodeImplem = $(result.cell(nodeCell, 1).node()); nodeImplem.addClass('danger'); result.cell(nodeCell, 1).data(' Server Error') }; var addSpinnerToCell = function(fileId) { result.cell('#result-' + fileId, 1).data(''); }; var addSpinnerToModal = function(fileId) { $('#modalConformance-' + fileId + ' .modal-body').html(''); }; // Display report in the modal var displayReport = function(fileId, dataReport) { if (dataReport.isHtmlReport) { $('#modalConformance-' + fileId + ' .modal-body').html(dataReport.report); } else { $('#modalConformance-' + fileId + ' .modal-body').html('
        ');
                    $('#modalConformance-' + fileId + ' .report-content').text(dataReport.report);
                }
        
                $('#modalConformance-' + fileId + ' .implem-dld').prop('disabled', false);
            };
        
            // Display report error in the modal
            var displayReportError = function(fileId) {
                $('#modalConformance-' + fileId + ' .modal-body').html('Error: the requested report can not be retrieved');
        
                $('#modalConformance-' + fileId + ' .implem-dld').prop('disabled', true);
            };
        
            var reset = function(fileId) {
                $(result.cell('#result-' + fileId, 1).node()).removeClass();
                $(result.cell('#result-' + fileId, 1).node()).empty();
            };
        
            var removeModalIfExists = function(fileId) {
                if ($('#modalConformance-' + fileId).length) {
                    $('#modalConformance-' + fileId).remove();
                }
            };
        
            return {
                init: init,
                success: success,
                error: error,
                addSpinnerToCell: addSpinnerToCell,
                displayReport: displayReport,
                displayReportError: displayReportError,
                reset: reset,
                removeModalIfExists: removeModalIfExists,
            };
        })();
        MediaConch/Source/Resource/html/js/checker/table.js0000644000000000000000000003257313216666133021227 0ustar  rootrootvar checkerTable = (function() {
            var result;
        
            // Waiting loop ID value
            var waitingLoopId = null;
        
            // Avoid call to checker status if it's already running
            var checkerStatusInProgress = false;
        
            var init = function() {
                result = $('#result-table').DataTable({
                    order: [0, 'asc'],
                    autoWidth: false,
                    fixedHeader: {
                        headerOffset: $('#mco-navbar').outerHeight(true)
                    },
                    columnDefs: [
                        { orderable: true, targets: 0 },
                        { orderable: true, searchable: false, targets: [1, 2, 5] },
                        { orderable: false, searchable: false, width: '10%', targets: [3, 4] },
                        { width: '10%', targets: [1, 5] },
                        { width: '25%', targets: [0, 2] },
                    ]
                });
        
                statusCell.init(result);
                implementationCell.init(result);
                policyCell.init(result);
                mediaInfoCell.init(result);
                mediaTraceCell.init(result);
                resultRowHoverBinding();
                addExisting();
            };
        
            // Redraw the table
            var draw = function() {
                result.draw(false);
            };
        
            // Clear the table
            var clear = function() {
                result.clear().draw();
            };
        
            // Based on https://stackoverflow.com/a/41629420
            var jumpToPageContainingResultId = function(id) {
                var node = result.row('#result-' + id).node();
                var page = Math.floor(
                    result.rows({
                        page: 'all',
                        order: 'current',
                        search: 'applied'
                    }).nodes().indexOf( node ) / result.page.info().length
                );
                result.page(page).draw(false);
            }
        
            var updateFileOrAddFile = function(fileName, fileId, formValues) {
                if (!result.$('tr.fileId-' + fileId).length) {
                    addFile(fileName, fileId, formValues)
                }
                else {
                    updateFile(fileId, formValues)
                }
            };
        
            var updateFile = function(fileId, formValues) {
                var node = result.$('#result-' + fileId);
        
                // Update policy if it has changed
                if (node.data('policy') != formValues.policy) {
                    node.data('policy', formValues.policy);
                    node.data('policyName', formValues.policyText);
        
                    policyCell.update(fileId, node.data('policy'));
                }
        
                // Update display if it has changed
                if (node.data('display') != formValues.display) {
                    node.data('display', formValues.display);
        
                    implementationCell.removeModalIfExists(fileId);
                    policyCell.removeModalIfExists(fileId);
                }
        
                // Update verbosity if it has changed
                if (node.data('verbosity') != formValues.verbosity && (2 == node.data('tool') || undefined == node.data('tool'))) {
                    node.data('verbosity', formValues.verbosity);
        
                    implementationCell.removeModalIfExists(fileId);
                }
            };
        
            var addFile = function(fileName, fileId, formValues) {
                var fileNameSplitted = fileName.split('/');
                if (fileNameSplitted !== undefined)
                    fileNameSplitted = fileNameSplitted.pop();
                else
                    fileNameSplitted = "";
                var node = result.row.add( [ '' + textUtils.truncate(fileNameSplitted, 28) + '',
                    '', '', '', '',
                    'In queue'
                ] ).node();
                var nodej = $(node);
        
                // Add id
                nodej.prop('id', 'result-' + fileId);
                nodej.addClass('fileId-' + fileId);
                nodej.data('fileId', fileId);
        
                // Add policy, display and verbosity
                nodej.data('policy', formValues.policy);
                nodej.data('policyName', formValues.policyText);
                nodej.data('display', formValues.display);
                nodej.data('verbosity', formValues.verbosity);
        
                // Change status class
                $(result.cell(node, 5).node()).addClass('statusCell info');
        
                // Close button
                nodej.find('.result-close').click(node, function(e) {
                    var id = $(result.row(e.data).node()).data('fileId');
                    checkerAjax.closeElement(id);
                    result.row(e.data).remove().draw(false);
        
                    // Remove close all button
                    if (1 == $('table.checker-results tbody tr').length && $('table.checker-results tbody tr .dataTables_empty').length) {
                        $('#checkerResultTitle .close').addClass('hidden');
                        $('#checkerApplyAll').addClass('hidden');
                    };
                });
        
                // Reload button
                nodej.find('.result-reload').click(node, function(e) {
                    var id = $(result.row(e.data).node()).data('fileId');
        
                    // Remove associatedFiles if any
                    result.$('tr').filter(function() {
                        if ($(this).data('parentId') == id) {
                            result.row($(this)).remove();
                        }
                    });
        
                    resetRow(id);
                    checkerAjax.forceAnalyze(id);
                });
        
                if ($('#checkerResultTitle .close').hasClass('hidden')) {
                    $('#checkerResultTitle .close').removeClass('hidden');
                    $('#checkerApplyAll').removeClass('hidden');
                }
        
                return node;
            };
        
            var resetRow = function(id) {
                statusCell.reset(id);
                implementationCell.reset(id);
                policyCell.reset(id);
                mediaInfoCell.reset(id);
                mediaTraceCell.reset(id);
        
                implementationCell.removeModalIfExists(id);
                policyCell.removeModalIfExists(id);
                mediaInfoCell.removeModalIfExists(id);
                mediaTraceCell.removeModalIfExists(id);
            };
        
            var startWaitingLoop = function() {
                stopWaitingLoop();
                waitingLoop(100, 1000);
            }
        
            var stopWaitingLoop = function() {
                if (null !== waitingLoopId) {
                    clearTimeout(waitingLoopId);
                    waitingLoopId = null;
                }
            }
        
            var waitingLoop = function(time, iteration) {
                // Increase delay for the loop after 1st iteration
                if (null === waitingLoopId) {
                    time = 500;
                }
                waitingLoopId = setTimeout(function() {
                    var nbProcess = 0;
                    var nbProcessInProgress = 0;
                    var nbProcessLimit = 10;
                    var fileIds = [];
                    // Process visible results first
                    if ($('.statusCell.info').size() > 0) {
                        $.each($('.statusCell.info'), function(index, waitingNode) {
                            if (!$(waitingNode).hasClass('checkInProgress')) {
                                if (nbProcess++ < nbProcessLimit) {
                                    fileIds.push($(waitingNode).parent().data('fileId'));
                                }
                            }
                            else {
                                if (nbProcessInProgress++ < nbProcessLimit) {
                                    fileIds.push($(waitingNode).parent().data('fileId'));
                                }
                            }
                        })
                    }
                    // Process hidden results
                    else {
                        result.cells('.statusCell.info').every(function(currentCell) {
                            if (!$(this.node()).hasClass('checkInProgress')) {
                                if (nbProcess++ < nbProcessLimit) {
                                    fileIds.push($(result.row(currentCell).node()).data('fileId'));
                                }
                            }
                            else {
                                if (nbProcessInProgress++ < nbProcessLimit) {
                                    fileIds.push($(result.row(currentCell).node()).data('fileId'));
                                }
                            }
                        })
                    }
        
                    // Send IDs to server if not already running
                    if (fileIds.length > 0 && !checkerStatusInProgress) {
                        checkerAjax.checkerStatus(fileIds);
                    }
        
                    // Call the loop again
                    if (result.cells('.statusCell.info').count() > 0 && --iteration > 0) {
                        // Increase loop delay each fifty iteration
                        if (0 == iteration % 50 && time < 10000) {
                            time += 500;
                        }
                        waitingLoop(time, iteration);
                    }
                    else {
                        waitingLoopId = null;
                    }
        
                    // Display error for unfinished cells
                    if (iteration <= 0) {
                        result.cells('.statusCell.info').every(function(currentCell) {
                            statusCell.error($(this.node()).data('fileId'));
                        })
                    }
        
                }, time);
            };
        
            var processCheckerStatusRequest = function(statusMulti) {
                var reports = [];
                $.each(statusMulti, function(statusFileId, status) {
                    if (status.finish) {
                        var node = result.$('#result-' + statusFileId);
                        // Report type
                        node.data('tool', status.tool);
        
                        // Status
                        statusCell.success(statusFileId);
        
                        // Implementation and Policy
                        if (node.data('policy') != undefined && node.data('policy') !== "-1" && node.data('policy') !== -1) {
                            implementationCell.addSpinnerToCell(statusFileId);
                            policyCell.addSpinnerToCell(statusFileId);
        
                            reports.push({id: statusFileId, tool: status.tool, policyId: node.data('policy')});
                        }
                        else {
                            // Implementation only
                            implementationCell.addSpinnerToCell(statusFileId);
        
                            reports.push({id: statusFileId, tool: status.tool});
        
                            policyCell.emptyWithModal(statusFileId);
                        }
        
                        // MediaInfo
                        mediaInfoCell.success(statusFileId);
        
                        // MediaTrace
                        mediaTraceCell.success(statusFileId);
        
                        // Handle associated files (attachments)
                        if (undefined !== status.associatedFiles) {
                            $.each(status.associatedFiles, function(associatedFileId, associatedFileName) {
                                var nodeFile = addFile(associatedFileName, associatedFileId, checker.getDataFromForm($('.tab-content .active form')));
                                $(nodeFile).data('parent-id', statusFileId).find('.result-reload').remove();
                            });
                            draw();
                        }
                    }
                    else if (status.percent > 0) {
                        statusCell.inProgress(statusFileId, status);
                    }
                    else if (status.error) {
                        statusCell.error(statusFileId);
                    }
                });
        
                if (reports.length > 0) {
                    checkerAjax.statusReportsMulti(reports);
                }
            };
        
            // Apply policy to all results
            var applyPolicyToAll = function() {
                result.$('tr').each(function() {
                    var node = result.$('#' + $(this).prop('id'));
        
                    if (node.data('policy') != $('#applyAllPolicy').val()) {
                        // Update policy
                        node.data('policy', $('#applyAllPolicy').val());
                        node.data('policyName', $('#applyAllPolicy option:selected').text());
        
                        policyCell.update(node.data('fileId'), node.data('policy'));
                    }
                });
            };
        
            var setCheckerStatusInProgress = function(status) {
                checkerStatusInProgress = status;
            };
        
            var resultRowHoverBinding = function() {
                result.on('draw.dt', function() {
                    result.$('tr').off('mouseenter');
                    result.$('tr').off('mouseleave');
        
                    // Display buttons on checker result
                    result.$('tr').on('mouseenter', function() {
                        $(this).find('.statusResult').addClass('hidden');
                        $(this).find('.statusButton').removeClass('hidden').parent().addClass('text-center');
                        $(this).find('.policyResult').addClass('hidden');
                        $(this).find('.policyButton').removeClass('hidden').parent().addClass('text-center');
                        $(this).find('.implemResult').addClass('hidden');
                        $(this).find('.implemButton').removeClass('hidden').parent().addClass('text-center');
                    });
                    result.$('tr').on('mouseleave', function() {
                        $(this).find('.statusButton').addClass('hidden').parent().removeClass('text-center');
                        $(this).find('.statusResult').removeClass('hidden');
                        $(this).find('.policyButton').addClass('hidden').parent().removeClass('text-center');
                        $(this).find('.policyResult').removeClass('hidden');
                        $(this).find('.implemButton').addClass('hidden').parent().removeClass('text-center');
                        $(this).find('.implemResult').removeClass('hidden');
                    });
                });
            };
        
            var addExisting = function() {
                checkerAjax.addExisting();
            };
        
            return {
                init: init,
                draw: draw,
                clear: clear,
                jumpToPageContainingResultId: jumpToPageContainingResultId,
                startWaitingLoop: startWaitingLoop,
                updateFileOrAddFile: updateFileOrAddFile,
                processCheckerStatusRequest: processCheckerStatusRequest,
                applyPolicyToAll: applyPolicyToAll,
                setCheckerStatusInProgress: setCheckerStatusInProgress,
                addExisting: addExisting,
            };
        })();
        MediaConch/Source/Resource/html/js/checker/cellMediaInfo.js0000644000000000000000000002255613216666133022633 0ustar  rootrootvar mediaInfoCell = (function() {
            var result;
            var init = function(table) {
                result = table;
            };
        
            var success = function(fileId) {
                var nodeMI = $(result.cell('#result-' + fileId, 3).node());
                nodeMI.addClass('text-center');
                result.cell('#result-' + fileId, 3).data('');
        
                nodeMI.find('.mi-view').on('click', function(e) {
                    e.preventDefault();
                    if (!$('#modalInfo-' + fileId).length) {
                        $('.result-container').append(' \
                        ');
        
                        checkerAjax.getMediaInfoOutputList(fileId);
                        displayTree(fileId);
        
                        $('#modalInfo-' + fileId + ' .mi-dld').on('click', function(e) {
                            e.preventDefault();
                            checkerAjax.downloadReportUrl(fileId, 'mi', 'MIXML');
                        });
        
                        $('#modalInfo-' + fileId + ' .mi-select-output').on('click', 'li', function(e) {
                            e.preventDefault();
                            e.stopPropagation();
                            var output = e.currentTarget.getAttribute('data-name');
                            checkerAjax.downloadReportUrl(fileId, 'mi', output);
                        });
        
                        $('#modalInfo-' + fileId + ' .mi-create-report').on('click', function(e) {
                            e.preventDefault();
                            checkerAjax.createPolicyFromFileId(fileId);
                        });
                    }
                });
        
                nodeMI.find('.mi-dld').on('click', function(e) {
                    e.preventDefault();
                    checkerAjax.downloadReportUrl(fileId, 'mi');
                });
            };
        
            var updateOutputList = function(outputList, fileId) {
                for(index in outputList.output) {
                    $('#modalInfo-' + fileId + ' .mi-select-output').append('
      • ' + outputList.output[index].desc + '
      • '); } }; var displayTree = function(fileId) { // Disable F2 shortcut (rename) in jstree, needs to be done before jstree initialization $('#info-' + fileId).on('keydown.jstree', '.jstree-anchor', function(event) { if (113 == event.keyCode) { event.stopImmediatePropagation(); return false; } }); $('#info-' + fileId).jstree({ core: { check_callback: function(operation, node, parent, position, more) { if (operation === 'copy_node' || operation === 'move_node') { return false; // disable copy and move } else { return true; } }, multiple: false, dblclick_toggle: false, data : function (obj, callback) { if (WEBMACHINE === 'WEB_MACHINE_KIT') { report = webpage.on_fill_mediainfo_report(fileId); callback.call(this, eval(report)); } else { webpage.on_fill_mediainfo_report(fileId, function (report) { callback.call(this, eval(report)); }); } } }, plugins: ['search', 'types', 'grid'], types: { default: {icon: 'glyphicon glyphicon-folder-open'}, block: {icon: 'glyphicon glyphicon-folder-open'}, data: {icon: 'glyphicon glyphicon-file'}, }, grid: { columns:[ {header: 'Key', tree: true}, {header: 'Value', value: 'dataValue'}, ], resizable: true, }, }); $('#info-' + fileId).on('ready.jstree', function() { var to = false; $('#infoSearch-' + fileId).keyup(function() { if(to) { clearTimeout(to); } to = setTimeout(function() { var v = $('#infoSearch-' + fileId).val(); $('#info-' + fileId).jstree(true).search(v); }, 250); }); }); $('#info-' + fileId).on('loaded.jstree', function(e, data) { data.instance.open_all(); }); $('#info-' + fileId).on('select_node.jstree', function(e, data) { data.instance.toggle_node(data.node); }); }; var createPolicySuccess = function(createPolicy, fileId) { if (createPolicy.result) { $('#modalInfo-' + fileId + ' .mi-create-report').fadeOut(200).replaceWith(''); // Add new policy to all select lists $('.policyList .userPolicy').each(function() { if ($(this).hasClass('hidden')) $(this).removeClass('hidden'); $(this).append(''); }); } else { $('#modalInfo-' + fileId + ' .mi-create-report').fadeOut(200).replaceWith(''); } } var createPolicyError = function(fileId) { $('#modalInfo-' + fileId + ' .mi-create-report').fadeOut(200).replaceWith(''); }; var reset = function(fileId) { $(result.cell('#result-' + fileId, 3).node()).empty(); }; var removeModalIfExists = function(fileId) { if ($('#modalInfo-' + fileId).length) { $('#modalInfo-' + fileId).remove(); } }; return { init: init, success: success, updateOutputList: updateOutputList, createPolicySuccess: createPolicySuccess, createPolicyError: createPolicyError, reset: reset, removeModalIfExists: removeModalIfExists, }; })(); MediaConch/Source/Resource/html/js/checker/cellMediaTrace.js0000644000000000000000000001361613216666133022773 0ustar rootrootvar mediaTraceCell = (function() { var result; var init = function(table) { result = table; }; var success = function(fileId) { nodeMT = $(result.cell('#result-' + fileId, 4).node()); nodeMT.addClass('text-center'); result.cell('#result-' + fileId, 4).data(''); nodeMT.find('.mt-view').on('click', function(e) { e.preventDefault(); if (!$('#modalTrace-' + fileId).length) { $('.result-container').append(' \ '); displayTree(fileId); $('#modalTrace-' + fileId + ' .mt-dld').on('click', function(e) { e.preventDefault(); checkerAjax.downloadReportUrl(fileId, 'mt'); }); } }); nodeMT.find('.mt-dld').on('click', function(e) { e.preventDefault(); checkerAjax.downloadReportUrl(fileId, 'mt'); }); }; var displayTree = function(fileId) { // Disable F2 shortcut (rename) in jstree, needs to be done before jstree initialization $('#trace-' + fileId).on('keydown.jstree', '.jstree-anchor', function(event) { if (113 == event.keyCode) { event.stopImmediatePropagation(); return false; } }); $('#trace-' + fileId).jstree({ core: { check_callback: function(operation, node, parent, position, more) { if (operation === 'copy_node' || operation === 'move_node') { return false; // disable copy and move } else { return true; } }, multiple: false, dblclick_toggle: false, data : function (obj, callback) { if (WEBMACHINE === 'WEB_MACHINE_KIT') { report = webpage.on_fill_mediatrace_report(fileId); callback.call(this, eval(report)); } else { webpage.on_fill_mediatrace_report(fileId, function (report) { callback.call(this, eval(report)); }); } } }, plugins: ['search', 'types', 'grid'], types: { default: {icon: 'glyphicon glyphicon-folder-open'}, block: {icon: 'glyphicon glyphicon-folder-open'}, data: {icon: 'glyphicon glyphicon-file'}, }, grid: { columns: [ {header: 'Offset', value: 'offset'}, {header: 'Key', tree: true}, {header: 'Value', value: 'dataValue'}, ], resizable: true, }, }); $('#trace-' + fileId).on('ready.jstree', function() { var to = false; $('#traceSearch-' + fileId).keyup(function() { if(to) { clearTimeout(to); } to = setTimeout(function() { var v = $('#traceSearch-' + fileId).val(); $('#trace-' + fileId).jstree(true).search(v); }, 250); }); }); $('#trace-' + fileId).on('loaded.jstree', function(e, data) { data.instance.get_container().find('li').each(function() { data.instance.open_node($(this)); }) }); $('#trace-' + fileId).on('select_node.jstree', function(e, data) { data.instance.toggle_node(data.node); }); }; var reset = function(fileId) { $(result.cell('#result-' + fileId, 4).node()).empty(); }; var removeModalIfExists = function(fileId) { if ($('#modalTrace-' + fileId).length) { $('#modalTrace-' + fileId).remove(); } }; return { init: init, success: success, reset: reset, removeModalIfExists: removeModalIfExists, }; })(); MediaConch/Source/Resource/html/js/checker/cellStatus.js0000644000000000000000000000375713216666133022265 0ustar rootrootvar statusCell = (function() { var result; var init = function(table) { result = table; }; var success = function(fileId) { var nodeStatus = $(result.cell('#result-' + fileId, 5).node()); nodeStatus.removeClass('info danger checkInProgress').addClass('success'); nodeStatus.find('.statusResult').html(' Analyzed'); nodeStatus.find('.result-reload').removeClass('hidden'); }; var inProgress = function(fileId, status) { var nodeStatus = $(result.cell('#result-' + fileId, 5).node()); nodeStatus.addClass('checkInProgress'); if ((undefined !== status.tool && 2 != status.tool) || 100 == status.percent) { nodeStatus.find('.statusResult').html(''); } else { nodeStatus.find('.statusResult').html(' ' + Math.round(status.percent) + '%'); } }; var error = function(fileId) { var nodeStatus = $(result.cell('#result-' + fileId, 5).node()); nodeStatus.removeClass('info danger checkInProgress').addClass('danger'); nodeStatus.find('.statusResult').html(' Error'); nodeStatus.find('.result-reload').removeClass('hidden'); }; var reset = function(fileId) { var nodeStatus = $(result.cell('#result-' + fileId, 5).node()); nodeStatus.removeClass().addClass('statusCell info'); nodeStatus.find('.statusButton').addClass('hidden').parent().removeClass('text-center'); nodeStatus.find('.statusResult').removeClass('hidden').html('In queue'); nodeStatus.find('.result-reload').addClass('hidden'); }; return { init: init, success: success, inProgress: inProgress, error: error, reset: reset, }; })(); MediaConch/Source/Resource/html/js/checker/cellPolicy.js0000644000000000000000000002334713216666133022236 0ustar rootrootvar policyCell = (function() { var result; var init = function(table) { result = table; }; var success = function(data, fileId) { var nodeCell = result.$('#result-' + fileId); var nodePolicy = $(result.cell(nodeCell, 2).node()); var policyResultText = ''; if (data.valid) { nodePolicy.removeClass().addClass('success'); policyResultText += ' ' } else { nodePolicy.removeClass().addClass('danger'); policyResultText += ' '; } policyResultText += '' + textUtils.truncate(nodeCell.data('policyName'), 28) + ''; policyResultText += ''; result.cell(nodeCell, 2).data('
        ' + policyResultText + '
        '); policyModal(fileId); }; var error = function(fileId) { var nodeCell = result.$('#result-' + fileId); var nodePolicy = $(result.cell(nodeCell, 2).node()); nodePolicy.addClass('danger'); result.cell(nodeCell, 2).data(' Server Error') }; var update = function(fileId, policyId) { removeModalIfExists(fileId); // Update cell if analysis of file is succeeded if ($(result.cell('#result-' + fileId, 5).node()).hasClass('success')) { if (policyId !== undefined && policyId !== "-1" && policyId !== -1) { reset(fileId); addSpinnerToCell(fileId); checkerAjax.policyStatus(fileId, policyId); } else { emptyWithModal(fileId) } } }; var emptyWithModal = function(fileId) { var nodePolicy = $(result.cell('#result-' + fileId, 2).node()); nodePolicy.removeClass().addClass('info'); result.cell('#result-' + fileId, 2).data('
        N/A
        '); policyModal(fileId); }; var policyModal = function(fileId) { var nodePolicy = $(result.cell('#result-' + fileId, 2).node()); nodePolicy.find('.policy-view').on('click', function(e) { e.preventDefault(); var nodeModal = result.$('#result-' + fileId); if (!$('#modalPolicy-' + fileId).length) { $('.result-container').append(' \ '); if (nodeModal.data('policy') !== undefined && nodeModal.data('policy') !== "-1" && nodeModal.data('policy') !== -1) { addSpinnerToModal(fileId); checkerAjax.policyReport(fileId, nodeModal.data('policy'), nodeModal.data('display')); } $('#modalPolicy-' + fileId + ' .policy-dld').on('click', function(e) { e.preventDefault(); var modalDisplay = $('#modalPolicyDisplay-' + fileId).val(); var modalPolicy = $('#modalPolicyPolicy-' + fileId).val(); if (modalPolicy) { checkerAjax.downloadPolicyReportUrl(fileId, modalPolicy, modalDisplay); } }); // Update report when display is changed var displayList = $('.tab-content .active .displayList').clone(); displayList.attr('id', 'modalPolicyDisplay-' + fileId); displayList.find('option').prop('selected', false); displayList.find("option[value = '" + nodeModal.data('display') + "']").prop('selected', true); $('#modalPolicyDisplay-' + fileId).replaceWith(displayList); $('#modalPolicyDisplay-' + fileId).on('change', function(e) { var modalDisplay = $('#modalPolicyDisplay-' + fileId).val(); var modalPolicy = $('#modalPolicyPolicy-' + fileId).val(); if (modalPolicy) { addSpinnerToModal(fileId); checkerAjax.policyReport(fileId, modalPolicy, modalDisplay); } else { $('#modalPolicy-' + fileId + ' .modal-body').empty(''); } }); // Update report when policy is changed var policyList = $('.tab-content .active .policyList').clone(); policyList.attr('id', 'modalPolicyPolicy-' + fileId); policyList.find('option').prop('selected', false); policyList.find("option[value = '" + nodeModal.data('policy') + "']").prop('selected', true); $('#modalPolicyPolicy-' + fileId).replaceWith(policyList); $('#modalPolicyPolicy-' + fileId).on('change', function(e) { var modalDisplay = $('#modalPolicyDisplay-' + fileId).val(); var modalPolicy = $('#modalPolicyPolicy-' + fileId).val(); if (modalPolicy) { addSpinnerToModal(fileId); checkerAjax.policyReport(fileId, modalPolicy, modalDisplay); } else { $('#modalPolicy-' + fileId + ' .modal-body').empty(''); } }); } }); nodePolicy.find('.policy-dld').on('click', function(e) { e.preventDefault(); var nodeDld = result.$('#result-' + fileId); checkerAjax.downloadPolicyReportUrl(fileId, nodeDld.data('policy'), nodeDld.data('display')); }); }; var addSpinnerToCell = function(fileId) { result.cell('#result-' + fileId, 2).data(''); }; var addSpinnerToModal = function(fileId) { $('#modalPolicy-' + fileId + ' .modal-body').html(''); }; // Display report in the modal var displayReport = function(fileId, dataReport) { if (dataReport.isHtmlReport) { $('#modalPolicy-' + fileId + ' .modal-body').html(dataReport.report); } else { $('#modalPolicy-' + fileId + ' .modal-body').html('
        ');
                    $('#modalPolicy-' + fileId + ' .report-content').text(dataReport.report);
                }
        
                $('#modalPolicy-' + fileId + ' .policy-dld').prop('disabled', false);
            };
        
            // Display report error in the modal
            var displayReportError = function(fileId) {
                $('#modalPolicy-' + fileId + ' .modal-body').html('Error: the requested report can not be retrieved');
        
                $('#modalPolicy-' + fileId + ' .policy-dld').prop('disabled', true);
            };
        
            var reset = function(fileId) {
                $(result.cell('#result-' + fileId, 2).node()).removeClass();
                $(result.cell('#result-' + fileId, 2).node()).empty();
            };
        
            var removeModalIfExists = function(fileId) {
                if ($('#modalPolicy-' + fileId).length) {
                    $('#modalPolicy-' + fileId).remove();
                }
            };
        
            return {
                init: init,
                success: success,
                error: error,
                update: update,
                emptyWithModal: emptyWithModal,
                addSpinnerToCell: addSpinnerToCell,
                displayReport: displayReport,
                displayReportError: displayReportError,
                reset: reset,
                removeModalIfExists: removeModalIfExists,
            };
        })();
        MediaConch/Source/Resource/html/js/checker/base.js0000644000000000000000000001243513216666133021045 0ustar  rootrootvar checker = (function() {
            var initPage = function() {
                mcoMessage.init('#checkerInfo div');
                checkerTable.init();
        
                formBindings();
                applyPolicyToAll();
                bindings();
        
                //
                $('.checkboxParseSpeed').change(function(){
                    webpage.set_full_parse($(this).is(':checked'));
                })
        
                // help
                addHelp('.label_fixer', 'Try to fix buggy files, technology preview, see the fixity webpage for how to test it.', 'Fixer', 'checkerFixerHelp');
                addHelp('.label_parsespeed', 'By default, only few frames are parsed, fast, suitable for policy checker and container implementation checker. Enable this option for checking all frames in the file, slower.', 'Full parsing', 'checkerParseSpeedHelp');
            }
        
            var formBindings = function() {
                // Upload form
                $('#file form').on('submit', function(e) {
                    e.preventDefault();
        
                    // Check file size
                    if ( window.File )
                    {
                        var uploadFiles = $(this).find(':file');
                    }
        
                    checkerAjax.formRequest($(this), getDataFromForm($(this)), 'file');
                });
        
                // Online form
                $('#url form').on('submit', function(e) {
                    e.preventDefault();
                    checkerAjax.formRequest($(this), getDataFromForm($(this)), 'url');
                });
        
                // Repository form
                $('#repository form').on('submit', function(e) {
                    e.preventDefault();
                    checkerAjax.formRequest($(this), getDataFromForm($(this)), 'repository');
                });
            };
        
            // Get form data
            var getDataFromForm = function(form) {
                var formValues = {policy:form.find('.policyList').val(),
                    policyText:form.find('.policyList option:selected').text(),
                    display:form.find('.displayList').val(),
                    verbosity:form.find('.verbosityList').val()
                };
        
                return formValues;
            };
        
            var applyPolicyToAll = function() {
                // Apply policy to all
                $('#checkerApplyAll').html('
        '); $('#checkerApplyAll').addClass('tab-pane'); var resetSelectList = function(listId) { $('#' + listId + ' option').prop('selected', false); }; // Duplicate policy list var policyList = $('.tab-content .active .policyList').clone(); policyList.attr('id', 'applyAllPolicy'); policyList.children('option:first').text('Choose a new policy to apply'); $('#checkerApplyAll div.applyAll').append('
        ') $('#checkerApplyAll div.applyAll div.policy').html(policyList); resetSelectList('applyAllPolicy'); $('#applyAllPolicy').on('change', function(e) { checkerTable.applyPolicyToAll(); resetSelectList('applyAllPolicy'); }); }; var bindings = function() { // Scroll to the top of the results when page is changed $('#result-table').on('page.dt', function() { $('html, body').animate({ scrollTop: $('#checkerResults').offset().top }, 200); }); // Remove all results blocks $('#checkerResultTitle .close').click(function() { checkerTable.clear(); checkerAjax.closeAll(); // Remove close all button $(this).addClass('hidden'); // Remove apply to all $('#checkerApplyAll').addClass('hidden'); }); }; // Keep popover open while hover on the popover content var popoverManualBinding = function(elem) { elem.on('mouseenter', function () { var _this = this; $(this).popover('show'); $(this).siblings('.popover').on('mouseleave', function () { $(_this).popover('hide'); }); }).on('mouseleave', function () { var _this = this; setTimeout(function () { if (!$('.popover:hover').length) { $(_this).popover('hide'); } }, 300); }); }; // Add help sign and bind popover var addHelp = function(elem, content, title, elemClass) { if (undefined === title) { var title = 'Help'; } if (undefined === elemClass) { var elemClass = elem + 'Help'; } else { var elemClass = elemClass + 'Help'; } $(elem).append(' '); var popHelp = $('.' + elemClass).popover({title: title, content: content, placement: 'auto top', trigger: 'manual', html: true}); popoverManualBinding(popHelp); }; return { initPage: initPage, getDataFromForm: getDataFromForm, addHelp: addHelp, }; })(); $(document).ready(function() { (function loop_init(time) { setTimeout(function() { if (webpage === undefined) loop_init(100); else { checker.initPage(); } }, time); })(0); }); MediaConch/Source/Resource/html/js/display.js0000644000000000000000000000523513216666133020174 0ustar rootroot$(document).ready(function() { global_id = 0; $('#displayImport').on('submit', function(e) { e.preventDefault(); var name = $('#displayImport_displayName').val(); if (WEBMACHINE == "WEB_MACHINE_KIT") { var value = webpage.display_add_file(name); if (value.length) addUserDisplay(value); } else { webpage.display_add_file(name, function (value) { if (value.length) addUserDisplay(value); }); } $('#displayImport_displayName').val(''); $("#displayImport_displayFile").val(''); }); }); function addUserDisplay(name) { var name_id = ++global_id; $('#accordion').append(' \
        \ \
        \
        \ \ \
        \
        \
        '); $('#display_user_delete' + name_id).on('click', function(e) { e.preventDefault(); webpage.display_delete_id(name); $('#display_' + name_id).remove(); });; $('#display_user_export' + name_id).on('click', function(e) { e.preventDefault(); webpage.display_export_id(name); });; }; function addSystemDisplay(name) { var name_id = ++global_id; $('#accordionSystem').append(' \
        \ \
        \
        \ \
        \
        \
        '); $('#display_system_export' + name_id).on('click', function(e) { e.preventDefault(); webpage.display_export_id(name); });; }; MediaConch/Source/Resource/html/js/datatables.min.js0000644000000000000000000026361613216666133021426 0ustar rootroot/* * This combined file was created by the DataTables downloader builder: * https://datatables.net/download * * To rebuild or modify this file with the latest versions of the included * software please visit: * https://datatables.net/download/#bs/dt-1.10.13/fh-3.1.2 * * Included libraries: * DataTables 1.10.13, FixedHeader 3.1.2 */ /*! DataTables 1.10.13 ©2008-2016 SpryMedia Ltd - datatables.net/license */ (function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,H){E||(E=window);H||(H="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(H,E,E.document)}:h(jQuery,window,document)})(function(h,E,H,k){function Y(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()), d[c]=e,"o"===b[1]&&Y(a[e])});a._hungarianMap=d}function J(a,b,c){a._hungarianMap||Y(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),J(a[d],b[d],c)):b[d]=b[e]})}function Fa(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&F(a,a,"sZeroRecords","sLoadingRecords"); a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&fb(a)}function gb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX= a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(h("
        ").css({position:"absolute", top:1,left:1,width:100,overflow:"scroll"}).append(h("
        ").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function jb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!== e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ga(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);la(a,d,h(b).data())}function la(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig= e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(hb(c),J(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=R(g),i=b.mRender?R(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")}; b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return S(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI= d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Z(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ha(a);for(var c=0,d=b.length;cq[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;jb&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function da(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild); c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ka(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c").appendTo(g));b=0;for(c=l.length;btr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH); if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart= -1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!nb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j",{"class":e?d[0]:""}).append(h("",{valign:"top",colSpan:ba(a),"class":a.oClasses.sRowEmpty}).html(c))[0];s(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ma(a),g,n,i]);s(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ma(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));s(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter; c.bSort&&ob(a);d?ga(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function pb(a){var b=a.oClasses,c=h(a.nTable),c=h("
        ").insertBefore(c),d=a.oFeatures,e=h("
        ",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,k=0;k")[0]; n=f[k+1];if("'"==n||'"'==n){l="";for(q=2;f[k+q]!=n;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=qb(a);else if("f"==j&&d.bFilter)g=rb(a);else if("r"==j&&d.bProcessing)g=sb(a);else if("t"==j)g=tb(a);else if("i"==j&&d.bInfo)g=ub(a);else if("p"== j&&d.bPaginate)g=vb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("
        ",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("
        ").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ta(a,h(this).val());O(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function vb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){O(a)},b=h("
        ").addClass(a.oClasses.sPaging+ b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;lf&& (d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none"); s(a,null,"processing",[a,b])}function tb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("
        ",{"class":f.sScrollWrapper}).append(h("
        ",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:v(d):"100%"}).append(h("
        ", {"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("
        ",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:v(d)}).append(b));l&&i.append(h("
        ",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:v(d):"100%"}).append(h("
        ",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left", 0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],r=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(r.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=r;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return i[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"), j=a.nScrollBody,l=h(j),q=j.style,r=h(a.nScrollFoot).children("div"),m=r.children("table"),p=h(a.nTHead),o=h(a.nTable),u=o[0],s=u.style,t=a.nTFoot?h(a.nTFoot):null,x=a.oBrowser,U=x.bScrollOversize,ac=D(a.aoColumns,"nTh"),P,L,Q,w,Wa=[],y=[],z=[],A=[],B,C=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==L&&a.scrollBarVis!==k)a.scrollBarVis=L,Z(a);else{a.scrollBarVis=L;o.children("thead, tfoot").remove(); t&&(Q=t.clone().prependTo(o),P=t.find("tr"),Q=Q.find("tr"));w=p.clone().prependTo(o);p=p.find("tr");L=w.find("tr");w.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(ta(a,w),function(b,c){B=$(a,b);c.style.width=a.aoColumns[B].sWidth});t&&I(function(a){a.style.width=""},Q);f=o.outerWidth();if(""===c){s.width="100%";if(U&&(o.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))s.width=v(o.outerWidth()-b);f=o.outerWidth()}else""!==d&&(s.width= v(d),f=o.outerWidth());I(C,L);I(function(a){z.push(a.innerHTML);Wa.push(v(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,ac)!==-1)a.style.width=Wa[b]},p);h(L).height(0);t&&(I(C,Q),I(function(a){A.push(a.innerHTML);y.push(v(h(a).css("width")))},Q),I(function(a,b){a.style.width=y[b]},P),h(Q).height(0));I(function(a,b){a.innerHTML='
        '+z[b]+"
        ";a.style.width=Wa[b]},L);t&&I(function(a,b){a.innerHTML='
        '+ A[b]+"
        ";a.style.width=y[b]},Q);if(o.outerWidth()j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(U&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))s.width=v(P-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else P="100%";q.width=v(P);g.width=v(P);t&&(a.nScrollFoot.style.width=v(P));!e&&U&&(q.height=v(u.offsetHeight+b));c=o.outerWidth();n[0].style.width=v(c);i.width=v(c);d=o.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+ (x.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";t&&(m[0].style.width=v(c),r[0].style.width=v(c),r[0].style[e]=d?b+"px":"0px");o.children("colgroup").insertBefore(o.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0,f=b.length,g,j;e").appendTo(j.find("tbody")); j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=ta(a,j.find("thead")[0]);for(m=0;m").css({width:p.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()").css("width",v(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Hb(a,b){var c=Ib(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Ib(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;fd&&(d=c.length,e=f);return e}function v(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function W(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;ae?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return ce?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,p=f[b]._aSortData;for(j=0;jg?1:0})}a.bSorted=!0}function Kb(a){for(var b,c,d=a.aoColumns,e=W(a),a=a.oLanguage.oAria,f=0,g=d.length;f/g, "");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0e?e+1:3));e=0;for(f=d.length;ee?e+1:3))}a.aLastSort=d}function Jb(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,aa(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j=f.length?[0,c[1]]:c)}));b.search!== k&&h.extend(a.oPreviousSearch,Db(b.search));if(b.columns){d=0;for(e=b.columns.length;d=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Pa(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ia(a,b){var c=[],c=Nb.numbers_length,d=Math.floor(c/2);b<=c?c=X(0,b):a<=d?(c=X(0, c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=X(b-(c-2),b):(c=X(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function fb(a){h.each({num:function(b){return Ba(b,a)},"num-fmt":function(b){return Ba(b,a,Za)},"html-num":function(b){return Ba(b,a,Ca)},"html-num-fmt":function(b){return Ba(b,a,Ca,Za)}},function(b,c){x.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(x.type.search[b+a]=x.type.search.html)})}function Ob(a){return function(){var b= [Aa(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this,b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new u(Aa(this[x.iApiIndex])):new u(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing= function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)}; this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase(); return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Aa(this[x.iApiIndex])}; this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in m.ext.internal)e&&(this[e]=Ob(e));this.each(function(){var e={},g=1t<"F"ip>'),o.renderer)?h.isPlainObject(o.renderer)&& !o.renderer.header&&(o.renderer.header="jqueryui"):o.renderer="jqueryui":h.extend(t,m.ext.classes,g.oClasses);q.addClass(t.sTable);o.iInitDisplayStart===k&&(o.iInitDisplayStart=g.iDisplayStart,o._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(o.bDeferLoading=!0,e=h.isArray(g.iDeferLoading),o._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,o._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var v=o.oLanguage;h.extend(!0,v,g.oLanguage);v.sUrl&&(h.ajax({dataType:"json",url:v.sUrl,success:function(a){Fa(a); J(l.oLanguage,a);h.extend(true,v,a);ha(o)},error:function(){ha(o)}}),n=!0);null===g.asStripeClasses&&(o.asStripeClasses=[t.sStripeOdd,t.sStripeEven]);var e=o.asStripeClasses,x=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return x.hasClass(a)}))&&(h("tbody tr",this).removeClass(e.join(" ")),o.asDestroyStripes=e.slice());e=[];r=this.getElementsByTagName("thead");0!==r.length&&(ea(o.aoHeader,r[0]),e=ta(o));if(null===g.aoColumns){r=[];j=0;for(i=e.length;j").appendTo(q)); o.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("").appendTo(q));o.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(o.oScroll.sX!==""||o.oScroll.sY!==""))b=h("").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(t.sNoFooter);else if(b.length>0){o.nTFoot=b[0];ea(o.aoFooter,o.nTFoot)}if(g.aaData)for(j=0;j/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Za=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Qb=function(a){var b=parseInt(a,10);return!isNaN(b)&& isFinite(a)?b:null},Rb=function(a,b){$a[b]||($a[b]=RegExp(Sa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace($a[b],"."):a},ab=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Rb(a,b));c&&d&&(a=a.replace(Za,""));return!isNaN(parseFloat(a))&&isFinite(a)},Sb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:ab(a.replace(Ca,""),b,c)?!0:null},D=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e")[0],$b=xa.textContent!==k,bc=/<.*?>/g,Qa=m.util.throttle,Ub=[],w=Array.prototype,ec=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable}); if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};u=function(a,b){if(!(this instanceof u))return new u(a,b);var c=[],d=function(a){(a=ec(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;ea?new u(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this); else for(var c=0,d=this.length;c").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=ba(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e); c._detailsShow&&c._details.insertAfter(c.nTr)}return this});p(["row().child.show()","row().child().show()"],function(){Wb(this,!0);return this});p(["row().child.hide()","row().child().hide()"],function(){Wb(this,!1);return this});p(["row().child.remove()","row().child().remove()"],function(){eb(this);return this});p("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var fc=/^([^:]+):(name|visIdx|visible)$/,Xb=function(a,b, c,d,e){for(var c=[],d=0,f=e.length;d=0?b:g.length+b];if(typeof a==="function"){var e=Da(c,f);return h.map(g,function(b,f){return a(f,Xb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(fc): "";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[$(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)}, 1);c.selector.cols=a;c.selector.opts=b;return c});t("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});t("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});t("columns().data()","column().data()",function(){return this.iterator("column-rows",Xb,1)});t("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData}, 1)});t("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ja(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});t("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ja(a.aoData,e,"anCells",b)},1)});t("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData, i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m=h.inArray(!0,D(f,"bVisible"),c+1);i=0;for(n=j.length;id;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof m.Api)return!0;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot? h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new u(c):c};m.camelToHungarian=J;p("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){p(b+"()",function(){var a=Array.prototype.slice.call(arguments); a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});p("clear()",function(){return this.iterator("table",function(a){pa(a)})});p("settings()",function(){return new u(this.context,this.context)});p("init()",function(){var a=this.context;return a.length?a[0].oInit:null});p("data()",function(){return this.iterator("table",function(a){return D(a.aoData,"_aData")}).flatten()});p("destroy()",function(a){a=a|| !1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;s(b,"aoDestroyCallback","destroy",[b]);a||(new u(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT");h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j)); b.aaSorting=[];b.aaSortingFixed=[];ya(b);h(l).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&&(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width", b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%p])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){p(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,m){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,m)})})});p("i18n()",function(a,b,c){var d=this.context[0],a=R(a)(d.oLanguage);a===k&&(a=b);c!== k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.13";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null, mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1, bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration? sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending", sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"}, oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};Y(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null, sType:null,sWidth:null};Y(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[], aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null, searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[], fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null, aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=x={buttons:{},classes:{},build:"bs/dt-1.10.13/fh-3.1.2",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature, oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc", sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"", sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ea="",Ea="",G=Ea+"ui-state-default",ka=Ea+"css_right ui-icon ui-icon-",Yb=Ea+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(m.ext.oJUIClasses,m.ext.classes,{sPageButton:"fg-button ui-button "+G,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:G+" sorting_asc", sSortDesc:G+" sorting_desc",sSortable:G+" sorting",sSortableAsc:G+" sorting_asc_disabled",sSortableDesc:G+" sorting_desc_disabled",sSortableNone:G+" sorting_disabled",sSortJUIAsc:ka+"triangle-1-n",sSortJUIDesc:ka+"triangle-1-s",sSortJUI:ka+"carat-2-n-s",sSortJUIAscAllowed:ka+"carat-1-n",sSortJUIDescAllowed:ka+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+G,sScrollFoot:"dataTables_scrollFoot "+G,sHeaderTH:G,sFooterTH:G,sJUIHeader:Yb+ " ui-corner-tl ui-corner-tr",sJUIFooter:Yb+" ui-corner-bl ui-corner-br"});var Nb=m.ext.pager;h.extend(Nb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,m.ext.renderer, {pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,p=0,r=function(b,d){var k,t,u,s,v=function(b){Va(a,b.data.action,true)};k=0;for(t=d.length;k").appendTo(b);r(u,s)}else{m=null;l="";switch(s){case "ellipsis":b.append('');break;case "first":m=j.sFirst;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=s+(e>0?"":" "+ g.sPageButtonDisabled);break;case "next":m=j.sNext;l=s+(e",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[s],"data-dt-idx":p,tabindex:a.iTabIndex,id:c===0&&typeof s==="string"?a.sTableId+"_"+s:null}).html(m).appendTo(b);Ya(u,{action:s},v);p++}}}},t;try{t=h(b).find(H.activeElement).data("dt-idx")}catch(u){}r(h(b).empty(), d);t!==k&&h(b).find("[data-dt-idx="+t+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!cc.test(a))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Sb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Sb(a,c,!0)?"html-num-fmt"+ c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Pb," ").replace(Ca,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Pb," "):a}});var Ba=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Rb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(x.type.order,{"date-pre":function(a){return Date.parse(a)||-Infinity}, "html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return ab?1:0},"string-desc":function(a,b){return ab?-1:0}});fb("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]== "asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("
        ").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+ d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Zb=function(a){return"string"===typeof a?a.replace(//g,">").replace(/"/g,"""):a};m.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Zb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2): "";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Zb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Ob,_fnBuildAjax:ua,_fnAjaxUpdate:nb,_fnAjaxParameters:wb,_fnAjaxUpdateDraw:xb,_fnAjaxDataSrc:va,_fnAddColumn:Ga,_fnColumnOptions:la,_fnAdjustColumnSizing:Z,_fnVisibleToColumnIndex:$,_fnColumnIndexToVisible:aa,_fnVisbleColumns:ba,_fnGetColumns:na,_fnColumnTypes:Ia,_fnApplyColumnDefs:kb,_fnHungarianMap:Y,_fnCamelToHungarian:J,_fnLanguageCompat:Fa, _fnBrowserDetect:ib,_fnAddData:N,_fnAddTr:oa,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:lb,_fnSplitObjNotation:La,_fnGetObjectDataFn:R,_fnSetObjectDataFn:S,_fnGetDataMaster:Ma,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:da,_fnGetRowElements:Ka,_fnCreateTr:Ja,_fnBuildHead:mb,_fnDrawHead:fa,_fnDraw:O,_fnReDraw:T,_fnAddOptionsHtml:pb,_fnDetectHeader:ea, _fnGetUniqueThs:ta,_fnFeatureHtmlFilter:rb,_fnFilterComplete:ga,_fnFilterCustom:Ab,_fnFilterColumn:zb,_fnFilter:yb,_fnFilterCreateSearch:Ra,_fnEscapeRegex:Sa,_fnFilterData:Bb,_fnFeatureHtmlInfo:ub,_fnUpdateInfo:Eb,_fnInfoMacros:Fb,_fnInitialise:ha,_fnInitComplete:wa,_fnLengthChange:Ta,_fnFeatureHtmlLength:qb,_fnFeatureHtmlPaginate:vb,_fnPageChange:Va,_fnFeatureHtmlProcessing:sb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:tb,_fnScrollDraw:ma,_fnApplyToChildren:I,_fnCalculateColumnWidths:Ha,_fnThrottle:Qa, _fnConvertToWidth:Gb,_fnGetWidestNode:Hb,_fnGetMaxLenString:Ib,_fnStringToCss:v,_fnSortFlatten:W,_fnSort:ob,_fnSortAria:Kb,_fnSortListener:Xa,_fnSortAttachListener:Oa,_fnSortingClasses:ya,_fnSortData:Jb,_fnSaveState:za,_fnLoadState:Lb,_fnSettingsFromNode:Aa,_fnLog:K,_fnMap:F,_fnBindAction:Ya,_fnCallbackReg:z,_fnCallbackFire:s,_fnLengthOverflow:Ua,_fnRenderer:Pa,_fnDataSource:y,_fnRowAttributes:Na,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt= m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable}); /*! DataTables Bootstrap 3 integration ©2011-2015 SpryMedia Ltd - datatables.net/license */ (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes, {sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")}; l=0;for(h=f.length;l",{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#", "aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('
          ').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f}); /*! FixedHeader 3.1.2 ©2009-2016 SpryMedia Ltd - datatables.net/license */ (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(g){return d(g,window,document)}):"object"===typeof exports?module.exports=function(g,h){g||(g=window);if(!h||!h.fn.dataTable)h=require("datatables.net")(g,h).$;return d(h,g,g.document)}:d(jQuery,window,document)})(function(d,g,h,k){var j=d.fn.dataTable,l=0,i=function(b,a){if(!(this instanceof i))throw"FixedHeader must be initialised with the 'new' keyword.";!0===a&&(a={});b=new j.Api(b);this.c=d.extend(!0, {},i.defaults,a);this.s={dt:b,position:{theadTop:0,tbodyTop:0,tfootTop:0,tfootBottom:0,width:0,left:0,tfootHeight:0,theadHeight:0,windowHeight:d(g).height(),visible:!0},headerMode:null,footerMode:null,autoWidth:b.settings()[0].oFeatures.bAutoWidth,namespace:".dtfc"+l++,scrollLeft:{header:-1,footer:-1},enable:!0};this.dom={floatingHeader:null,thead:d(b.table().header()),tbody:d(b.table().body()),tfoot:d(b.table().footer()),header:{host:null,floating:null,placeholder:null},footer:{host:null,floating:null, placeholder:null}};this.dom.header.host=this.dom.thead.parent();this.dom.footer.host=this.dom.tfoot.parent();var e=b.settings()[0];if(e._fixedHeader)throw"FixedHeader already initialised on table "+e.nTable.id;e._fixedHeader=this;this._constructor()};d.extend(i.prototype,{enable:function(b){this.s.enable=b;this.c.header&&this._modeChange("in-place","header",!0);this.c.footer&&this.dom.tfoot.length&&this._modeChange("in-place","footer",!0);this.update()},headerOffset:function(b){b!==k&&(this.c.headerOffset= b,this.update());return this.c.headerOffset},footerOffset:function(b){b!==k&&(this.c.footerOffset=b,this.update());return this.c.footerOffset},update:function(){this._positions();this._scroll(!0)},_constructor:function(){var b=this,a=this.s.dt;d(g).on("scroll"+this.s.namespace,function(){b._scroll()}).on("resize"+this.s.namespace,function(){b.s.position.windowHeight=d(g).height();b.update()});var e=d(".fh-fixedHeader");!this.c.headerOffset&&e.length&&(this.c.headerOffset=e.outerHeight());e=d(".fh-fixedFooter"); !this.c.footerOffset&&e.length&&(this.c.footerOffset=e.outerHeight());a.on("column-reorder.dt.dtfc column-visibility.dt.dtfc draw.dt.dtfc column-sizing.dt.dtfc",function(){b.update()});a.on("destroy.dtfc",function(){a.off(".dtfc");d(g).off(b.s.namespace)});this._positions();this._scroll()},_clone:function(b,a){var e=this.s.dt,c=this.dom[b],f="header"===b?this.dom.thead:this.dom.tfoot;!a&&c.floating?c.floating.removeClass("fixedHeader-floating fixedHeader-locked"):(c.floating&&(c.placeholder.remove(), this._unsize(b),c.floating.children().detach(),c.floating.remove()),c.floating=d(e.table().node().cloneNode(!1)).css("table-layout","fixed").removeAttr("id").append(f).appendTo("body"),c.placeholder=f.clone(!1),c.host.prepend(c.placeholder),this._matchWidths(c.placeholder,c.floating))},_matchWidths:function(b,a){var e=function(a){return d(a,b).map(function(){return d(this).width()}).toArray()},c=function(b,c){d(b,a).each(function(a){d(this).css({width:c[a],minWidth:c[a]})})},f=e("th"),e=e("td");c("th", f);c("td",e)},_unsize:function(b){var a=this.dom[b].floating;a&&("footer"===b||"header"===b&&!this.s.autoWidth)?d("th, td",a).css({width:"",minWidth:""}):a&&"header"===b&&d("th, td",a).css("min-width","")},_horizontal:function(b,a){var e=this.dom[b],c=this.s.position,d=this.s.scrollLeft;e.floating&&d[b]!==a&&(e.floating.css("left",c.left-a),d[b]=a)},_modeChange:function(b,a,e){var c=this.dom[a],f=this.s.position,g=d.contains(this.dom["footer"===a?"tfoot":"thead"][0],h.activeElement)?h.activeElement: null;if("in-place"===b){if(c.placeholder&&(c.placeholder.remove(),c.placeholder=null),this._unsize(a),"header"===a?c.host.prepend(this.dom.thead):c.host.append(this.dom.tfoot),c.floating)c.floating.remove(),c.floating=null}else"in"===b?(this._clone(a,e),c.floating.addClass("fixedHeader-floating").css("header"===a?"top":"bottom",this.c[a+"Offset"]).css("left",f.left+"px").css("width",f.width+"px"),"footer"===a&&c.floating.css("top","")):"below"===b?(this._clone(a,e),c.floating.addClass("fixedHeader-locked").css("top", f.tfootTop-f.theadHeight).css("left",f.left+"px").css("width",f.width+"px")):"above"===b&&(this._clone(a,e),c.floating.addClass("fixedHeader-locked").css("top",f.tbodyTop).css("left",f.left+"px").css("width",f.width+"px"));g&&g!==h.activeElement&&g.focus();this.s.scrollLeft.header=-1;this.s.scrollLeft.footer=-1;this.s[a+"Mode"]=b},_positions:function(){var b=this.s.dt.table(),a=this.s.position,e=this.dom,b=d(b.node()),c=b.children("thead"),f=b.children("tfoot"),e=e.tbody;a.visible=b.is(":visible"); a.width=b.outerWidth();a.left=b.offset().left;a.theadTop=c.offset().top;a.tbodyTop=e.offset().top;a.theadHeight=a.tbodyTop-a.theadTop;f.length?(a.tfootTop=f.offset().top,a.tfootBottom=a.tfootTop+f.outerHeight(),a.tfootHeight=a.tfootBottom-a.tfootTop):(a.tfootTop=a.tbodyTop+e.outerHeight(),a.tfootBottom=a.tfootTop,a.tfootHeight=a.tfootTop)},_scroll:function(b){var a=d(h).scrollTop(),e=d(h).scrollLeft(),c=this.s.position,f;if(this.s.enable&&(this.c.header&&(f=!c.visible||a<=c.theadTop-this.c.headerOffset? "in-place":a<=c.tfootTop-c.theadHeight-this.c.headerOffset?"in":"below",(b||f!==this.s.headerMode)&&this._modeChange(f,"header",b),this._horizontal("header",e)),this.c.footer&&this.dom.tfoot.length))a=!c.visible||a+c.windowHeight>=c.tfootBottom+this.c.footerOffset?"in-place":c.windowHeight+a>c.tbodyTop+c.tfootHeight+this.c.footerOffset?"in":"above",(b||a!==this.s.footerMode)&&this._modeChange(a,"footer",b),this._horizontal("footer",e)}});i.version="3.1.2";i.defaults={header:!0,footer:!1,headerOffset:0, footerOffset:0};d.fn.dataTable.FixedHeader=i;d.fn.DataTable.FixedHeader=i;d(h).on("init.dt.dtfh",function(b,a){if("dt"===b.namespace){var e=a.oInit.fixedHeader,c=j.defaults.fixedHeader;if((e||c)&&!a._fixedHeader)c=d.extend({},c,e),!1!==e&&new i(a,c)}});j.Api.register("fixedHeader()",function(){});j.Api.register("fixedHeader.adjust()",function(){return this.iterator("table",function(b){(b=b._fixedHeader)&&b.update()})});j.Api.register("fixedHeader.enable()",function(b){return this.iterator("table", function(a){(a=a._fixedHeader)&&a.enable(b!==k?b:!0)})});j.Api.register("fixedHeader.disable()",function(){return this.iterator("table",function(b){(b=b._fixedHeader)&&b.enable(!1)})});d.each(["header","footer"],function(b,a){j.Api.register("fixedHeader."+a+"Offset()",function(b){var c=this.context;return b===k?c.length&&c[0]._fixedHeader?c[0]._fixedHeader[a+"Offset"]():k:this.iterator("table",function(c){if(c=c._fixedHeader)c[a+"Offset"](b)})})});return i}); MediaConch/Source/Resource/html/js/jquery-1.12.4.js0000644000000000000000000107506613216666133020601 0ustar rootroot/*! * jQuery JavaScript Library v1.12.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2016-05-20T17:17Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Support: Firefox 18+ // Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) //"use strict"; var deletedIds = []; var document = window.document; var slice = deletedIds.slice; var concat = deletedIds.concat; var push = deletedIds.push; var indexOf = deletedIds.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var support = {}; var version = "1.12.4", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }, // Support: Android<4.1, IE<9 // Make sure we trim BOM and NBSP rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num != null ? // Return just the one element from the set ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return all the elements in a clean array slice.call( this ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. each: function( callback ) { return jQuery.each( this, callback ); }, map: function( callback ) { return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); } ) ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { return this.prevObject || this.constructor(); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: deletedIds.sort, splice: deletedIds.splice }; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( ( options = arguments[ i ] ) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = jQuery.isArray( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray( src ) ? src : []; } else { clone = src && jQuery.isPlainObject( src ) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend( { // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type( obj ) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type( obj ) === "array"; }, isWindow: function( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) var realStringObj = obj && obj.toString(); return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, isPlainObject: function( obj ) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call( obj, "constructor" ) && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. if ( !support.ownFirst ) { for ( key in obj ) { return hasOwn.call( obj, key ); } } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, type: function( obj ) { if ( obj == null ) { return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call( obj ) ] || "object" : typeof obj; }, // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, each: function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; for ( ; i < length; i++ ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } else { for ( i in obj ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } return obj; }, // Support: Android<4.1, IE<9 trim: function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( indexOf ) { return indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; while ( j < len ) { first[ i++ ] = second[ j++ ]; } // Support: IE<9 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) if ( len !== len ) { while ( second[ j ] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var length, value, i = 0, ret = []; // Go through the array, translating each of the items to their new values if ( isArrayLike( elems ) ) { length = elems.length; for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: function() { return +( new Date() ); }, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support } ); // JSHint would error on this code due to the Symbol not being defined in ES5. // Defining this global in .jshintrc would create a danger of using the global // unguarded in another place, it seems safer to just disable JSHint for these // three lines. /* jshint ignore: start */ if ( typeof Symbol === "function" ) { jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; } /* jshint ignore: end */ // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function isArrayLike( obj ) { // Support: iOS 8.2 (not reproducible in simulator) // `in` check used to prevent JIT error (gh-2145) // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { if ( list[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + identifier + ")" ), "CLASS": new RegExp( "^\\.(" + identifier + ")" ), "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler = function() { setDocument(); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var m, i, elem, nid, nidselect, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document nodeType = context ? context.nodeType : 9; results = results || []; // Return early from calls with invalid selector or context if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // ID selector if ( (m = match[1]) ) { // Document context if ( nodeType === 9 ) { if ( (elem = context.getElementById( m )) ) { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } // Element context } else { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( newContext && (elem = newContext.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Type selector } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll if ( support.qsa && !compilerCache[ selector + " " ] && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { if ( nodeType !== 1 ) { newContext = context; newSelector = selector; // qSA looks outside Element context, which is not what we want // Thanks to Andrew Dupont for this workaround technique // Support: IE <=8 // Exclude object elements } else if ( context.nodeName.toLowerCase() !== "object" ) { // Capture the context ID, setting it first if necessary if ( (nid = context.getAttribute( "id" )) ) { nid = nid.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", (nid = expando) ); } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; while ( i-- ) { groups[i] = nidselect + " " + toSelector( groups[i] ); } newSelector = groups.join( "," ); // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch ( qsaError ) { } finally { if ( nid === expando ) { context.removeAttribute( "id" ); } } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = arr.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, parent, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; docElem = document.documentElement; documentIsHTML = !isXML( document ); // Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) if ( (parent = document.defaultView) && parent.top !== parent ) { // Support: IE 11 if ( parent.addEventListener ) { parent.addEventListener( "unload", unloadHandler, false ); // Support: IE 9 - 10 only } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", unloadHandler ); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); return m ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild( div ).innerHTML = "" + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push(".#.+[+~]"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully self-exclusive // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return document; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index // ...in a gzip-friendly way node = parent; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { // Use previously-cached element index if available if ( useCache ) { // ...in a gzip-friendly way node = elem; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); uniqueCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); // Don't keep the element (issue #299) input[0] = null; return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); if ( (oldCache = uniqueCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements uniqueCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; if ( !context && elem.ownerDocument !== document ) { setDocument( elem ); xml = !documentIsHTML; } while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount += i; // Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var dir = function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }; var siblings = function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; }; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; } ); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; } ); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; } ); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; } ) ); }; jQuery.fn.extend( { find: function( selector ) { var i, ret = [], self = this, len = self.length; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } } ) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } } ); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context, root ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // init accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root = root || rootjQuery; // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt( 0 ) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) if ( match[ 1 ] ) { context = context instanceof jQuery ? context[ 0 ] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[ 2 ] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[ 2 ] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[ 0 ] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || root ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[ 0 ] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof root.ready !== "undefined" ? root.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend( { has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } } ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && ( pos ? pos.index( cur ) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[ 0 ], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem, this ); }, add: function( selector, context ) { return this.pushStack( jQuery.uniqueSort( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); } } ); function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return siblings( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return siblings( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { ret = jQuery.uniqueSort( ret ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { ret = ret.reverse(); } } return this.pushStack( ret ); }; } ); var rnotwhite = ( /\S+/g ); // Convert String-formatted options into Object-formatted ones function createOptions( options ) { var object = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; } ); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? createOptions( options ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value for non-forgettable lists memory, // Flag to know if list was already fired fired, // Flag to prevent firing locked, // Actual callback list list = [], // Queue of execution data for repeatable lists queue = [], // Index of currently firing callback (modified by add/remove as needed) firingIndex = -1, // Fire callbacks fire = function() { // Enforce single-firing locked = options.once; // Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes fired = firing = true; for ( ; queue.length; firingIndex = -1 ) { memory = queue.shift(); while ( ++firingIndex < list.length ) { // Run callback and check for early termination if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && options.stopOnFalse ) { // Jump to end and forget the data so .add doesn't re-fire firingIndex = list.length; memory = false; } } } // Forget the data if we're done with it if ( !options.memory ) { memory = false; } firing = false; // Clean up if we're done firing for good if ( locked ) { // Keep an empty list if we have data for future add calls if ( memory ) { list = []; // Otherwise, this object is spent } else { list = ""; } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // If we have memory from a past run, we should fire after adding if ( memory && !firing ) { firingIndex = list.length - 1; queue.push( memory ); } ( function add( args ) { jQuery.each( args, function( _, arg ) { if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { // Inspect recursively add( arg ); } } ); } )( arguments ); if ( memory && !firing ) { fire(); } } return this; }, // Remove a callback from the list remove: function() { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( index <= firingIndex ) { firingIndex--; } } } ); return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : list.length > 0; }, // Remove all callbacks from the list empty: function() { if ( list ) { list = []; } return this; }, // Disable .fire and .add // Abort any current/pending executions // Clear all callbacks and values disable: function() { locked = queue = []; list = memory = ""; return this; }, disabled: function() { return !list; }, // Disable .fire // Also disable .add unless we have memory (since it would have no effect) // Abort any pending executions lock: function() { locked = true; if ( !memory ) { self.disable(); } return this; }, locked: function() { return !!locked; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( !locked ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; queue.push( args ); if ( !firing ) { fire(); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend( { Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], [ "notify", "progress", jQuery.Callbacks( "memory" ) ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) .fail( newDefer.reject ); } else { newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } } ); } ); fns = null; } ).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add( function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[ 0 ] ] = function() { deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[ 0 ] + "With" ] = list.fireWith; } ); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. // If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .progress( updateFunc( i, progressContexts, progressValues ) ) .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } } ); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend( { // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } } ); /** * Clean-up method for dom ready events */ function detach() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed ); window.removeEventListener( "load", completed ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } } /** * The ready event handler and self cleanup method */ function completed() { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || window.event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called // after the browser event has already occurred. // Support: IE6-10 // Older IE sometimes signals "interactive" too soon if ( document.readyState === "complete" || ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { // Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch ( e ) {} if ( top && top.doScroll ) { ( function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll( "left" ); } catch ( e ) { return window.setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } } )(); } } } return readyList.promise( obj ); }; // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); // Support: IE<9 // Iteration over object's inherited properties before its own var i; for ( i in jQuery( support ) ) { break; } support.ownFirst = i === "0"; // Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout = false; // Execute ASAP in case we need to set body.style.zoom jQuery( function() { // Minified: var a,b,c,d var val, div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Return for frameset docs that don't have a body return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); if ( typeof div.style.zoom !== "undefined" ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; if ( val ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); } ); ( function() { var div = document.createElement( "div" ); // Support: IE<9 support.deleteExpando = true; try { delete div.test; } catch ( e ) { support.deleteExpando = false; } // Null elements to avoid leaks in IE. div = null; } )(); var acceptData = function( elem ) { var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], nodeType = +elem.nodeType || 1; // Do not set data on non-element DOM nodes because it will not be cleared (#8335). return nodeType !== 1 && nodeType !== 9 ? false : // Nodes accept data unless otherwise specified; rejection can be conditional !noData || noData !== true && elem.getAttribute( "classid" ) === noData; }; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch ( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } function internalData( elem, name, data, pvt /* Internal Use Only */ ) { if ( !acceptData( elem ) ) { return; } var ret, thisCache, internalKey = jQuery.expando, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && data === undefined && typeof name === "string" ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( typeof name === "string" ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !acceptData( elem ) ) { return; } var thisCache, i, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split( " " ); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } i = name.length; while ( i-- ) { delete thisCache[ name[ i ] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */ } else if ( support.deleteExpando || cache != cache.window ) { /* jshint eqeqeq: true */ delete cache[ id ]; // When all else fails, undefined } else { cache[ id ] = undefined; } } jQuery.extend( { cache: {}, // The following elements (space-suffixed to avoid Object.prototype collisions) // throw uncatchable exceptions if you attempt to set expando properties noData: { "applet ": true, "embed ": true, // ...but Flash objects (which have this classid) *can* handle expandos "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); } } ); jQuery.fn.extend( { data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE11+ // The attrs elements can be null (#14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each( function() { jQuery.data( this, key ); } ); } return arguments.length > 1 ? // Sets one value this.each( function() { jQuery.data( this, key, value ); } ) : // Gets one value // Try to fetch any internally stored data first elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; }, removeData: function( key ) { return this.each( function() { jQuery.removeData( this, key ); } ); } } ); jQuery.extend( { queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, // or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks( "once memory" ).add( function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); } ) } ); } } ); jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : this.each( function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } } ); }, dequeue: function( type ) { return this.each( function() { jQuery.dequeue( this, type ); } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } } ); ( function() { var shrinkWrapBlocksVal; support.shrinkWrapBlocks = function() { if ( shrinkWrapBlocksVal != null ) { return shrinkWrapBlocksVal; } // Will be changed later if needed. shrinkWrapBlocksVal = false; // Minified: var b,c,d var div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Test fired too early or in an unsupported environment, exit. return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); // Support: IE6 // Check if elements with layout shrink-wrap their children if ( typeof div.style.zoom !== "undefined" ) { // Reset CSS: box-sizing; display; margin; border div.style.cssText = // Support: Firefox<29, Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;" + "padding:1px;width:1px;zoom:1"; div.appendChild( document.createElement( "div" ) ).style.width = "5px"; shrinkWrapBlocksVal = div.offsetWidth !== 3; } body.removeChild( container ); return shrinkWrapBlocksVal; }; } )(); var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; function adjustCSS( elem, prop, valueParts, tween ) { var adjusted, scale = 1, maxIterations = 20, currentValue = tween ? function() { return tween.cur(); } : function() { return jQuery.css( elem, prop, "" ); }, initial = currentValue(), unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; // Make sure we update the tween properties later on valueParts = valueParts || []; // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; do { // If previous iteration zeroed out, double until we get *something*. // Use string for doubling so we don't accidentally see scale as unchanged below scale = scale || ".5"; // Adjust and apply initialInUnit = initialInUnit / scale; jQuery.style( elem, prop, initialInUnit + unit ); // Update scale, tolerating zero or NaN from tween.cur() // Break the loop if scale is unchanged or perfect, or if we've just had enough. } while ( scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations ); } if ( valueParts ) { initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified adjusted = valueParts[ 1 ] ? initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : +valueParts[ 2 ]; if ( tween ) { tween.unit = unit; tween.start = initialInUnit; tween.end = adjusted; } } return adjusted; } // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[ i ], key, raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[ 0 ], key ) : emptyGet; }; var rcheckableType = ( /^(?:checkbox|radio)$/i ); var rtagName = ( /<([\w:-]+)/ ); var rscriptType = ( /^$|\/(?:java|ecma)script/i ); var rleadingWhitespace = ( /^\s+/ ); var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } ( function() { var div = document.createElement( "div" ), fragment = document.createDocumentFragment(), input = document.createElement( "input" ); // Setup div.innerHTML = "
          a"; // IE strips leading whitespace when .innerHTML is used support.leadingWhitespace = div.firstChild.nodeType === 3; // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables support.tbody = !div.getElementsByTagName( "tbody" ).length; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works support.html5Clone = document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) input.type = "checkbox"; input.checked = true; fragment.appendChild( input ); support.appendChecked = input.checked; // Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE6-IE11+ div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild( div ); // Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (#14901) input = document.createElement( "input" ); input.setAttribute( "type", "radio" ); input.setAttribute( "checked", "checked" ); input.setAttribute( "name", "t" ); div.appendChild( input ); // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ support.noCloneEvent = !!div.addEventListener; // Support: IE<9 // Since attributes and properties are the same in IE, // cleanData must set properties to undefined rather than use removeAttribute div[ jQuery.expando ] = 1; support.attributes = !div.getAttribute( jQuery.expando ); } )(); // We have to close these tags to support XHTML (#13200) var wrapMap = { option: [ 1, "" ], legend: [ 1, "
          ", "
          " ], area: [ 1, "", "" ], // Support: IE8 param: [ 1, "", "" ], thead: [ 1, "", "
          " ], tr: [ 2, "", "
          " ], col: [ 2, "", "
          " ], td: [ 3, "", "
          " ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
          ", "
          " ] }; // Support: IE8-IE9 wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; ( elem = elems[ i ] ) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; ( elem = elems[ i ] ) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[ i ], "globalEval" ) ); } } var rhtml = /<|&#?\w+;/, rtbody = / from table fragments if ( !support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[ 1 ] === "
          " && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( ( elem = nodes[ i++ ] ) ) { // Skip elements already in the context collection (trac-4087) if ( selection && jQuery.inArray( elem, selection ) > -1 ) { if ( ignored ) { ignored.push( elem ); } continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( ( elem = tmp[ j++ ] ) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; } ( function() { var i, eventName, div = document.createElement( "div" ); // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) for ( i in { submit: true, change: true, focusin: true } ) { eventName = "on" + i; if ( !( support[ i ] = eventName in window ) ) { // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute( eventName, "t" ); support[ i ] = div.attributes[ eventName ].expando === false; } } // Null elements to avoid leaks in IE. div = null; } )(); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; } function returnFalse() { return false; } // Support: IE9 // See #13393 for more info function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } function on( elem, types, selector, data, fn, one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { on( elem, type, selector, data, types[ type ], one ); } return elem; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return elem; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return elem.each( function() { jQuery.event.add( this, types, fn, data, selector ); } ); } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { events = elemData.events = {}; } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && ( !e || jQuery.event.triggered !== e.type ) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak // with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend( { type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !( events = elemData.events ) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[ 2 ] && new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "." ) > -1 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join( "." ); event.rnamespace = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( ( !special._default || special._default.apply( eventPath.pop(), data ) === false ) && acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[ 0 ] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or 2) have namespace(s) // a subset or equal to those in the bound event (both can have no namespace). if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Support (at least): Chrome, IE9 // Find delegate handlers // Black-hole SVG instance trees (#13180) // // Support: Firefox<=42+ // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) if ( delegateCount && cur.nodeType && ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { /* jshint eqeqeq: true */ // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push( { elem: cur, handlers: matches } ); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Safari 6-8+ // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split( " " ), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: ( "button buttons clientX clientY fromElement offsetX offsetY " + "pageX pageY screenX screenY toElement" ).split( " " ), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } }, // Piggyback on a donor event to simulate a different one simulate: function( type, elem, event ) { var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true // Previously, `originalEvent: {}` was set here, so stopPropagation call // would not be triggered on donor event, since in our own // jQuery.event.stopPropagation function we had a check for existence of // originalEvent.stopPropagation method, so, consequently it would be a noop. // // Guard for simulated events was moved to jQuery.event.stopPropagation function // since `originalEvent` should point to the original event for the // constancy with other events and for more focused logic } ); jQuery.event.trigger( e, null, elem ); if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { // This "if" is needed for plain objects if ( elem.removeEventListener ) { elem.removeEventListener( type, handle ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, // to properly expose it to GC if ( typeof elem[ name ] === "undefined" ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: IE < 9, Android < 4.0 src.returnValue === false ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e || this.isSimulated ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && e.stopImmediatePropagation ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only // Safari sends mouseenter too often; see: // https://code.google.com/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; } ); // IE submit delegation if ( !support.submit ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? // Support: IE <=8 // We use jQuery.prop instead of elem.form // to allow fixing the IE8 delegated submit issue (gh-2332) // by 3rd party polyfills/workarounds. jQuery.prop( elem, "form" ) : undefined; if ( form && !jQuery._data( form, "submit" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submitBubble = true; } ); jQuery._data( form, "submit", true ); } } ); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submitBubble ) { delete event._submitBubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !support.change ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._justChanged = true; } } ); jQuery.event.add( this, "click._change", function( event ) { if ( this._justChanged && !event.isTrigger ) { this._justChanged = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event ); } ); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event ); } } ); jQuery._data( elem, "change", true ); } } ); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Support: Firefox // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // // Support: Chrome, Safari // focus(in | out) events fire after focus & blur events, // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 if ( !support.focusin ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); jQuery._removeData( doc, fix ); } else { jQuery._data( doc, fix, attaches ); } } }; } ); } jQuery.fn.extend( { on: function( types, selector, data, fn ) { return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each( function() { jQuery.event.remove( this, types, fn, selector ); } ); }, trigger: function( type, data ) { return this.each( function() { jQuery.event.trigger( type, data, this ); } ); }, triggerHandler: function( type, data ) { var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } } ); var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, // Support: IE 10-11, Edge 10240+ // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); // Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName( "tbody" )[ 0 ] || elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[ 1 ]; } else { elem.removeAttribute( "type" ); } return elem; } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays args = concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = collection.length, iNoClone = l - 1, value = args[ 0 ], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); } ); } if ( l ) { fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } // Require either new content or an interest in ignored elements to invoke the callback if ( first || ignored ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item // instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: Android<4.1, PhantomJS<2 // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( collection[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ) .replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return collection; } function remove( elem, selector, keepData ) { var node, elems = selector ? jQuery.filter( selector, elem ) : elem, i = 0; for ( ; ( node = elems[ i ] ) != null; i++ ) { if ( !keepData && node.nodeType === 1 ) { jQuery.cleanData( getAll( node ) ); } if ( node.parentNode ) { if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); } } return elem; } jQuery.extend( { htmlPrefilter: function( html ) { return html.replace( rxhtmlTag, "<$1>" ); }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( support.html5Clone || jQuery.isXMLDoc( elem ) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( ( !support.noCloneEvent || !support.noCloneChecked ) && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[ i ] ) { fixCloneNodeIssues( node, destElements[ i ] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { cloneCopyEvent( node, destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, cleanData: function( elems, /* internal */ forceAcceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, attributes = support.attributes, special = jQuery.event.special; for ( ; ( elem = elems[ i ] ) != null; i++ ) { if ( forceAcceptData || acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // Support: IE<9 // IE does not allow us to delete expando properties from nodes // IE creates expando attributes along with the property // IE does not have a removeAttribute function on Document nodes if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { elem.removeAttribute( internalKey ); // Webkit & Blink performance suffers when deleting properties // from DOM nodes, so set to undefined instead // https://code.google.com/p/chromium/issues/detail?id=378607 } else { elem[ internalKey ] = undefined; } deletedIds.push( id ); } } } } } } ); jQuery.fn.extend( { // Keep domManip exposed until 3.0 (gh-2225) domManip: domManip, detach: function( selector ) { return remove( this, selector, true ); }, remove: function( selector ) { return remove( this, selector ); }, text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, append: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } } ); }, prepend: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } } ); }, before: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } } ); }, after: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } } ); }, empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); } ); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( support.htmlSerialize || !rnoshimcache.test( value ) ) && ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = jQuery.htmlPrefilter( value ); try { for ( ; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[ i ] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch ( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var ignored = []; // Make the changes, replacing each non-ignored context element with the new content return domManip( this, arguments, function( elem ) { var parent = this.parentNode; if ( jQuery.inArray( this, ignored ) < 0 ) { jQuery.cleanData( getAll( this ) ); if ( parent ) { parent.replaceChild( elem, this ); } } // Force callback invocation }, ignored ); } } ); jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; } ); var iframe, elemdisplay = { // Support: Firefox // We have to pre-define these values for FF (#10227) HTML: "block", BODY: "block" }; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), display = jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = ( iframe || jQuery( "