Blame src/cmd/ksh93/tests/functions.sh

Packit Service a8c26c
########################################################################
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#               This software is part of the ast package               #
Packit Service a8c26c
#          Copyright (c) 1982-2012 AT&T Intellectual Property          #
Packit Service a8c26c
#                      and is licensed under the                       #
Packit Service a8c26c
#                 Eclipse Public License, Version 1.0                  #
Packit Service a8c26c
#                    by AT&T Intellectual Property                     #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                A copy of the License is available at                 #
Packit Service a8c26c
#          http://www.eclipse.org/org/documents/epl-v10.html           #
Packit Service a8c26c
#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#              Information and Software Systems Research               #
Packit Service a8c26c
#                            AT&T Research                             #
Packit Service a8c26c
#                           Florham Park NJ                            #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                  David Korn <dgk@research.att.com>                   #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
########################################################################
Packit Service a8c26c
function err_exit
Packit Service a8c26c
{
Packit Service a8c26c
	print -u2 -n "\t"
Packit Service a8c26c
	print -u2 -r ${Command}[$1]: "${@:2}"
Packit Service a8c26c
	let Errors+=1
Packit Service a8c26c
}
Packit Service a8c26c
alias err_exit='err_exit $LINENO'
Packit Service a8c26c
Packit Service a8c26c
integer Errors=0
Packit Service a8c26c
Command=${0##*/}
Packit Service a8c26c
compiled=''
Packit Service a8c26c
read -n4 c < $0 2> /dev/null
Packit Service a8c26c
[[ $c == *$'\ck'* ]] && compiled=1
Packit Service a8c26c
Packit Service a8c26c
ulimit -c 0
Packit Service a8c26c
Packit Service a8c26c
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
Packit Service a8c26c
trap "cd /; rm -rf $tmp" EXIT
Packit Service a8c26c
Packit Service a8c26c
integer foo=33
Packit Service a8c26c
bar=bye
Packit Service a8c26c
# check for global variables and $0
Packit Service a8c26c
function foobar
Packit Service a8c26c
{
Packit Service a8c26c
	case $1 in
Packit Service a8c26c
	1) 	print -r - "$foo" "$bar";;
Packit Service a8c26c
	2)	print -r - "$0";;
Packit Service a8c26c
	3)	typeset foo=foo
Packit Service a8c26c
		integer bar=10
Packit Service a8c26c
	 	print -r - "$foo" "$bar";;
Packit Service a8c26c
	4)	trap 'foo=36' EXIT
Packit Service a8c26c
		typeset foo=20;;
Packit Service a8c26c
	esac
Packit Service a8c26c
}
Packit Service a8c26c
function print
Packit Service a8c26c
{
Packit Service a8c26c
	command print hi
Packit Service a8c26c
}
Packit Service a8c26c
if	[[ $(print) != hi ]]
Packit Service a8c26c
then	err_exit "command print not working inside print function"
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f print
Packit Service a8c26c
Packit Service a8c26c
if	[[ $(foobar 1) != '33 bye' ]]
Packit Service a8c26c
then	err_exit 'global variables not correct'
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	[[ $(foobar 2) != 'foobar' ]]
Packit Service a8c26c
then	err_exit '$0  not correct'
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	[[ $(bar=foo foobar 1) != '33 foo' ]]
Packit Service a8c26c
then	err_exit 'environment override not correct'
Packit Service a8c26c
fi
Packit Service a8c26c
if	[[ $bar == foo ]]
Packit Service a8c26c
then	err_exit 'scoping error'
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	[[ $(foobar 3) != 'foo 10' ]]
Packit Service a8c26c
then	err_exit non-local variables
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
foobar 4
Packit Service a8c26c
if	[[ $foo != 36 ]]
Packit Service a8c26c
then	err_exit EXIT trap in wrong scope
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f foobar || err_exit "cannot unset function foobar"
Packit Service a8c26c
typeset -f foobar>/dev/null  && err_exit "typeset -f has incorrect exit status"
Packit Service a8c26c
Packit Service a8c26c
function foobar
Packit Service a8c26c
{
Packit Service a8c26c
	(return 0)
Packit Service a8c26c
}
Packit Service a8c26c
> $tmp/test1
Packit Service a8c26c
{
Packit Service a8c26c
foobar
Packit Service a8c26c
if	[ -r $tmp/test1 ]
Packit Service a8c26c
then	rm -r $tmp/test1
Packit Service a8c26c
else	err_exit 'return within subshell inside function error'
Packit Service a8c26c
fi
Packit Service a8c26c
}
Packit Service a8c26c
abc() print hi
Packit Service a8c26c
if	[[ $(abc) != hi ]]
Packit Service a8c26c
then	err_exit 'abc() print hi not working'
Packit Service a8c26c
fi
Packit Service a8c26c
( unset -f abc )
Packit Service a8c26c
if	[[ $(abc 2>/dev/null) != hi ]]
Packit Service a8c26c
then	err_exit 'abc() print hi not working after subshell unset'
Packit Service a8c26c
fi
Packit Service a8c26c
(
Packit Service a8c26c
	function f
Packit Service a8c26c
	{
Packit Service a8c26c
		exit 1
Packit Service a8c26c
	}
Packit Service a8c26c
	f
Packit Service a8c26c
	err_exit 'exit from function not working'
Packit Service a8c26c
)
Packit Service a8c26c
unset -f foo
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	x=2
Packit Service a8c26c
	(
Packit Service a8c26c
		x=3
Packit Service a8c26c
		cd $tmp
Packit Service a8c26c
		print bar
Packit Service a8c26c
	)
Packit Service a8c26c
	if	[[ $x != 2 ]]
Packit Service a8c26c
	then	err_exit 'value of x not restored after subshell inside function'
