diff -Nru sogo-2.1.0/.git/COMMIT_EDITMSG sogo-2.1.0/.git/COMMIT_EDITMSG --- sogo-2.1.0/.git/COMMIT_EDITMSG 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/COMMIT_EDITMSG 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Forced memcached dependency diff -Nru sogo-2.1.0/.git/HEAD sogo-2.1.0/.git/HEAD --- sogo-2.1.0/.git/HEAD 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/.git/HEAD 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -ref: refs/heads/master diff -Nru sogo-2.1.0/.git/config sogo-2.1.0/.git/config --- sogo-2.1.0/.git/config 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/.git/config 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = false - logallrefupdates = true -[remote "origin"] - url = git@github.com:Zentyal/sogo.git - fetch = +refs/heads/*:refs/remotes/origin/* -[branch "master"] - remote = origin - merge = refs/heads/master diff -Nru sogo-2.1.0/.git/description sogo-2.1.0/.git/description --- sogo-2.1.0/.git/description 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/description 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff -Nru sogo-2.1.0/.git/hooks/applypatch-msg.sample sogo-2.1.0/.git/hooks/applypatch-msg.sample --- sogo-2.1.0/.git/hooks/applypatch-msg.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/applypatch-msg.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -#!/bin/sh -# -# An example hook script to check the commit log message taken by -# applypatch from an e-mail message. -# -# The hook should exit with non-zero status after issuing an -# appropriate message if it wants to stop the commit. The hook is -# allowed to edit the commit message file. -# -# To enable this hook, rename this file to "applypatch-msg". - -. git-sh-setup -test -x "$GIT_DIR/hooks/commit-msg" && - exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} -: diff -Nru sogo-2.1.0/.git/hooks/commit-msg.sample sogo-2.1.0/.git/hooks/commit-msg.sample --- sogo-2.1.0/.git/hooks/commit-msg.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/commit-msg.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -#!/bin/sh -# -# An example hook script to check the commit log message. -# Called by "git commit" with one argument, the name of the file -# that has the commit message. The hook should exit with non-zero -# status after issuing an appropriate message if it wants to stop the -# commit. The hook is allowed to edit the commit message file. -# -# To enable this hook, rename this file to "commit-msg". - -# Uncomment the below to add a Signed-off-by line to the message. -# Doing this in a hook is a bad idea in general, but the prepare-commit-msg -# hook is more suited to it. -# -# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') -# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" - -# This example catches duplicate Signed-off-by lines. - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - exit 1 -} diff -Nru sogo-2.1.0/.git/hooks/post-update.sample sogo-2.1.0/.git/hooks/post-update.sample --- sogo-2.1.0/.git/hooks/post-update.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/post-update.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -#!/bin/sh -# -# An example hook script to prepare a packed repository for use over -# dumb transports. -# -# To enable this hook, rename this file to "post-update". - -exec git update-server-info diff -Nru sogo-2.1.0/.git/hooks/pre-applypatch.sample sogo-2.1.0/.git/hooks/pre-applypatch.sample --- sogo-2.1.0/.git/hooks/pre-applypatch.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/pre-applypatch.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed -# by applypatch from an e-mail message. -# -# The hook should exit with non-zero status after issuing an -# appropriate message if it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-applypatch". - -. git-sh-setup -test -x "$GIT_DIR/hooks/pre-commit" && - exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} -: diff -Nru sogo-2.1.0/.git/hooks/pre-commit.sample sogo-2.1.0/.git/hooks/pre-commit.sample --- sogo-2.1.0/.git/hooks/pre-commit.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/pre-commit.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-commit". - -if git rev-parse --verify HEAD >/dev/null 2>&1 -then - against=HEAD -else - # Initial commit: diff against an empty tree object - against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 -fi - -# If you want to allow non-ascii filenames set this variable to true. -allownonascii=$(git config hooks.allownonascii) - -# Redirect output to stderr. -exec 1>&2 - -# Cross platform projects tend to avoid non-ascii filenames; prevent -# them from being added to the repository. We exploit the fact that the -# printable range starts at the space character and ends with tilde. -if [ "$allownonascii" != "true" ] && - # Note that the use of brackets around a tr range is ok here, (it's - # even required, for portability to Solaris 10's /usr/bin/tr), since - # the square bracket bytes happen to fall in the designated range. - test $(git diff --cached --name-only --diff-filter=A -z $against | - LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 -then - echo "Error: Attempt to add a non-ascii file name." - echo - echo "This can cause problems if you want to work" - echo "with people on other platforms." - echo - echo "To be portable it is advisable to rename the file ..." - echo - echo "If you know what you are doing you can disable this" - echo "check using:" - echo - echo " git config hooks.allownonascii true" - echo - exit 1 -fi - -# If there are whitespace errors, print the offending file names and fail. -exec git diff-index --check --cached $against -- diff -Nru sogo-2.1.0/.git/hooks/pre-push.sample sogo-2.1.0/.git/hooks/pre-push.sample --- sogo-2.1.0/.git/hooks/pre-push.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/pre-push.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -#!/bin/sh - -# An example hook script to verify what is about to be pushed. Called by "git -# push" after it has checked the remote status, but before anything has been -# pushed. If this script exits with a non-zero status nothing will be pushed. -# -# This hook is called with the following parameters: -# -# $1 -- Name of the remote to which the push is being done -# $2 -- URL to which the push is being done -# -# If pushing without using a named remote those arguments will be equal. -# -# Information about the commits which are being pushed is supplied as lines to -# the standard input in the form: -# -# -# -# This sample shows how to prevent push of commits where the log message starts -# with "WIP" (work in progress). - -remote="$1" -url="$2" - -z40=0000000000000000000000000000000000000000 - -IFS=' ' -while read local_ref local_sha remote_ref remote_sha -do - if [ "$local_sha" = $z40 ] - then - # Handle delete - else - if [ "$remote_sha" = $z40 ] - then - # New branch, examine all commits - range="$local_sha" - else - # Update to existing branch, examine new commits - range="$remote_sha..$local_sha" - fi - - # Check for WIP commit - commit=`git rev-list -n 1 --grep '^WIP' "$range"` - if [ -n "$commit" ] - then - echo "Found WIP commit in $local_ref, not pushing" - exit 1 - fi - fi -done - -exit 0 diff -Nru sogo-2.1.0/.git/hooks/pre-rebase.sample sogo-2.1.0/.git/hooks/pre-rebase.sample --- sogo-2.1.0/.git/hooks/pre-rebase.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/pre-rebase.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,169 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2006, 2008 Junio C Hamano -# -# The "pre-rebase" hook is run just before "git rebase" starts doing -# its job, and can prevent the command from running by exiting with -# non-zero status. -# -# The hook is called with the following parameters: -# -# $1 -- the upstream the series was forked from. -# $2 -- the branch being rebased (or empty when rebasing the current branch). -# -# This sample shows how to prevent topic branches that are already -# merged to 'next' branch from getting rebased, because allowing it -# would result in rebasing already published history. - -publish=next -basebranch="$1" -if test "$#" = 2 -then - topic="refs/heads/$2" -else - topic=`git symbolic-ref HEAD` || - exit 0 ;# we do not interrupt rebasing detached HEAD -fi - -case "$topic" in -refs/heads/??/*) - ;; -*) - exit 0 ;# we do not interrupt others. - ;; -esac - -# Now we are dealing with a topic branch being rebased -# on top of master. Is it OK to rebase it? - -# Does the topic really exist? -git show-ref -q "$topic" || { - echo >&2 "No such branch $topic" - exit 1 -} - -# Is topic fully merged to master? -not_in_master=`git rev-list --pretty=oneline ^master "$topic"` -if test -z "$not_in_master" -then - echo >&2 "$topic is fully merged to master; better remove it." - exit 1 ;# we could allow it, but there is no point. -fi - -# Is topic ever merged to next? If so you should not be rebasing it. -only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` -only_next_2=`git rev-list ^master ${publish} | sort` -if test "$only_next_1" = "$only_next_2" -then - not_in_topic=`git rev-list "^$topic" master` - if test -z "$not_in_topic" - then - echo >&2 "$topic is already up-to-date with master" - exit 1 ;# we could allow it, but there is no point. - else - exit 0 - fi -else - not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` - /usr/bin/perl -e ' - my $topic = $ARGV[0]; - my $msg = "* $topic has commits already merged to public branch:\n"; - my (%not_in_next) = map { - /^([0-9a-f]+) /; - ($1 => 1); - } split(/\n/, $ARGV[1]); - for my $elem (map { - /^([0-9a-f]+) (.*)$/; - [$1 => $2]; - } split(/\n/, $ARGV[2])) { - if (!exists $not_in_next{$elem->[0]}) { - if ($msg) { - print STDERR $msg; - undef $msg; - } - print STDERR " $elem->[1]\n"; - } - } - ' "$topic" "$not_in_next" "$not_in_master" - exit 1 -fi - -<<\DOC_END - -This sample hook safeguards topic branches that have been -published from being rewound. - -The workflow assumed here is: - - * Once a topic branch forks from "master", "master" is never - merged into it again (either directly or indirectly). - - * Once a topic branch is fully cooked and merged into "master", - it is deleted. If you need to build on top of it to correct - earlier mistakes, a new topic branch is created by forking at - the tip of the "master". This is not strictly necessary, but - it makes it easier to keep your history simple. - - * Whenever you need to test or publish your changes to topic - branches, merge them into "next" branch. - -The script, being an example, hardcodes the publish branch name -to be "next", but it is trivial to make it configurable via -$GIT_DIR/config mechanism. - -With this workflow, you would want to know: - -(1) ... if a topic branch has ever been merged to "next". Young - topic branches can have stupid mistakes you would rather - clean up before publishing, and things that have not been - merged into other branches can be easily rebased without - affecting other people. But once it is published, you would - not want to rewind it. - -(2) ... if a topic branch has been fully merged to "master". - Then you can delete it. More importantly, you should not - build on top of it -- other people may already want to - change things related to the topic as patches against your - "master", so if you need further changes, it is better to - fork the topic (perhaps with the same name) afresh from the - tip of "master". - -Let's look at this example: - - o---o---o---o---o---o---o---o---o---o "next" - / / / / - / a---a---b A / / - / / / / - / / c---c---c---c B / - / / / \ / - / / / b---b C \ / - / / / / \ / - ---o---o---o---o---o---o---o---o---o---o---o "master" - - -A, B and C are topic branches. - - * A has one fix since it was merged up to "next". - - * B has finished. It has been fully merged up to "master" and "next", - and is ready to be deleted. - - * C has not merged to "next" at all. - -We would want to allow C to be rebased, refuse A, and encourage -B to be deleted. - -To compute (1): - - git rev-list ^master ^topic next - git rev-list ^master next - - if these match, topic has not merged in next at all. - -To compute (2): - - git rev-list master..topic - - if this is empty, it is fully merged to "master". - -DOC_END diff -Nru sogo-2.1.0/.git/hooks/prepare-commit-msg.sample sogo-2.1.0/.git/hooks/prepare-commit-msg.sample --- sogo-2.1.0/.git/hooks/prepare-commit-msg.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/prepare-commit-msg.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -#!/bin/sh -# -# An example hook script to prepare the commit log message. -# Called by "git commit" with the name of the file that has the -# commit message, followed by the description of the commit -# message's source. The hook's purpose is to edit the commit -# message file. If the hook fails with a non-zero status, -# the commit is aborted. -# -# To enable this hook, rename this file to "prepare-commit-msg". - -# This hook includes three examples. The first comments out the -# "Conflicts:" part of a merge commit. -# -# The second includes the output of "git diff --name-status -r" -# into the message, just before the "git status" output. It is -# commented because it doesn't cope with --amend or with squashed -# commits. -# -# The third example adds a Signed-off-by line to the message, that can -# still be edited. This is rarely a good idea. - -case "$2,$3" in - merge,) - /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; - -# ,|template,) -# /usr/bin/perl -i.bak -pe ' -# print "\n" . `git diff --cached --name-status -r` -# if /^#/ && $first++ == 0' "$1" ;; - - *) ;; -esac - -# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') -# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff -Nru sogo-2.1.0/.git/hooks/update.sample sogo-2.1.0/.git/hooks/update.sample --- sogo-2.1.0/.git/hooks/update.sample 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/hooks/update.sample 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -#!/bin/sh -# -# An example hook script to blocks unannotated tags from entering. -# Called by "git receive-pack" with arguments: refname sha1-old sha1-new -# -# To enable this hook, rename this file to "update". -# -# Config -# ------ -# hooks.allowunannotated -# This boolean sets whether unannotated tags will be allowed into the -# repository. By default they won't be. -# hooks.allowdeletetag -# This boolean sets whether deleting tags will be allowed in the -# repository. By default they won't be. -# hooks.allowmodifytag -# This boolean sets whether a tag may be modified after creation. By default -# it won't be. -# hooks.allowdeletebranch -# This boolean sets whether deleting branches will be allowed in the -# repository. By default they won't be. -# hooks.denycreatebranch -# This boolean sets whether remotely creating branches will be denied -# in the repository. By default this is allowed. -# - -# --- Command line -refname="$1" -oldrev="$2" -newrev="$3" - -# --- Safety check -if [ -z "$GIT_DIR" ]; then - echo "Don't run this script from the command line." >&2 - echo " (if you want, you could supply GIT_DIR then run" >&2 - echo " $0 )" >&2 - exit 1 -fi - -if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then - echo "usage: $0 " >&2 - exit 1 -fi - -# --- Config -allowunannotated=$(git config --bool hooks.allowunannotated) -allowdeletebranch=$(git config --bool hooks.allowdeletebranch) -denycreatebranch=$(git config --bool hooks.denycreatebranch) -allowdeletetag=$(git config --bool hooks.allowdeletetag) -allowmodifytag=$(git config --bool hooks.allowmodifytag) - -# check for no description -projectdesc=$(sed -e '1q' "$GIT_DIR/description") -case "$projectdesc" in -"Unnamed repository"* | "") - echo "*** Project description file hasn't been set" >&2 - exit 1 - ;; -esac - -# --- Check types -# if $newrev is 0000...0000, it's a commit to delete a ref. -zero="0000000000000000000000000000000000000000" -if [ "$newrev" = "$zero" ]; then - newrev_type=delete -else - newrev_type=$(git cat-file -t $newrev) -fi - -case "$refname","$newrev_type" in - refs/tags/*,commit) - # un-annotated tag - short_refname=${refname##refs/tags/} - if [ "$allowunannotated" != "true" ]; then - echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 - echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 - exit 1 - fi - ;; - refs/tags/*,delete) - # delete tag - if [ "$allowdeletetag" != "true" ]; then - echo "*** Deleting a tag is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/tags/*,tag) - # annotated tag - if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 - then - echo "*** Tag '$refname' already exists." >&2 - echo "*** Modifying a tag is not allowed in this repository." >&2 - exit 1 - fi - ;; - refs/heads/*,commit) - # branch - if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then - echo "*** Creating a branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/heads/*,delete) - # delete branch - if [ "$allowdeletebranch" != "true" ]; then - echo "*** Deleting a branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/remotes/*,commit) - # tracking branch - ;; - refs/remotes/*,delete) - # delete tracking branch - if [ "$allowdeletebranch" != "true" ]; then - echo "*** Deleting a tracking branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - *) - # Anything else (is there anything else?) - echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 - exit 1 - ;; -esac - -# --- Finished -exit 0 Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/index and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/index differ diff -Nru sogo-2.1.0/.git/info/exclude sogo-2.1.0/.git/info/exclude --- sogo-2.1.0/.git/info/exclude 2013-10-22 16:15:07.000000000 +0000 +++ sogo-2.1.0/.git/info/exclude 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff -Nru sogo-2.1.0/.git/logs/HEAD sogo-2.1.0/.git/logs/HEAD --- sogo-2.1.0/.git/logs/HEAD 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/logs/HEAD 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -0000000000000000000000000000000000000000 6e30f5845eef5684b884e7f880daafca38385cf2 Carlos Perelló Marín 1382458685 +0200 clone: from git@github.com:Zentyal/sogo.git -6e30f5845eef5684b884e7f880daafca38385cf2 230a3ca11d56987f8421a9627d14fa1fa3881a85 Carlos Perelló Marín 1382459794 +0200 commit: Forced memcached dependency diff -Nru sogo-2.1.0/.git/logs/refs/heads/master sogo-2.1.0/.git/logs/refs/heads/master --- sogo-2.1.0/.git/logs/refs/heads/master 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/logs/refs/heads/master 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -0000000000000000000000000000000000000000 6e30f5845eef5684b884e7f880daafca38385cf2 Carlos Perelló Marín 1382458685 +0200 clone: from git@github.com:Zentyal/sogo.git -6e30f5845eef5684b884e7f880daafca38385cf2 230a3ca11d56987f8421a9627d14fa1fa3881a85 Carlos Perelló Marín 1382459794 +0200 commit: Forced memcached dependency diff -Nru sogo-2.1.0/.git/logs/refs/remotes/origin/HEAD sogo-2.1.0/.git/logs/refs/remotes/origin/HEAD --- sogo-2.1.0/.git/logs/refs/remotes/origin/HEAD 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/.git/logs/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -0000000000000000000000000000000000000000 6e30f5845eef5684b884e7f880daafca38385cf2 Carlos Perelló Marín 1382458685 +0200 clone: from git@github.com:Zentyal/sogo.git diff -Nru sogo-2.1.0/.git/logs/refs/remotes/origin/master sogo-2.1.0/.git/logs/refs/remotes/origin/master --- sogo-2.1.0/.git/logs/refs/remotes/origin/master 2013-10-22 16:36:40.000000000 +0000 +++ sogo-2.1.0/.git/logs/refs/remotes/origin/master 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -6e30f5845eef5684b884e7f880daafca38385cf2 230a3ca11d56987f8421a9627d14fa1fa3881a85 Carlos Perelló Marín 1382459800 +0200 update by push diff -Nru sogo-2.1.0/.git/objects/23/0a3ca11d56987f8421a9627d14fa1fa3881a85 sogo-2.1.0/.git/objects/23/0a3ca11d56987f8421a9627d14fa1fa3881a85 --- sogo-2.1.0/.git/objects/23/0a3ca11d56987f8421a9627d14fa1fa3881a85 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/objects/23/0a3ca11d56987f8421a9627d14fa1fa3881a85 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -x=j1FS5 &h4v"r#b6B+o}O_4yl$1bSqj$1[rNC(N׀>gD/"BT: \y|X dȺOK[ơaIWmV:_uK&*K/W|AV \ No newline at end of file Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/objects/81/8b718186ae1e27da573137af6ac566c39bdabb and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/objects/81/8b718186ae1e27da573137af6ac566c39bdabb differ Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/objects/9d/ed3b63e149230e621a3eb7a7891ed1c8d41330 and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/objects/9d/ed3b63e149230e621a3eb7a7891ed1c8d41330 differ Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/objects/9e/c1fc7890af2ec2a9256901c894de97affd9b3a and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/objects/9e/c1fc7890af2ec2a9256901c894de97affd9b3a differ diff -Nru sogo-2.1.0/.git/objects/ac/081af3c6123fc09557f721a49ca91fd1eeaece sogo-2.1.0/.git/objects/ac/081af3c6123fc09557f721a49ca91fd1eeaece --- sogo-2.1.0/.git/objects/ac/081af3c6123fc09557f721a49ca91fd1eeaece 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/objects/ac/081af3c6123fc09557f721a49ca91fd1eeaece 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -xVMo7y| 89Ԃu E Q%GZR>R -Vpf{íw#{C -vť8vV\he?}`]|0IR-~Q;ت0$UæcOoЏԮ7Rӆ/!rWV"p1:.EHxtyY>diuar+lXm+ -ۏ*8u5mKu0wV@cn&фm[[]k!]wa2rHQV BWQQ\ -y-5yƽV9đ ~-{uye;$8(XQ{64B.Cmqq#+< b;Q6h/}CUЇm./uъkصՆiEb5Z) -{JS-*V02Lw}7 ]wWF+*LH{Ҽ_n8_>v\"2ѱ}d)h4(3-+1!! -FjY$m#-j΄yw%SL1:9fqo BYe gܜs -~a0uOH۷"a1# _RhORoO>oQ\-+-y`*G<zEhRK%hF.CeƢ8w3ʽN/m#<)QY+9'TjGz^ 43V66;mB_a/>+>qgG|HϢ=ϐhk -RIsCFA kb`NJQҼ~x1X ]Crx)avkgO›Y*t]H13}X$U@`zSU_{Us7j -r۽d3$IdO \ No newline at end of file Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/objects/pack/pack-7934b6324dce6cb823ca7706b7020a993bddd79a.idx and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/objects/pack/pack-7934b6324dce6cb823ca7706b7020a993bddd79a.idx differ Binary files /tmp/AlvkemA8AY/sogo-2.1.0/.git/objects/pack/pack-7934b6324dce6cb823ca7706b7020a993bddd79a.pack and /tmp/pfuJPUM0kK/sogo-2.1.0/.git/objects/pack/pack-7934b6324dce6cb823ca7706b7020a993bddd79a.pack differ diff -Nru sogo-2.1.0/.git/packed-refs sogo-2.1.0/.git/packed-refs --- sogo-2.1.0/.git/packed-refs 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/.git/packed-refs 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# pack-refs with: peeled fully-peeled -6e30f5845eef5684b884e7f880daafca38385cf2 refs/remotes/origin/master diff -Nru sogo-2.1.0/.git/refs/heads/master sogo-2.1.0/.git/refs/heads/master --- sogo-2.1.0/.git/refs/heads/master 2013-10-22 16:36:34.000000000 +0000 +++ sogo-2.1.0/.git/refs/heads/master 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -230a3ca11d56987f8421a9627d14fa1fa3881a85 diff -Nru sogo-2.1.0/.git/refs/remotes/origin/HEAD sogo-2.1.0/.git/refs/remotes/origin/HEAD --- sogo-2.1.0/.git/refs/remotes/origin/HEAD 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/.git/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -ref: refs/remotes/origin/master diff -Nru sogo-2.1.0/.git/refs/remotes/origin/master sogo-2.1.0/.git/refs/remotes/origin/master --- sogo-2.1.0/.git/refs/remotes/origin/master 2013-10-22 16:36:40.000000000 +0000 +++ sogo-2.1.0/.git/refs/remotes/origin/master 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -230a3ca11d56987f8421a9627d14fa1fa3881a85 diff -Nru sogo-2.1.0/Apache/SOGo-apple-ab.conf sogo-2.1.0/Apache/SOGo-apple-ab.conf --- sogo-2.1.0/Apache/SOGo-apple-ab.conf 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/Apache/SOGo-apple-ab.conf 2013-11-06 10:27:03.000000000 +0000 @@ -1,4 +1,52 @@ -# use *:8843 for SSL +# +# +# Keep only one of those vhost definition, comment out the other one +# +# + +# for https +# don't forget to add a Listen parameter for port 8843: +# Listen 8843 + + ServerName YOUR.SERVER.NAME + + SSLEngine on + + SSLProtocol -ALL +SSLv3 +TLSv1 + SSLHonorCipherOrder On + SSLCipherSuite HIGH:MEDIUM:!ADH:!aNULL:!eNULL:!NULL + SSLCertificateFile /path/to/your/cert/cert.pem + SSLCertificateChainFile /path/to/your/cert/cert-chain-file.pem + SSLCertificateKeyFile /path/to/your/key/file.key + + RewriteEngine Off + ProxyRequests Off + SetEnv proxy-nokeepalive 1 + ProxyPreserveHost On + ProxyPassInterpolateEnv On + ProxyPass /principals http://127.0.0.1:20000/SOGo/dav/ interpolate + ProxyPass /SOGo http://127.0.0.1:20000/SOGo interpolate + ProxyPass / http://127.0.0.1:20000/SOGo/dav/ interpolate + + Order allow,deny + Allow from all + + + + RequestHeader set "x-webobjects-server-port" "8843" + RequestHeader set "x-webobjects-server-name" "CHANGETHIS:8843" + RequestHeader set "x-webobjects-server-url" "http://CHANGETHIS:8843" + RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0" + AddDefaultCharset UTF-8 + + + ErrorLog /var/log/apache2/ab-error.log + CustomLog /var/log/apache2/ab-access.log combined + + +# plain http +# Same here, don't forget to add a Listen parameter for port 8800: +# Listen 8800 RewriteEngine Off ProxyRequests Off diff -Nru sogo-2.1.0/SOPE/GDLContentStore/EOQualifier+GCS.m sogo-2.1.0/SOPE/GDLContentStore/EOQualifier+GCS.m --- sogo-2.1.0/SOPE/GDLContentStore/EOQualifier+GCS.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SOPE/GDLContentStore/EOQualifier+GCS.m 2013-11-06 10:27:03.000000000 +0000 @@ -27,7 +27,7 @@ #import "EOQualifier+GCS.h" -#if __GNU_LIBOBJC__ >= 20100911 +#if (defined(__GNU_LIBOBJC__) && (__GNU_LIBOBJC__ >= 20100911)) || defined(APPLE_RUNTIME) || defined(__GNUSTEP_RUNTIME__) # define sel_eq(__A__,__B__) sel_isEqual(__A__,__B__) #endif diff -Nru sogo-2.1.0/SOPE/GDLContentStore/GCSFolder.m sogo-2.1.0/SOPE/GDLContentStore/GCSFolder.m --- sogo-2.1.0/SOPE/GDLContentStore/GCSFolder.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SOPE/GDLContentStore/GCSFolder.m 2013-11-06 10:27:03.000000000 +0000 @@ -44,7 +44,7 @@ #import "EOQualifier+GCS.h" #import "GCSStringFormatter.h" -#if __GNU_LIBOBJC__ >= 20100911 +#if (defined(__GNU_LIBOBJC__) && (__GNU_LIBOBJC__ >= 20100911)) || defined(APPLE_RUNTIME) || defined(__GNUSTEP_RUNTIME__) # define sel_eq(__A__,__B__) sel_isEqual(__A__,__B__) #endif diff -Nru sogo-2.1.0/SoObjects/Appointments/iCalEvent+SOGo.m sogo-2.1.0/SoObjects/Appointments/iCalEvent+SOGo.m --- sogo-2.1.0/SoObjects/Appointments/iCalEvent+SOGo.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/Appointments/iCalEvent+SOGo.m 2013-11-06 10:27:03.000000000 +0000 @@ -64,6 +64,9 @@ return isStillRelevent; } +// +// +// - (NSMutableDictionary *) quickRecord { NSMutableDictionary *row; @@ -88,7 +91,15 @@ title = [self summary]; if (![title isNotNull]) title = @""; + + if ([title length] > 1000) + title = [title substringToIndex: 1000]; + location = [self location]; + + if ([location length] > 255) + location = [location substringToIndex: 255]; + sequence = [self sequence]; accessClass = [self symbolicAccessClass]; isAllDay = [self isAllDay]; diff -Nru sogo-2.1.0/SoObjects/Mailer/GNUmakefile sogo-2.1.0/SoObjects/Mailer/GNUmakefile --- sogo-2.1.0/SoObjects/Mailer/GNUmakefile 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/Mailer/GNUmakefile 2013-11-06 10:27:03.000000000 +0000 @@ -92,6 +92,7 @@ ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/ +ADDITIONAL_INCLUDE_DIRS += $(shell xml2-config --cflags) ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/ -include GNUmakefile.preamble diff -Nru sogo-2.1.0/SoObjects/Mailer/NSString+Mail.h sogo-2.1.0/SoObjects/Mailer/NSString+Mail.h --- sogo-2.1.0/SoObjects/Mailer/NSString+Mail.h 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/Mailer/NSString+Mail.h 2013-11-06 10:27:03.000000000 +0000 @@ -1,8 +1,6 @@ /* NSString+Mail.h - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff -Nru sogo-2.1.0/SoObjects/Mailer/NSString+Mail.m sogo-2.1.0/SoObjects/Mailer/NSString+Mail.m --- sogo-2.1.0/SoObjects/Mailer/NSString+Mail.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/Mailer/NSString+Mail.m 2013-11-06 10:27:03.000000000 +0000 @@ -1,8 +1,6 @@ /* NSString+Mail.m - this file is part of SOGo * - * Copyright (C) 2008 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2008-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,10 +31,12 @@ #import #import +#include + #import "NSString+Mail.h" #import "NSData+Mail.h" -#if 1 +#if 0 #define showWhoWeAre() \ [self logWithFormat: @"invoked '%@'", NSStringFromSelector (_cmd)] #else @@ -97,6 +97,11 @@ return self; } +- (xmlCharEncoding) contentEncoding +{ + return XML_CHAR_ENCODING_UTF8; +} + - (void) dealloc { [ignoreContentTags release]; @@ -234,11 +239,12 @@ } - (void) characters: (unichar *) characters - length: (int) length + length: (NSUInteger) length { if (!ignoreContent) - [result appendString: [NSString stringWithCharacters: characters - length: length]]; + { + [result appendString: [NSString stringWithCharacters: characters length: length]]; + } } - (void) ignorableWhitespace: (unichar *) whitespaces @@ -339,14 +345,17 @@ - (NSString *) htmlToText { - id parser; _SOGoHTMLToTextContentHandler *handler; + id parser; + NSData *d; parser = [[SaxXMLReaderFactory standardXMLReaderFactory] createXMLReaderForMimeType: @"text/html"]; handler = [_SOGoHTMLToTextContentHandler htmlToTextContentHandler]; [parser setContentHandler: handler]; - [parser parseFromSource: self]; + + d = [self dataUsingEncoding: NSUTF8StringEncoding]; + [parser parseFromSource: d]; return [handler result]; } diff -Nru sogo-2.1.0/SoObjects/Mailer/SOGoMailFolder.m sogo-2.1.0/SoObjects/Mailer/SOGoMailFolder.m --- sogo-2.1.0/SoObjects/Mailer/SOGoMailFolder.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/Mailer/SOGoMailFolder.m 2013-11-06 10:27:03.000000000 +0000 @@ -1179,7 +1179,7 @@ stringByAppendingString: [uid substringFromIndex: 1]]; else if ([[[context activeUser] domainDefaults] forceExternalLoginWithEmail]) { - return [[[context activeUser] primaryIdentity] objectForKey: @"email"]; + return [[[SOGoUser userWithLogin: uid] primaryIdentity] objectForKey: @"email"]; } else return uid; diff -Nru sogo-2.1.0/SoObjects/SOGo/LDAPSource.h sogo-2.1.0/SoObjects/SOGo/LDAPSource.h --- sogo-2.1.0/SoObjects/SOGo/LDAPSource.h 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/SOGo/LDAPSource.h 2013-11-06 10:27:03.000000000 +0000 @@ -1,10 +1,6 @@ /* LDAPSource.h - this file is part of SOGo * - * Copyright (C) 2007-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Ludovic Marcotte - * Francis Lachapelle + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -125,8 +121,6 @@ - (NGLdapEntry *) lookupGroupEntryByUID: (NSString *) theUID; - (NGLdapEntry *) lookupGroupEntryByEmail: (NSString *) theEmail; -- (NGLdapEntry *) lookupGroupEntryByAttribute: (NSString *) theAttribute - andValue: (NSString *) theValue; @end diff -Nru sogo-2.1.0/SoObjects/SOGo/LDAPSource.m sogo-2.1.0/SoObjects/SOGo/LDAPSource.m --- sogo-2.1.0/SoObjects/SOGo/LDAPSource.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/SoObjects/SOGo/LDAPSource.m 2013-11-06 10:27:03.000000000 +0000 @@ -1,10 +1,6 @@ /* LDAPSource.m - this file is part of SOGo * - * Copyright (C) 2007-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Ludovic Marcotte - * Francis Lachapelle + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1245,40 +1241,31 @@ return [_dnCache objectForKey: theLogin]; } -- (NGLdapEntry *) lookupGroupEntryByUID: (NSString *) theUID -{ - return [self lookupGroupEntryByAttribute: UIDField - andValue: theUID]; -} - -- (NGLdapEntry *) lookupGroupEntryByEmail: (NSString *) theEmail -{ -#warning We should support MailFieldNames - return [self lookupGroupEntryByAttribute: @"mail" - andValue: theEmail]; -} - -// This method should accept multiple attributes -- (NGLdapEntry *) lookupGroupEntryByAttribute: (NSString *) theAttribute - andValue: (NSString *) theValue +- (NGLdapEntry *) _lookupGroupEntryByAttributes: (NSArray *) theAttributes + andValue: (NSString *) theValue { EOQualifier *qualifier; - NSString *s; NGLdapEntry *ldapEntry; - - if ([theValue length] > 0) + NSString *s; + + if ([theValue length] > 0 && [theAttributes count] > 0) { - s = [NSString stringWithFormat: @"(%@='%@')", - theAttribute, SafeLDAPCriteria(theValue)]; + if ([theAttributes count] == 1) + { + s = [NSString stringWithFormat: @"(%@='%@')", + [theAttributes lastObject], SafeLDAPCriteria(theValue)]; + + } + else + { + NSString *fieldFormat; + + fieldFormat = [NSString stringWithFormat: @"(%%@='%@')", SafeLDAPCriteria(theValue)]; + s = [[theAttributes stringsWithFormat: fieldFormat] + componentsJoinedByString: @" OR "]; + } + qualifier = [EOQualifier qualifierWithQualifierFormat: s]; - - // We look for additional attributes - the ones related to group - // membership - // attributes = [NSMutableArray arrayWithArray: [self _searchAttributes]]; - // [attributes addObject: @"member"]; - // [attributes addObject: @"uniqueMember"]; - // [attributes addObject: @"memberUid"]; - // [attributes addObject: @"memberOf"]; ldapEntry = [self _lookupLDAPEntry: qualifier]; } else @@ -1287,6 +1274,18 @@ return ldapEntry; } +- (NGLdapEntry *) lookupGroupEntryByUID: (NSString *) theUID +{ + return [self _lookupGroupEntryByAttributes: [NSArray arrayWithObject: UIDField] + andValue: theUID]; +} + +- (NGLdapEntry *) lookupGroupEntryByEmail: (NSString *) theEmail +{ + return [self _lookupGroupEntryByAttributes: mailFields + andValue: theEmail]; +} + - (void) setSourceID: (NSString *) newSourceID { ASSIGN (sourceID, newSourceID); diff -Nru sogo-2.1.0/UI/Common/UIxParentFolderActions.m sogo-2.1.0/UI/Common/UIxParentFolderActions.m --- sogo-2.1.0/UI/Common/UIxParentFolderActions.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/UI/Common/UIxParentFolderActions.m 2013-11-06 10:27:03.000000000 +0000 @@ -40,6 +40,8 @@ NSString *name, *nameInContainer; name = [[context request] formValueForKey: @"name"]; + nameInContainer = nil; + if ([name length] > 0) { if (![[self clientObject] hasLocalSubFolderNamed: name]) diff -Nru sogo-2.1.0/UI/MailPartViewers/UIxMailPartHTMLViewer.m sogo-2.1.0/UI/MailPartViewers/UIxMailPartHTMLViewer.m --- sogo-2.1.0/UI/MailPartViewers/UIxMailPartHTMLViewer.m 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/UI/MailPartViewers/UIxMailPartHTMLViewer.m 2013-11-06 10:27:03.000000000 +0000 @@ -262,7 +262,7 @@ buf = malloc((j+1) * sizeof(char)); memset (buf, 0, j+1); memcpy (buf, bytes, j); - found_tag = [NSString stringWithCString: buf encoding: NSASCIIStringEncoding]; + found_tag = [NSString stringWithCString: buf encoding: NSUTF8StringEncoding]; tags = [VoidTags objectEnumerator]; tag = [tags nextObject]; @@ -562,6 +562,39 @@ && ![value hasPrefix: @"mailto:"] && ![value hasPrefix: @"#"]); } + else if ( + // Mouse Events + [name isEqualToString: @"onclick"] || + [name isEqualToString: @"ondblclick"] || + [name isEqualToString: @"onmousedown"] || + [name isEqualToString: @"onmousemove"] || + [name isEqualToString: @"onmouseout"] || + [name isEqualToString: @"onmouseup"] || + [name isEqualToString: @"onmouseover"] || + + // Keyboard Events + [name isEqualToString: @"onkeydown"] || + [name isEqualToString: @"onkeypress"] || + [name isEqualToString: @"onkeyup"] || + + // Frame/Object Events + [name isEqualToString: @"onabort"] || + [name isEqualToString: @"onerror"] || + [name isEqualToString: @"onload"] || + [name isEqualToString: @"onresize"] || + [name isEqualToString: @"onscroll"] || + [name isEqualToString: @"onunload"] || + + // Form Events + [name isEqualToString: @"onblur"] || + [name isEqualToString: @"onchange"] || + [name isEqualToString: @"onfocus"] || + [name isEqualToString: @"onreset"] || + [name isEqualToString: @"onselect"] || + [name isEqualToString: @"onsubmit"]) + { + skipAttribute = YES; + } else value = [_attributes valueAtIndex: count]; if (!skipAttribute) diff -Nru sogo-2.1.0/debian/changelog sogo-2.1.0/debian/changelog --- sogo-2.1.0/debian/changelog 2013-10-22 17:04:47.000000000 +0000 +++ sogo-2.1.0/debian/changelog 2013-11-06 10:27:03.000000000 +0000 @@ -1,8 +1,26 @@ +sogo (2.1.0-zentyal6) precise; urgency=low + + * Disable sogo daemon by default + + -- José A. Calvo Wed, 06 Nov 2013 11:09:32 +0100 + +sogo (2.1.0-zentyal5) precise; urgency=low + + * Added WOxElemBuilders + + -- José A. Calvo Tue, 05 Nov 2013 17:30:35 +0100 + +sogo (2.1.0-zentyal4) precise; urgency=low + + * New upstream release + + -- José A. Calvo Tue, 05 Nov 2013 02:08:14 +0100 + sogo (2.1.0-zentyal3) precise; urgency=low - * Reupload without orig file. + * Include SOGo webui and daemon - -- Carlos Perelló Marín Tue, 22 Oct 2013 19:04:42 +0200 + -- José A. Calvo Mon, 04 Nov 2013 16:16:51 +0100 sogo (2.1.0-zentyal2) precise; urgency=low diff -Nru sogo-2.1.0/debian/rules sogo-2.1.0/debian/rules --- sogo-2.1.0/debian/rules 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/debian/rules 2013-11-06 10:27:03.000000000 +0000 @@ -13,7 +13,7 @@ config.make: configure dh_testdir - ./configure --prefix=$(GNUSTEP_SYSTEM_ROOT) --disable-webui --disable-daemon + ./configure --prefix=$(GNUSTEP_SYSTEM_ROOT) #Architecture build: build-arch @@ -85,7 +85,7 @@ binary-arch: build-arch install-arch dh_testdir dh_testroot -# dh_installinit -R + dh_installinit -R dh_installcron dh_installchangelogs ChangeLog dh_installdocs diff -Nru sogo-2.1.0/debian/sogo.install sogo-2.1.0/debian/sogo.install --- sogo-2.1.0/debian/sogo.install 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/debian/sogo.install 2013-11-06 10:27:03.000000000 +0000 @@ -8,6 +8,9 @@ usr/lib/GNUstep/OCSTypeModels/* usr/lib/GNUstep/SaxDrivers-4.9/* usr/lib/GNUstep/SaxMappings/* +usr/lib/GNUstep/WOxElemBuilders-4.9/* usr/lib/GNUstep/SOGo/*.SOGo +usr/lib/GNUstep/SOGo/Templates +usr/lib/GNUstep/SOGo/WebServerResources usr/lib/lib*.so.* usr/share/lintian/* diff -Nru sogo-2.1.0/debian/sogo.postinst sogo-2.1.0/debian/sogo.postinst --- sogo-2.1.0/debian/sogo.postinst 2013-10-22 16:18:05.000000000 +0000 +++ sogo-2.1.0/debian/sogo.postinst 2013-11-06 10:27:03.000000000 +0000 @@ -39,6 +39,8 @@ ;; esac +update-rc.d sogo disable || true + #DEBHELPER# exit 0