da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# check for global variables and $0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 3) typeset foo=foo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin integer bar=10
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset foo=20;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction print
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin command print hi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit "command print not working inside print function"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset -f print
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset -f foobar || err_exit "cannot unset function foobar"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypeset -f foobar>/dev/null && err_exit "typeset -f has incorrect exit status"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelse err_exit 'return within subshell inside function error'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin( unset -f abc )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'abc() print hi not working after subshell unset'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin function f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $x != 2 ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then err_exit 'value of x not restored after subshell inside function'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -r -- "$1"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'passing args from functions to scripts not working'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen err_exit 'exit trap incorrectly triggered when invoked with -c'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen err_exit 'exit trap not triggered when invoked with -c'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -r -- "$1"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif [[ $( $SHELL $tmp/script arg1 arg2) != arg2 ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'arguments not restored by posix functions'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then err_exit 'function definitions inside subshells not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'function definitions inside subshells not restored'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset x=3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'variable assignment list not using parent scope'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset -r x=3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin( foobar ) 2> /dev/null || err_exit "cannot unset readonly variable in function"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'abc() without a function body is not a syntax error'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print done
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $( (winpath --man 2>/dev/null); print ok) != ok ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'getopts with bad option in functions not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(x x=y 2>/dev/null) != x=y ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'name=value pair args not passed to traced functions'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $val != false ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $val != true ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $val != false ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'set -e not inherited for posix functions'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin nameref var=$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then export $1=$2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export inside function not working -- expected 'fun', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export not restored after function call -- expected 'base', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export inside function not working with recursive function -- expected 'fun2', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export not restored after recursive function call -- expected 'base', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "name=value not added to export list with function call -- expected 'try3', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export not restored name=value function call -- expected 'base', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "export inside function not working -- expected 'fun', got '$val'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit "unset varaible exported after function call -- expected '', got '$val'"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'attributes on unset variables not saved/restored'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset i j=$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do print i=$i j=$j
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin [[ $i == a ]] && xpd b
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset tmp r=0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin [[ ${visited[$tmp]} == 1 ]] && continue
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinclosure 0 || err_exit -u2 'for loop function optimization bug2'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcd $dir || { err_exit "cd $dir failed"; exit 1; }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -ft a b
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(<file) == *'Xprint 2'* ]] || err_exit 'function trace disabled by function call'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin function ignore
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin trap "print error; exit 1" ERR
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen err_exit "function file without function definition processes wrong error -- expected '$exp', got '$got'"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(PATH=$PATH: $SHELL -c '. dotscript;print $#') == 3 ]] || err_exit 'positional parameters not preserved with . script without arguments'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $err == ERR ]] || err_exit 'trap on ERR not working in a function'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chineval "$x" || err_exit 'typeset -f generates syntax error'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(foobar) != ok ]] && err_exit 'typeset -f not generating function'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset -f a b c
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(a) == a ]] || err_exit '.sh.fun not set correctly in a function'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprint $'a(){\ndate\n}' | $SHELL 2> /dev/null || err_exit 'parser error in a(){;date;}'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 9 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 10 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 11 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 12 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 13 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 14 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 15 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 16 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 17 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 18 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 19 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 20 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcmp -s $tmp/data[12] || err_exit 'error with long functions'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do typeset v
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin [[ $v == $i ]] || return 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset line=$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while [[ $line ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do if [[ ! $varname ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then varname=${line%% *}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin [[ $line ]] && continue
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else print ok
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with undefined variable'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $x == failed ]] && err_exit 'ERR trap executed multiple times'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset i t local
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin local) local=f
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin var=( ident=1 )
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin function fun
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin' || err_exit "compound variable cleanup before script exec failed"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(sub -a) == OPTIND=2 ]] || err_exit 'OPTIND should be 2 again'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $OPTIND == "$optind" ]] || err_exit 'OPTIND should be 1'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ -o nounset ]] && err_exit 'nounset option should not be inherited'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin integer -S d=0
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ red } != 'red_one 0' ]] && err_exit 'expected red_one 0'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${ red } != 'red_one 1' ]] && err_exit 'expected red_one 1'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $xyz == "$0" ]] || err_exit "\$xyz=$xyz does not match $0 on level ${.level}"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ ${.sh.lineno} == "$1" ]] || err_exit "\${.sh.lineno}=${.sh.lineno} does not match $1 on level ${.level}"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(abc) == abc ]] || err_exit '.sh.fun.set not capturing function name'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(def) == def ]] || err_exit '.sh.fun.set not capturing name()'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# tests for debug functions
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# Print one line in a call stack
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -i pos=$1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -i line=$4
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then [[ $filename == "$basefile" ]] || err_exit "filename for level 0 is $filename not $basename"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $line == "$baseline" ]] || err_exit "line number for level 0 is $line not $baseline"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz then [[ $filename == "$tmp/debug" ]] || err_exit "filename for level 1 is $filename not $tmp/debug"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $* == 'foo bar' ]] || err_exit "args are '$*', not 'foo bar'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $line == $arg ]] || err_exit "line number for level 1 is $line not $arg"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin else err_exit "level should be 0 or 1 but is $pos"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin _Dbg_print_frame "${.level}" "$0" "${.sh.file}" "${.sh.lineno}" "${.sh.command##* }" "$@"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $1 == $2 ]] && err_exit ".sh.inline optimization bug"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin( $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'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzif [[ $s == +([[:digit:]]) ]] && (( s < 16384 ))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen ulimit -s 16384 2>/dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzf 257 && print ok
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == ok ]] || err_exit 'cannot handle comsub depth > 256 in function'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $(< $tmp2) == $pid ]] || err_exit 'wrong pid for & job in function'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# make sure compiled functions work
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ${SHCOMP:-${SHELL%/*}/shcomp} $tmp/functions > $tmp/foobar
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz) == foo ]] > /dev/null || err_exit 'functions compiled with shcomp not working'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz# test for functions in shell having side effects.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effect of function foo'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(typeset +f) == *foo* ]] && err_exit 'function in subshell leaving side effects of function foo after reload'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(typeset +f) == *bar* ]] && err_exit 'function in subshell leaving side effects of function bar after reload'
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner typeset -i bar[$1].x
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner[[ ${!bar[@]} == sub ]] || err_exit 'scoping problem with compound array variables'
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner[[ $x == $'TRAP A\nTRAP B' ]] || err_exit "trap from funtions in subshells fails got" $x