Packit Service a8c26c
	fi
Packit Service a8c26c
}
Packit Service a8c26c
x=1
Packit Service a8c26c
dir=$PWD
Packit Service a8c26c
if	[[ $(foo) != bar ]]
Packit Service a8c26c
then	err_exit 'cd inside nested subshell not working'
Packit Service a8c26c
fi
Packit Service a8c26c
if	[[ $PWD != "$dir" ]]
Packit Service a8c26c
then	err_exit 'cd inside nested subshell changes $PWD'
Packit Service a8c26c
fi
Packit Service a8c26c
fun() /bin/echo hello
Packit Service a8c26c
if	[[ $(fun) != hello ]]
Packit Service a8c26c
then	err_exit one line functions not working
Packit Service a8c26c
fi
Packit Service a8c26c
cat > $tmp/script <<-\!
Packit Service a8c26c
	print -r -- "$1"
Packit Service a8c26c
!
Packit Service a8c26c
chmod +x $tmp/script
Packit Service a8c26c
function passargs
Packit Service a8c26c
{
Packit Service a8c26c
	$tmp/script "$@"
Packit Service a8c26c
}
Packit Service a8c26c
if	[[ $(passargs one) != one ]]
Packit Service a8c26c
then	err_exit 'passing args from functions to scripts not working'
Packit Service a8c26c
fi
Packit Service a8c26c
cat > $tmp/script <<-\!
Packit Service a8c26c
	trap 'exit 0' EXIT
Packit Service a8c26c
	function foo
Packit Service a8c26c
	{
Packit Service a8c26c
		/tmp > /dev/null 2>&1
Packit Service a8c26c
	}
Packit Service a8c26c
	foo
Packit Service a8c26c
!
Packit Service a8c26c
if	! $tmp/script
Packit Service a8c26c
then	err_exit 'exit trap incorrectly triggered'
Packit Service a8c26c
fi
Packit Service a8c26c
if	! $SHELL -c $tmp/script
Packit Service a8c26c
then	err_exit 'exit trap incorrectly triggered when invoked with -c'
Packit Service a8c26c
fi
Packit Service a8c26c
$SHELL -c "trap 'rm $tmp/script' EXIT"
Packit Service a8c26c
if	[[ -f $tmp/script ]]
Packit Service a8c26c
then	err_exit 'exit trap not triggered when invoked with -c'
Packit Service a8c26c
fi
Packit Service a8c26c
cat > $tmp/script <<- \EOF
Packit Service a8c26c
	foobar()
Packit Service a8c26c
	{
Packit Service a8c26c
		return
Packit Service a8c26c
	}
Packit Service a8c26c
	shift
Packit Service a8c26c
	foobar
Packit Service a8c26c
	print -r -- "$1"
Packit Service a8c26c
EOF
Packit Service a8c26c
chmod +x $tmp/script
Packit Service a8c26c
if	[[ $( $SHELL $tmp/script arg1 arg2) != arg2 ]]
Packit Service a8c26c
then	err_exit 'arguments not restored by posix functions'
Packit Service a8c26c
fi
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	print hello
Packit Service a8c26c
}
Packit Service a8c26c
(
Packit Service a8c26c
	function foo
Packit Service a8c26c
	{
Packit Service a8c26c
		print bar
Packit Service a8c26c
	}
Packit Service a8c26c
	if [[ $(foo) != bar ]]
Packit Service a8c26c
	then	err_exit 'function definitions inside subshells not working'
Packit Service a8c26c
	fi
Packit Service a8c26c
)
Packit Service a8c26c
if [[ $(foo) != hello ]]
Packit Service a8c26c
then	err_exit 'function definitions inside subshells not restored'
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f foo bar
Packit Service a8c26c
function bar
Packit Service a8c26c
{
Packit Service a8c26c
        print "$y"
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
        typeset x=3
Packit Service a8c26c
        y=$x bar
Packit Service a8c26c
}
Packit Service a8c26c
x=1
Packit Service a8c26c
if	[[ $(foo) != 3 ]]
Packit Service a8c26c
then	err_exit 'variable assignment list not using parent scope'
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f foobar
Packit Service a8c26c
cat > $tmp/foobar <
Packit Service a8c26c
function foobar
Packit Service a8c26c
{
Packit Service a8c26c
	print foo
Packit Service a8c26c
}
Packit Service a8c26c
!
Packit Service a8c26c
chmod +x $tmp/foobar
Packit Service a8c26c
FPATH=$tmp
Packit Service a8c26c
autoload foobar
Packit Service a8c26c
if	[[ $(foobar 2>/dev/null) != foo ]]
Packit Service a8c26c
then	err_exit 'autoload not working'
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f foobar
Packit Service a8c26c
function foobar
Packit Service a8c26c
{
Packit Service a8c26c
	typeset -r x=3
Packit Service a8c26c
	return 0
Packit Service a8c26c
}
Packit Service a8c26c
( foobar ) 2> /dev/null || err_exit "cannot unset readonly variable in function"
Packit Service a8c26c
if	$SHELL -n 2> /dev/null <<-!
Packit Service a8c26c
	abc()
Packit Service a8c26c
	!
Packit Service a8c26c
then	err_exit 'abc() without a function body is not a syntax error'
Packit Service a8c26c
fi
Packit Service a8c26c
function winpath
Packit Service a8c26c
{
Packit Service a8c26c
	usage='q pathname ...'
Packit Service a8c26c
	typeset var format=s
Packit Service a8c26c
	while   getopts  "$usage" var
Packit Service a8c26c
	do      case $var in
Packit Service a8c26c
		q)      format=q;;
Packit Service a8c26c
	        esac
Packit Service a8c26c
	done
Packit Service a8c26c
	print done
Packit Service a8c26c
}
Packit Service a8c26c
if	[[ $( (winpath --man 2>/dev/null); print ok) != ok ]]
Packit Service a8c26c
then	err_exit 'getopts --man in functions not working'
Packit Service a8c26c
fi
Packit Service a8c26c
if	[[ $( (winpath -z 2>/dev/null); print ok) != ok ]]
Packit Service a8c26c
then	err_exit 'getopts with bad option in functions not working'
Packit Service a8c26c
fi
Packit Service a8c26c
unset -f x
Packit Service a8c26c
function x
Packit Service a8c26c
{
Packit Service a8c26c
        print "$@"
Packit Service a8c26c
}
Packit Service a8c26c
typeset -ft x
Packit Service a8c26c
if      [[ $(x x=y 2>/dev/null) != x=y ]]
Packit Service a8c26c
then    err_exit 'name=value pair args not passed to traced functions'
Packit Service a8c26c
fi
Packit Service a8c26c
function bad
Packit Service a8c26c
{
Packit Service a8c26c
	false
Packit Service a8c26c
}
Packit Service a8c26c
trap 'val=false' ERR
Packit Service a8c26c
val=true
Packit Service a8c26c
bad
Packit Service a8c26c
if	[[ $val != false ]]
Packit Service a8c26c
then	err_exit 'set -e not working for functions'
Packit Service a8c26c
fi
Packit Service a8c26c
function bad
Packit Service a8c26c
{
Packit Service a8c26c
	false
Packit Service a8c26c
	return 0
Packit Service a8c26c
}
Packit Service a8c26c
val=true
Packit Service a8c26c
bad
Packit Service a8c26c
if	[[ $val != true ]]
Packit Service a8c26c
then	err_exit 'set -e not disabled for functions'
Packit Service a8c26c
fi
Packit Service a8c26c
bad()
Packit Service a8c26c
{
Packit Service a8c26c
	false
Packit Service a8c26c
	return 0
Packit Service a8c26c
}
Packit Service a8c26c
val=true
Packit Service a8c26c
bad
Packit Service a8c26c
if	[[ $val != false ]]
Packit Service a8c26c
then	err_exit 'set -e not inherited for posix functions'
Packit Service a8c26c
fi
Packit Service a8c26c
trap - ERR
Packit Service a8c26c
Packit Service a8c26c
function myexport
Packit Service a8c26c
{
Packit Service a8c26c
	nameref var=$1
Packit Service a8c26c
	if	(( $# > 1 ))
Packit Service a8c26c
	then	export	$1=$2
Packit Service a8c26c
	fi
Packit Service a8c26c
	if	(( $# > 2 ))
Packit Service a8c26c
	then	print $(myexport "$1" "$3" )
Packit Service a8c26c
		return
Packit Service a8c26c
	fi
Packit Service a8c26c
	typeset val
Packit Service a8c26c
	val=$(export | grep "^$1=")
Packit Service a8c26c
	print ${val#"$1="}
Packit Service a8c26c
}
Packit Service a8c26c
export dgk=base
Packit Service a8c26c
val=$(myexport dgk fun)
Packit Service a8c26c
if	[[ $val != fun ]]
Packit Service a8c26c
then	err_exit "export inside function not working -- expected 'fun', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
Packit Service a8c26c
if	[[ $val != base ]]
Packit Service a8c26c
then	err_exit "export not restored after function call -- expected 'base', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(myexport dgk fun fun2)
Packit Service a8c26c
if	[[ $val != fun2 ]]
Packit Service a8c26c
then	err_exit "export inside function not working with recursive function -- expected 'fun2', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
Packit Service a8c26c
if	[[ $val != base ]]
Packit Service a8c26c
then	err_exit "export not restored after recursive function call -- expected 'base', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(dgk=try3 myexport dgk)
Packit Service a8c26c
if	[[ $val != try3 ]]
Packit Service a8c26c
then	err_exit "name=value not added to export list with function call -- expected 'try3', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(export | sed -e '/^dgk=/!d' -e 's/^dgk=//')
Packit Service a8c26c
if	[[ $val != base ]]
Packit Service a8c26c
then	err_exit "export not restored name=value function call -- expected 'base', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
unset zzz
Packit Service a8c26c
val=$(myexport zzz fun)
Packit Service a8c26c
if	[[ $val != fun ]]
Packit Service a8c26c
then	err_exit "export inside function not working -- expected 'fun', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
val=$(export | sed -e '/^zzz=/!d' -e 's/^zzz=//')
Packit Service a8c26c
if	[[ $val ]]
Packit Service a8c26c
then	err_exit "unset varaible exported after function call -- expected '', got '$val'"
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
unset zzz
Packit Service a8c26c
typeset -u zzz
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	zzz=abc
Packit Service a8c26c
	print $zzz
Packit Service a8c26c
}
Packit Service a8c26c
if	[[ $(foo)$(foo) != ABCABC ]]
Packit Service a8c26c
then	err_exit 'attributes on unset variables not saved/restored'
Packit Service a8c26c
fi
Packit Service a8c26c
function xpd {
Packit Service a8c26c
	typeset i j=$1
Packit Service a8c26c
                for i
Packit Service a8c26c
                        do print i=$i j=$j
Packit Service a8c26c
                        [[ $i == a ]] && xpd b
Packit Service a8c26c
                        done
Packit Service a8c26c
                }
Packit Service a8c26c
if	[[ $(xpd a c) != $'i=a j=a\ni=b j=b\ni=c j=a' ]]
Packit Service a8c26c
then	err_exit 'for loop function optimization error'
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
typeset -A visited
Packit Service a8c26c
integer level=0
Packit Service a8c26c
function closure
Packit Service a8c26c
{
Packit Service a8c26c
	(( $# > 5 )) && return 1
Packit Service a8c26c
	((level < 2)) && ((level++))
Packit Service a8c26c
	typeset tmp r=0
Packit Service a8c26c
	visited[$1]=1
Packit Service a8c26c
Packit Service a8c26c
	for tmp in $level _$level
Packit Service a8c26c
	do
Packit Service a8c26c
		[[ ${visited[$tmp]} == 1 ]] && continue
Packit Service a8c26c
		closure $tmp $* || r=1
Packit Service a8c26c
	done
Packit Service a8c26c
	return $r
Packit Service a8c26c
}
Packit Service a8c26c
closure 0 || err_exit -u2 'for loop function optimization bug2'
Packit Service a8c26c
dir=$tmp/dir
Packit Service a8c26c
mkdir $dir
Packit Service a8c26c
cd $dir || { err_exit "cd $dir failed"; exit 1; }
Packit Service a8c26c
Packit Service a8c26c
(
Packit Service a8c26c
	function a {
Packit Service a8c26c
		print a
Packit Service a8c26c
	}
Packit Service a8c26c
	function b {
Packit Service a8c26c
		print 1
Packit Service a8c26c
		a
Packit Service a8c26c
		print 2
Packit Service a8c26c
	} > /dev/null
Packit Service a8c26c
	typeset -ft a b
Packit Service a8c26c
	PS4=X
Packit Service a8c26c
	b 
Packit Service a8c26c
) > file 2>&1
Packit Service a8c26c
[[ $(
Packit Service a8c26c
rm -f file
Packit Service a8c26c
Packit Service a8c26c
print 'false' > try
Packit Service a8c26c
chmod +x try
Packit Service a8c26c
cat > tst <<- EOF
Packit Service a8c26c
	function ignore
Packit Service a8c26c
	{
Packit Service a8c26c
		./try
Packit Service a8c26c
		return 0
Packit Service a8c26c
	}
Packit Service a8c26c
	trap "print error; exit 1" ERR
Packit Service a8c26c
	ignore
Packit Service a8c26c
EOF
Packit Service a8c26c
if	[[ $($SHELL < tst)  == error ]]
Packit Service a8c26c
then	err_exit 'ERR trap not cleared'
Packit Service a8c26c
fi
Packit Service a8c26c
FPATH=$dir
Packit Service a8c26c
print ': This does nothing' > foobar
Packit Service a8c26c
chmod +x foobar
Packit Service a8c26c
unset -f foobar
Packit Service a8c26c
{ foobar; } 2>/dev/null
Packit Service a8c26c
got=$?
Packit Service a8c26c
exp=126
Packit Service a8c26c
if	[[ $got != $exp ]]
Packit Service a8c26c
then	err_exit "function file without function definition processes wrong error -- expected '$exp', got '$got'"
Packit Service a8c26c
fi
Packit Service a8c26c
print 'set a b c' > dotscript
Packit Service a8c26c
[[ $(PATH=$PATH: $SHELL -c '. dotscript;print $#') == 3 ]] || err_exit 'positional parameters not preserved with . script without arguments'
Packit Service a8c26c
cd ~- || err_exit "cd back failed"
Packit Service a8c26c
function errcheck
Packit Service a8c26c
{
Packit Service a8c26c
	trap 'print ERR; return 1' ERR
Packit Service a8c26c
	false
Packit Service a8c26c
	print ok
Packit Service a8c26c
}
Packit Service a8c26c
err=$(errcheck)
Packit Service a8c26c
[[ $err == ERR ]] || err_exit 'trap on ERR not working in a function'
Packit Service a8c26c
x="$(
Packit Service a8c26c
	function foobar
Packit Service a8c26c
	{
Packit Service a8c26c
		print ok
Packit Service a8c26c
	}
Packit Service a8c26c
	typeset -f foobar
Packit Service a8c26c
)"
Packit Service a8c26c
eval "$x"  || err_exit 'typeset -f generates syntax error'
Packit Service a8c26c
[[ $(foobar) != ok ]] && err_exit 'typeset -f not generating function'
Packit Service a8c26c
unset -f a b c
Packit Service a8c26c
a()
Packit Service a8c26c
{
Packit Service a8c26c
        b
Packit Service a8c26c
        b
Packit Service a8c26c
        print ${.sh.fun}
Packit Service a8c26c
}
Packit Service a8c26c
b() { : ;}
Packit Service a8c26c
[[ $(a) == a ]] || err_exit '.sh.fun not set correctly in a function'
Packit Service a8c26c
print $'a(){\ndate\n}'  | $SHELL 2> /dev/null || err_exit 'parser error in a(){;date;}'
Packit Service a8c26c
cat > $tmp/data1 << '++EOF'
Packit Service a8c26c
     1  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     2  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     3  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     4  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     5  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     6  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     7  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     8  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
     9  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    10  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    11  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    12  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    13  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    14  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    15  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    16  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    17  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    18  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    19  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
    20  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
++EOF
Packit Service a8c26c
cat > $tmp/script << '++EOF'
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
Packit Service a8c26c
f()
Packit Service a8c26c
{
Packit Service a8c26c
cat <<\M
Packit Service a8c26c
++EOF
Packit Service a8c26c
cat $tmp/data1 >> $tmp/script
Packit Service a8c26c
printf 'M\n}\n\nf\n\n' >> $tmp/script
Packit Service a8c26c
$SHELL -c $tmp/script  > $tmp/data2
Packit Service a8c26c
cmp -s $tmp/data[12] || err_exit 'error with long functions'
Packit Service a8c26c
v=1
Packit Service a8c26c
function f
Packit Service a8c26c
{
Packit Service a8c26c
	typeset i
Packit Service a8c26c
	for i in 0 1
Packit Service a8c26c
	do	typeset v
Packit Service a8c26c
		v=$i
Packit Service a8c26c
		[[ $v == $i ]] || return 1
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
f || err_exit "typeset optimization bug"
Packit Service a8c26c
function f
Packit Service a8c26c
{
Packit Service a8c26c
	print -r -- "$foo$bar"
Packit Service a8c26c
}
Packit Service a8c26c
function g
Packit Service a8c26c
{
Packit Service a8c26c
	print -r -- $(bar=bam f)
Packit Service a8c26c
}
Packit Service a8c26c
unset foo bar
Packit Service a8c26c
[[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on'
Packit Service a8c26c
[[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden'
Packit Service a8c26c
unset -f foo
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset line=$1
Packit Service a8c26c
	set +n
Packit Service a8c26c
	while	[[ $line ]]
Packit Service a8c26c
	do	if	[[ ! $varname ]]
Packit Service a8c26c
		then	varname=${line%% *}
Packit Service a8c26c
			line=${line##"$varname"?( )}
Packit Service a8c26c
			[[ $line ]] && continue
Packit Service a8c26c
		else	print ok
Packit Service a8c26c
			return
Packit Service a8c26c
		fi
Packit Service a8c26c
		varname=
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with undefined variable'
Packit Service a8c26c
unset x
Packit Service a8c26c
x=$(
Packit Service a8c26c
	set -e
Packit Service a8c26c
	integer count=0
Packit Service a8c26c
	function err_f
Packit Service a8c26c
	{
Packit Service a8c26c
		if	((count++==3))
Packit Service a8c26c
		then	print failed
Packit Service a8c26c
		else	false
Packit Service a8c26c
		fi
Packit Service a8c26c
	}
Packit Service a8c26c
	trap 'err_f' ERR
Packit Service a8c26c
	false
Packit Service a8c26c
)
Packit Service a8c26c
[[ $x == failed ]] && err_exit 'ERR trap executed multiple times'
Packit Service a8c26c
export environment
Packit Service a8c26c
typeset global
Packit Service a8c26c
function f
Packit Service a8c26c
{
Packit Service a8c26c
	typeset i t local
Packit Service a8c26c
Packit Service a8c26c
	for i
Packit Service a8c26c
	do	case $i in
Packit Service a8c26c
		[-+]*)	set "$@"
Packit Service a8c26c
			continue
Packit Service a8c26c
			;;
Packit Service a8c26c
		local)	local=f
Packit Service a8c26c
			t=$(typeset +f $local)
Packit Service a8c26c
			;;
Packit Service a8c26c
		global)	global=f
Packit Service a8c26c
			t=$(typeset +f $global)
Packit Service a8c26c
			;;
Packit Service a8c26c
		environment)
Packit Service a8c26c
			environment=f
Packit Service a8c26c
			t=$(typeset +f $environment)
Packit Service a8c26c
			;;
Packit Service a8c26c
		literal)t=$(typeset +f f)
Packit Service a8c26c
			;;
Packit Service a8c26c
		positional)
Packit Service a8c26c
			set -- f
Packit Service a8c26c
			t=$(typeset +f $1)
Packit Service a8c26c
			;;
Packit Service a8c26c
		esac
Packit Service a8c26c
		[[ $t ]] || err_exit "typeset +f \$$i failed"
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
f local global environment literal positional
Packit Service a8c26c
$SHELL -c '
Packit Service a8c26c
	print exit 0 > '$tmp'/script
Packit Service a8c26c
	chmod +x '$tmp'/script
Packit Service a8c26c
	unset var
Packit Service a8c26c
	var=( ident=1 )
Packit Service a8c26c
	function fun
Packit Service a8c26c
	{
Packit Service a8c26c
		PATH='$tmp' script
Packit Service a8c26c
	}
Packit Service a8c26c
	fun
Packit Service a8c26c
' || err_exit "compound variable cleanup before script exec failed"
Packit Service a8c26c
( $SHELL << \++EOF++
Packit Service a8c26c
function main
Packit Service a8c26c
{
Packit Service a8c26c
 	typeset key
Packit Service a8c26c
 	typeset -A entry
Packit Service a8c26c
 	entry[a]=( value=aaa )
Packit Service a8c26c
}
Packit Service a8c26c
main
Packit Service a8c26c
++EOF++
Packit Service a8c26c
) 2> /dev/null || err_exit 'function main fails'
Packit Service a8c26c
optind=$OPTIND
Packit Service a8c26c
sub()
Packit Service a8c26c
{
Packit Service a8c26c
        (
Packit Service a8c26c
                OPTIND=1
Packit Service a8c26c
                while getopts :abc OPTION "$@"
Packit Service a8c26c
                do      print OPTIND=$OPTIND
Packit Service a8c26c
                done
Packit Service a8c26c
        )
Packit Service a8c26c
}
Packit Service a8c26c
[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2'
Packit Service a8c26c
[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2 again'
Packit Service a8c26c
[[ $OPTIND == "$optind" ]] || err_exit 'OPTIND should be 1'
Packit Service a8c26c
Packit Service a8c26c
function bar
Packit Service a8c26c
{
Packit Service a8c26c
	[[ -o nounset ]] && err_exit  'nounset option should not be inherited'
Packit Service a8c26c
}
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	set -o nounset
Packit Service a8c26c
	bar
Packit Service a8c26c
}
Packit Service a8c26c
set +o nounset
Packit Service a8c26c
foo
Packit Service a8c26c
function red
Packit Service a8c26c
{
Packit Service a8c26c
	integer -S d=0
Packit Service a8c26c
	printf 'red_one %d\n' d
Packit Service a8c26c
	(( d++ ))
Packit Service a8c26c
	return 0
Packit Service a8c26c
}
Packit Service a8c26c
[[ ${ red } != 'red_one 0' ]] && err_exit 'expected red_one 0'
Packit Service a8c26c
[[ ${ red } != 'red_one 1' ]] && err_exit 'expected red_one 1'
Packit Service a8c26c
xyz=$0
Packit Service a8c26c
function traceback
Packit Service a8c26c
{
Packit Service a8c26c
	integer .level=.sh.level
Packit Service a8c26c
	while((--.level>=0))
Packit Service a8c26c
	do
Packit Service a8c26c
		((.sh.level = .level))
Packit Service a8c26c
		[[ $xyz == "$0" ]] || err_exit "\$xyz=$xyz does not match $0 on level ${.level}"
Packit Service a8c26c
		[[ ${.sh.lineno} == "$1" ]] || err_exit "\${.sh.lineno}=${.sh.lineno} does not match $1 on level ${.level}"
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset xyz=foo
Packit Service a8c26c
	set -- $((LINENO+1))
Packit Service a8c26c
	bar $LINENO "$1"
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
function bar
Packit Service a8c26c
{
Packit Service a8c26c
    	typeset xyz=bar
Packit Service a8c26c
	set -- $((LINENO+2))
Packit Service a8c26c
	trap 'traceback $LINENO' DEBUG
Packit Service a8c26c
	: $LINENO "$1"
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
set -- $((LINENO+1))
Packit Service a8c26c
foo $LINENO
Packit Service a8c26c
function .sh.fun.set
Packit Service a8c26c
{
Packit Service a8c26c
	print -r -- "${.sh.value}"
Packit Service a8c26c
}
Packit Service a8c26c
function abc
Packit Service a8c26c
{
Packit Service a8c26c
	:
Packit Service a8c26c
}
Packit Service a8c26c
def()
Packit Service a8c26c
{
Packit Service a8c26c
	:
Packit Service a8c26c
}
Packit Service a8c26c
[[ $(abc) == abc ]] || err_exit '.sh.fun.set not capturing function name'
Packit Service a8c26c
[[ $(def) == def ]] || err_exit '.sh.fun.set not capturing name()'
Packit Service a8c26c
unset -f .sh.fun.set
Packit Service a8c26c
Packit Service a8c26c
# tests for debug functions
Packit Service a8c26c
basefile=${.sh.file}
Packit Service a8c26c
integer baseline
Packit Service a8c26c
cat > $tmp/debug << \+++
Packit Service a8c26c
	: line 1
Packit Service a8c26c
Packit Service a8c26c
	: line 3
Packit Service a8c26c
+++
Packit Service a8c26c
# Print one line in a call stack
Packit Service a8c26c
function _Dbg_print_frame
Packit Service a8c26c
{
Packit Service a8c26c
	typeset -i pos=$1
Packit Service a8c26c
	typeset fn=$2
Packit Service a8c26c
	typeset filename="$3"
Packit Service a8c26c
	typeset -i line=$4
Packit Service a8c26c
	typeset  arg=$5
Packit Service a8c26c
	shift 5
Packit Service a8c26c
	if	((pos==0))
Packit Service a8c26c
	then	[[ $filename == "$basefile" ]] || err_exit "filename for level 0 is $filename not $basename"
Packit Service a8c26c
		[[ $arg == DEBUG  ]] && ((baseline++))
Packit Service a8c26c
		[[ $line == "$baseline" ]] || err_exit "line number for level 0 is $line not $baseline"
Packit Service a8c26c
	elif	((pos==1))
Packit Service a8c26c
	then	[[ $filename == "$tmp/debug" ]] ||  err_exit "filename for level 1 is $filename not $tmp/debug"
Packit Service a8c26c
		[[ $* == 'foo bar' ]] || err_exit "args are '$*', not 'foo bar'"
Packit Service a8c26c
		[[ $line == $arg ]] || err_exit "line number for level 1 is $line not $arg"
Packit Service a8c26c
	else	err_exit "level should be 0 or 1 but is $pos"
Packit Service a8c26c
	fi
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
function _Dbg_debug_trap_handler
Packit Service a8c26c
{
Packit Service a8c26c
Packit Service a8c26c
	integer .level=.sh.level .max=.sh.level-1
Packit Service a8c26c
	while((--.level>=0))
Packit Service a8c26c
	do
Packit Service a8c26c
		((.sh.level = .level))
Packit Service a8c26c
      		_Dbg_print_frame  "${.level}" "$0" "${.sh.file}" "${.sh.lineno}" "${.sh.command##* }" "$@"
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
((baseline=LINENO+2))
Packit Service a8c26c
trap '_Dbg_debug_trap_handler' DEBUG
Packit Service a8c26c
.  $tmp/debug foo bar
Packit Service a8c26c
trap '' DEBUG
Packit Service a8c26c
Packit Service a8c26c
caller() {
Packit Service a8c26c
  integer .level=.sh.level .max=.sh.level-1
Packit Service a8c26c
  while((--.level>=0))
Packit Service a8c26c
  do
Packit Service a8c26c
      ((.sh.level = .level))
Packit Service a8c26c
      print -r -- "${.sh.lineno}"
Packit Service a8c26c
  done
Packit Service a8c26c
}
Packit Service a8c26c
bar() { caller;}
Packit Service a8c26c
set -- $(bar)
Packit Service a8c26c
[[ $1 == $2 ]] && err_exit ".sh.inline optimization bug"
Packit Service a8c26c
( $SHELL  -c ' function foo { typeset x=$1;print $1;};z=();z=($(foo bar)) ') 2> /dev/null ||  err_exit 'using a function to set an array in a command sub  fails'
Packit Service a8c26c
Packit Service a8c26c
{
Packit Service a8c26c
got=$(
Packit Service a8c26c
s=$(ulimit -s)
Packit Service a8c26c
if	[[ $s == +([[:digit:]]) ]] && (( s < 16384 ))
Packit Service a8c26c
then	ulimit -s 16384 2>/dev/null
Packit Service a8c26c
fi
Packit Service a8c26c
$SHELL << \+++
Packit Service a8c26c
f()
Packit Service a8c26c
{
Packit Service a8c26c
	if	(($1>1))
Packit Service a8c26c
	then	x=$(f $(($1-1))) || exit 1
Packit Service a8c26c
	fi
Packit Service a8c26c
	return 0
Packit Service a8c26c
}
Packit Service a8c26c
f 257 && print ok
Packit Service a8c26c
+++
Packit Service a8c26c
)
Packit Service a8c26c
} 2>/dev/null
Packit Service a8c26c
[[ $got == ok ]] || err_exit 'cannot handle comsub depth > 256 in function'
Packit Service a8c26c
Packit Service a8c26c
tmp1=$tmp/job.1
Packit Service a8c26c
tmp2=$tmp/job.2
Packit Service a8c26c
cat > $tmp1 << +++
Packit Service a8c26c
#! $SHELL
Packit Service a8c26c
print \$\$
Packit Service a8c26c
+++
Packit Service a8c26c
chmod +x $tmp1
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset pid
Packit Service a8c26c
	$tmp1 > $tmp2 & pid=$!
Packit Service a8c26c
	wait $!
Packit Service a8c26c
	[[ $(< $tmp2) == $pid ]] || err_exit 'wrong pid for & job in function'
Packit Service a8c26c
}
Packit Service a8c26c
foo
Packit Service a8c26c
# make sure compiled functions work
Packit Service a8c26c
[[ $(tmp=$tmp $SHELL <<- \++++
Packit Service a8c26c
	cat > $tmp/functions <<- \EOF
Packit Service a8c26c
	 	function bar
Packit Service a8c26c
	 	{
Packit Service a8c26c
	 		print foo
Packit Service a8c26c
	 	}
Packit Service a8c26c
	 	function foobar
Packit Service a8c26c
	 	{
Packit Service a8c26c
	 		bar
Packit Service a8c26c
	 	}
Packit Service a8c26c
	EOF
Packit Service a8c26c
	${SHCOMP:-${SHELL%/*}/shcomp} $tmp/functions > $tmp/foobar
Packit Service a8c26c
	rm -f "$tmp/functions"
Packit Service a8c26c
	chmod +x $tmp/foobar
Packit Service a8c26c
	rm $tmp/!(dir|foobar)
Packit Service a8c26c
	FPATH=$tmp
Packit Service a8c26c
	PATH=$FPATH:$PATH
Packit Service a8c26c
	foobar
Packit Service a8c26c
++++
Packit Service a8c26c
) == foo ]] > /dev/null  || err_exit 'functions compiled with shcomp not working'
Packit Service a8c26c
# tests for compiled . scripts
Packit Service a8c26c
print $'print hello\nprint world' > $tmp/foo
Packit Service a8c26c
${SHCOMP:-${SHELL%/*}/shcomp} $tmp/foo > $tmp/foo.sh
Packit Service a8c26c
val=$(. $tmp/foo.sh)
Packit Service a8c26c
[[ $val ==  $'hello\nworld' ]] || err_exit "processing compiled dot files not working correctly val=$val"
Packit Service a8c26c
# test for functions in shell having side effects.
Packit Service a8c26c
unset -f foo foobar bar
Packit Service a8c26c
cd "$tmp"
Packit Service a8c26c
FPATH=$PWD
Packit Service a8c26c
PATH=$FPATH:$PATH
Packit Service a8c26c
cat > foo <<- \EOF
Packit Service a8c26c
	function bar
Packit Service a8c26c
	{
Packit Service a8c26c
		print foobar
Packit Service a8c26c
	}
Packit Service a8c26c
	function foo
Packit Service a8c26c
	{
Packit Service a8c26c
		bar
Packit Service a8c26c
	}
Packit Service a8c26c
EOF
Packit Service a8c26c
chmod +x foo
Packit Service a8c26c
: $(foo)
Packit Service a8c26c
[[ $(typeset +f) == *foo* ]] &&  err_exit 'function in subshell leaving side effect of function foo'
Packit Service a8c26c
unset -f foo bar
Packit Service a8c26c
:  $(foo)
Packit Service a8c26c
[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effects of function foo after reload'
Packit Service a8c26c
[[ $(typeset +f) == *bar* ]] && err_exit 'function in subshell leaving side effects of function bar after reload'
Packit Service a8c26c
Packit Service a8c26c
unset -f foo
Packit Service a8c26c
typeset -A bar
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset -i bar[$1].x
Packit Service a8c26c
	bar[$1].x=5
Packit Service a8c26c
}
Packit Service a8c26c
foo sub
Packit Service a8c26c
[[ ${!bar[@]} == sub ]] || err_exit 'scoping problem with compound array variables'
Packit Service a8c26c
Packit Service a8c26c
function A
Packit Service a8c26c
{
Packit Service a8c26c
        trap "> /dev/null;print TRAP A" EXIT
Packit Service a8c26c
	# (( stderr )) && print >&2
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
function B
Packit Service a8c26c
{
Packit Service a8c26c
        trap "> /dev/null;print TRAP B" EXIT
Packit Service a8c26c
        A
Packit Service a8c26c
}
Packit Service a8c26c
            
Packit Service a8c26c
x=$(B)      
Packit Service a8c26c
[[ $x == $'TRAP A\nTRAP B' ]] || err_exit "trap from functions in subshells fails got" $x
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset bar=abc
Packit Service a8c26c
	unset bar
Packit Service a8c26c
#	[[ $bar == bam ]] || err_exit 'unsetting local variable does not expose global variable'
Packit Service a8c26c
	[[ $bar ]] && err_exit 'unsetting local variable exposes global variable'
Packit Service a8c26c
}
Packit Service a8c26c
bar=bam
Packit Service a8c26c
foo
Packit Service a8c26c
Packit Service a8c26c
sleep=$(whence -p sleep)
Packit Service a8c26c
function gosleep
Packit Service a8c26c
{
Packit Service a8c26c
	$sleep 4
Packit Service a8c26c
}
Packit Service a8c26c
x=$(
Packit Service a8c26c
	(sleep 2; pid=; ps | grep sleep | read pid extra; [[ $pid ]] && kill -- $pid) &
Packit Service a8c26c
	gosleep 2> /dev/null
Packit Service a8c26c
	print ok
Packit Service a8c26c
)
Packit Service a8c26c
[[ $x == ok ]] || err_exit 'TERM signal sent to last process of function kills the script'
Packit Service a8c26c
Packit Service a8c26c
# verify that $0 does not change with functions defined as fun()
Packit Service a8c26c
func1()
Packit Service a8c26c
{
Packit Service a8c26c
	[[ $0 == "$dol0" ]] || err_exit "\$0 changed in func1() to $0"
Packit Service a8c26c
}
Packit Service a8c26c
function func2
Packit Service a8c26c
{
Packit Service a8c26c
	[[ $0 == func2 ]] || err_exit "\$0 changed in func2() to $0"
Packit Service a8c26c
	dol0=func2
Packit Service a8c26c
	func1
Packit Service a8c26c
}
Packit Service a8c26c
func2
Packit Service a8c26c
Packit Service a8c26c
{ $SHELL <<- \EOF
Packit Service a8c26c
	function foo
Packit Service a8c26c
	{
Packit Service a8c26c
	        typeset rc=0
Packit Service a8c26c
		unset -f foo
Packit Service a8c26c
		return $rc;
Packit Service a8c26c
	}
Packit Service a8c26c
	foo
Packit Service a8c26c
EOF
Packit Service a8c26c
} 2> /dev/null || err_exit  'problem with unset -f  foo within function foo'
Packit Service a8c26c
Packit Service a8c26c
val=$($SHELL 2> /dev/null <<- \EOF
Packit Service a8c26c
	.sh.fun.set() { set -x; }
Packit Service a8c26c
	function f1 { print -n ${.sh.fun}; set -o | grep xtrace;}
Packit Service a8c26c
	function f2 { print -n ${.sh.fun}; set -o | grep xtrace;}
Packit Service a8c26c
	f1
Packit Service a8c26c
	set -o | grep xtrace
Packit Service a8c26c
	f2
Packit Service a8c26c
EOF)
Packit Service a8c26c
[[ $val == f1xtrace*on*off*f2xtrace*on* ]] || err_exit "'.sh.fun.set() { set -x; }' not tracing all functions"
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset opt OPTIND=1 OPTARG hflag=
Packit Service a8c26c
	while getopts hi: opt
Packit Service a8c26c
	do	case $opt in
Packit Service a8c26c
		h)	hflag=1;;
Packit Service a8c26c
	        i)	[[ $OPTARG == foobar ]] || err_exit 'OPTARG should be set to foobar in function foo';;
Packit Service a8c26c
		esac
Packit Service a8c26c
	done
Packit Service a8c26c
	shift $((OPTIND - 1))
Packit Service a8c26c
	(( OPTIND == 4 )) || err_exit "OPTIND is $OPTIND at end of function foo; it should be 4"  
Packit Service a8c26c
	[[ $1 == foo2 ]] || err_exit "\$1 is $1, not foo after getopts in function"
Packit Service a8c26c
}
Packit Service a8c26c
OPTIND=6 OPTARG=xxx
Packit Service a8c26c
foo -h -i foobar foo2
Packit Service a8c26c
[[ $OPTARG == xxx ]] || err_exit 'getopts in function changes global OPTARG'
Packit Service a8c26c
(( OPTIND == 6 )) || err_exit 'getopts in function changes global OPTIND'
Packit Service a8c26c
Packit Service a8c26c
if	[[ ! $compiled ]]
Packit Service a8c26c
then	function foo { getopts --man; }
Packit Service a8c26c
	[[ $(typeset -f foo) == 'function foo { getopts --man; }' ]] || err_exit 'typeset -f not work for function with getopts'
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	let 1
Packit Service a8c26c
	return $1
Packit Service a8c26c
}
Packit Service a8c26c
invals=(135 255 256 267 -1)
Packit Service a8c26c
outvals=(135 255 0 267 255)
Packit Service a8c26c
for ((i=0; i < ${#invals[@]}; i++))
Packit Service a8c26c
do	foo ${invals[i]}
Packit Service a8c26c
	[[ $? == "${outvals[i]}" ]] || err_exit "function exit ${invals[i]} should set \$? to ${outvals[i]}"
Packit Service a8c26c
done
Packit Service a8c26c
Packit Service a8c26c
function foo
Packit Service a8c26c
{
Packit Service a8c26c
	typeset pid
Packit Service a8c26c
	sleep 2 & pid=$!
Packit Service a8c26c
	sleep 1
Packit Service a8c26c
	kill -TERM $pid
Packit Service a8c26c
	wait $pid
Packit Service a8c26c
	rc=$?
Packit Service a8c26c
	return $rc
Packit Service a8c26c
}
Packit Service a8c26c
foo  2> /dev/null
Packit Service a8c26c
rc=$?
Packit Service a8c26c
exp=$((256+$(kill -l TERM) ))
Packit Service a8c26c
[[  $rc == "$exp" ]] || err_exit "expected exitval $exp got $rc"
Packit Service a8c26c
Packit Service a8c26c
exit $((Errors<125?Errors:125))