text:
package org.owasp.esapi.reference;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;
import org.owasp.esapi.ValidationErrorList;
import org.owasp.esapi.ValidationRule;
import org.owasp.esapi.Validator;
import org.owasp.esapi.errors.IntrusionException;
import org.owasp.esapi.errors.ValidationAvailabilityException;
import org.owasp.esapi.errors.ValidationException;
import org.owasp.esapi.reference.validation.CreditCardValidationRule;
import org.owasp.esapi.reference.validation.DateValidationRule;
import org.owasp.esapi.reference.validation.HTMLValidationRule;
import org.owasp.esapi.reference.validation.IntegerValidationRule;
import org.owasp.esapi.reference.validation.NumberValidationRule;
import org.owasp.esapi.reference.validation.StringValidationRule;

/**
 * Reference implementation of the Validator interface. This implementation
 * relies on the ESAPI Encoder, Java Pattern (regex), Date,
 * and several other classes to provide basic validation functions. This library
 * has a heavy emphasis on whitelist validation and canonicalization.
 *
 * @author Jeff Williams (jeff.williams .at. aspectsecurity.com) Aspect Security
 * @author Jim Manico (jim@manico.net) Manico.net
 *
 * @since June 1, 2007
 * @see org.owasp.esapi.Validator
 */
public class DefaultValidator implements org.owasp.esapi.Validator {
    private static volatile Validator instance = null;

    public static Validator getInstance() {
        if ( instance == null ) {
            synchronized ( Validator.class ) {
                if ( instance == null ) {
                    instance = new DefaultValidator();
                }
            }
        }
        return instance;
    }

	/** A map of validation rules */
	private Map<String, ValidationRule> rules = new HashMap<String, ValidationRule>();

	/** The encoder to use for canonicalization */
	private Encoder encoder = null;

	/** The encoder to use for file system */
	private static Validator fileValidator = null;

	/** Initialize file validator with an appropriate set of codecs */
	static {
		List<String> list = new ArrayList<String>();
		list.add( "HTMLEntityCodec" );
		list.add( "PercentCodec" );
		Encoder fileEncoder = new DefaultEncoder( list );
		fileValidator = new DefaultValidator( fileEncoder );
	}

	/**
	 * Default constructor uses the ESAPI standard encoder for canonicalization.
	 */
	public DefaultValidator() {
	    this.encoder = ESAPI.encoder();
	}

	/**
	 * Construct a new DefaultValidator that will use the specified
	 * Encoder for canonicalization.
     *
     * @param encoder
     */
	public DefaultValidator( Encoder encoder ) {
	    this.encoder = encoder;
	}

	/**
	 * Add a validation rule to the registry using the "type name" of the rule as the key.
	 */
	public void addRule( ValidationRule rule ) {
		rules.put( rule.getTypeName(), rule );
	}

	/**
	 * Get a validation rule from the registry with the "type name" of the rule as the key.
	 */
	public ValidationRule getRule( String name ) {
		return rules.get( name );
	}

	/**
	 * Returns true if data received from browser is valid. Double encoding is treated as an attack. The
	 * default encoder supports html encoding, URL encoding, and javascript escaping. Input is canonicalized
	 * by default before validation.
	 *
	 * @param context A descriptive name for the field to validate. This is used for error facing validation messages and element identification.
	 * @param input The actual user input data to validate.
	 * @param type The regular expression name while maps to the actual regular expression from "ESAPI.properties".
	 * @param maxLength The maximum post-canonicalized String length allowed.
	 * @param allowNull If allowNull is true then a input that is NULL or an empty string will be legal. If allowNull is false then NULL or an empty String will throw a ValidationException.
	 * @return The canonicalized user input.
	 * @throws IntrusionException
	 */
	public boolean isValidInput(String context, String input, String type, int maxLength, boolean allowNull) throws IntrusionException  {
		return isValidInput(context, input, type, maxLength, allowNull, true);
	}

        public boolean isValidInput(String context, String input, String type, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException  {
		return isValidInput(context, input, type, maxLength, allowNull, true, errors);
	}

	public boolean isValidInput(String context, String input, String type, int maxLength, boolean allowNull, boolean canonicalize) throws IntrusionException  {
		try {
			getValidInput( context, input, type, maxLength, allowNull, canonicalize);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        public boolean isValidInput(String context, String input, String type, int maxLength, boolean allowNull, boolean canonicalize, ValidationErrorList errors) throws IntrusionException  {
		try {
			getValidInput( context, input, type, maxLength, allowNull, canonicalize);
			return true;
		} catch( ValidationException e ) {
			errors.addError( context, e );
			return false;
		}
	}

	/**
	 * Validates data received from the browser and returns a safe version.
	 * Double encoding is treated as an attack. The default encoder supports
	 * html encoding, URL encoding, and javascript escaping. Input is
	 * canonicalized by default before validation.
	 *
	 * @param context A descriptive name for the field to validate. This is used for error facing validation messages and element identification.
	 * @param input The actual user input data to validate.
	 * @param type The regular expression name which maps to the actual regular expression from "ESAPI.properties".
	 * @param maxLength The maximum post-canonicalized String length allowed.
	 * @param allowNull If allowNull is true then a input that is NULL or an empty string will be legal. If allowNull is false then NULL or an empty String will throw a ValidationException.
	 * @return The canonicalized user input.
	 * @throws ValidationException
	 * @throws IntrusionException
	 */
	public String getValidInput(String context, String input, String type, int maxLength, boolean allowNull) throws ValidationException {
		return getValidInput(context, input, type, maxLength, allowNull, true);
	}

	/**
	 * Validates data received from the browser and returns a safe version. Only
	 * URL encoding is supported. Double encoding is treated as an attack.
	 *
	 * @param context A descriptive name for the field to validate. This is used for error facing validation messages and element identification.
	 * @param input The actual user input data to validate.
	 * @param type The regular expression name which maps to the actual regular expression in the ESAPI validation configuration file
	 * @param maxLength The maximum String length allowed. If input is canonicalized per the canonicalize argument, then maxLength must be verified after canonicalization
     * @param allowNull If allowNull is true then a input that is NULL or an empty string will be legal. If allowNull is false then NULL or an empty String will throw a ValidationException.
	 * @param canonicalize If canonicalize is true then input will be canonicalized before validation
	 * @return The user input, may be canonicalized if canonicalize argument is true
	 * @throws ValidationException
	 * @throws IntrusionException
	 */
	public String getValidInput(String context, String input, String type, int maxLength, boolean allowNull, boolean canonicalize) throws ValidationException {
		StringValidationRule rvr = new StringValidationRule( type, encoder );
		Pattern p = ESAPI.securityConfiguration().getValidationPattern( type );
		if ( p != null ) {
			rvr.addWhitelistPattern( p );
		} else {
            // Issue 232 - Specify requested type in exception message - CS
			throw new IllegalArgumentException("The selected type [" + type + "] was not set via the ESAPI validation configuration");
		}
		rvr.setMaximumLength(maxLength);
		rvr.setAllowNull(allowNull);
		rvr.setValidateInputAndCanonical(canonicalize);
		return rvr.getValid(context, input);
	}

	/**
	 * Validates data received from the browser and returns a safe version. Only
	 * URL encoding is supported. Double encoding is treated as an attack. Input
	 * is canonicalized by default before validation.
	 *
	 * @param context A descriptive name for the field to validate. This is used for error facing validation messages and element identification.
	 * @param input The actual user input data to validate.
	 * @param type The regular expression name while maps to the actual regular expression from "ESAPI.properties".
	 * @param maxLength The maximum String length allowed. If input is canonicalized per the canonicalize argument, then maxLength must be verified after canonicalization
	 * @param allowNull If allowNull is true then a input that is NULL or an empty string will be legal. If allowNull is false then NULL or an empty String will throw a ValidationException.
	 * @param errors If ValidationException is thrown, then add to error list instead of throwing out to caller
	 * @return The canonicalized user input.
	 * @throws IntrusionException
	 */
	public String getValidInput(String context, String input, String type, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		return getValidInput(context, input, type, maxLength, allowNull, true, errors);
	}

	/**
	 * Validates data received from the browser and returns a safe version. Only
	 * URL encoding is supported. Double encoding is treated as an attack.
	 *
	 * @param context A descriptive name for the field to validate. This is used for error facing validation messages and element identification.
	 * @param input The actual user input data to validate.
	 * @param type The regular expression name while maps to the actual regular expression from "ESAPI.properties".
	 * @param maxLength The maximum post-canonicalized String length allowed
	 * @param allowNull If allowNull is true then a input that is NULL or an empty string will be legal. If allowNull is false then NULL or an empty String will throw a ValidationException.
	 * @param canonicalize If canonicalize is true then input will be canonicalized before validation
	 * @param errors If ValidationException is thrown, then add to error list instead of throwing out to caller
	 * @return The user input, may be canonicalized if canonicalize argument is true
	 * @throws IntrusionException
	 */
	public String getValidInput(String context, String input, String type, int maxLength, boolean allowNull, boolean canonicalize, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidInput(context,  input,  type,  maxLength,  allowNull, canonicalize);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return "";
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidDate(String context, String input, DateFormat format, boolean allowNull) throws IntrusionException {
		try {
			getValidDate( context, input, format, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidDate(String context, String input, DateFormat format, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidDate( context, input, format, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public Date getValidDate(String context, String input, DateFormat format, boolean allowNull) throws ValidationException, IntrusionException {
		DateValidationRule dvr = new DateValidationRule( "SimpleDate", encoder, format);
		dvr.setAllowNull(allowNull);
		return dvr.getValid(context, input);
	}

	/**
	 * {@inheritDoc}
	 */
	public Date getValidDate(String context, String input, DateFormat format, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidDate(context, input, format, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return null
		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidSafeHTML(String context, String input, int maxLength, boolean allowNull) throws IntrusionException {
		try {
			getValidSafeHTML( context, input, maxLength, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidSafeHTML(String context, String input, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidSafeHTML( context, input, maxLength, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * {@inheritDoc}
	 *
	 * This implementation relies on the OWASP AntiSamy project.
	 */
	public String getValidSafeHTML( String context, String input, int maxLength, boolean allowNull ) throws ValidationException, IntrusionException {
		HTMLValidationRule hvr = new HTMLValidationRule( "safehtml", encoder );
		hvr.setMaximumLength(maxLength);
		hvr.setAllowNull(allowNull);
		hvr.setValidateInputAndCanonical(false);
		return hvr.getValid(context, input);
	}

	/**
	 * {@inheritDoc}
	 */
	public String getValidSafeHTML(String context, String input, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidSafeHTML(context, input, maxLength, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return "";
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidCreditCard(String context, String input, boolean allowNull) throws IntrusionException {
		try {
			getValidCreditCard( context, input, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidCreditCard(String context, String input, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidCreditCard( context, input, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}
	/**
	 * {@inheritDoc}
	 */
	public String getValidCreditCard(String context, String input, boolean allowNull) throws ValidationException, IntrusionException {
		CreditCardValidationRule ccvr = new CreditCardValidationRule( "creditcard", encoder );
		ccvr.setAllowNull(allowNull);
		return ccvr.getValid(context, input);
	}

	/**
	 * {@inheritDoc}
	 */
	public String getValidCreditCard(String context, String input, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidCreditCard(context, input, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return "";
	}

	/**
	 * {@inheritDoc}
	 *
	 *
Note: On platforms that support symlinks, this function will fail canonicalization if directorypath
	 * is a symlink. For example, on MacOS X, /etc is actually /private/etc. If you mean to use /etc, use its real
	 * path (/private/etc), not the symlink (/etc).

	 */
	public boolean isValidDirectoryPath(String context, String input, File parent, boolean allowNull) throws IntrusionException {
		try {
			getValidDirectoryPath( context, input, parent, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 *
	 *
Note: On platforms that support symlinks, this function will fail canonicalization if directorypath
	 * is a symlink. For example, on MacOS X, /etc is actually /private/etc. If you mean to use /etc, use its real
	 * path (/private/etc), not the symlink (/etc).

	 */
	public boolean isValidDirectoryPath(String context, String input, File parent, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidDirectoryPath( context, input, parent, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}
	/**
	 * {@inheritDoc}
	 */
	public String getValidDirectoryPath(String context, String input, File parent, boolean allowNull) throws ValidationException, IntrusionException {
		try {
			if (isEmpty(input)) {
				if (allowNull) return null;
       			throw new ValidationException( context + ": Input directory path required", "Input directory path required: context=" + context + ", input=" + input, context );
			}

			File dir = new File( input );

			// check dir exists and parent exists and dir is inside parent
			if ( !dir.exists() ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory, does not exist: context=" + context + ", input=" + input );
			}
			if ( !dir.isDirectory() ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory, not a directory: context=" + context + ", input=" + input );
			}
			if ( !parent.exists() ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory, specified parent does not exist: context=" + context + ", input=" + input + ", parent=" + parent );
			}
			if ( !parent.isDirectory() ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory, specified parent is not a directory: context=" + context + ", input=" + input + ", parent=" + parent );
			}
			if ( !dir.getCanonicalPath().startsWith(parent.getCanonicalPath() ) ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory, not inside specified parent: context=" + context + ", input=" + input + ", parent=" + parent );
			}

			// check canonical form matches input
			String canonicalPath = dir.getCanonicalPath();
			String canonical = fileValidator.getValidInput( context, canonicalPath, "DirectoryName", 255, false);
			if ( !canonical.equals( input ) ) {
				throw new ValidationException( context + ": Invalid directory name", "Invalid directory name does not match the canonical path: context=" + context + ", input=" + input + ", canonical=" + canonical, context );
			}
			return canonical;
		} catch (Exception e) {
			throw new ValidationException( context + ": Invalid directory name", "Failure to validate directory path: context=" + context + ", input=" + input, e, context );
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public String getValidDirectoryPath(String context, String input, File parent, boolean allowNull, ValidationErrorList errors) throws IntrusionException {

		try {
			return getValidDirectoryPath(context, input, parent, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return "";
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidFileName(String context, String input, boolean allowNull) throws IntrusionException {
		return isValidFileName( context, input, ESAPI.securityConfiguration().getAllowedFileExtensions(), allowNull );
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidFileName(String context, String input, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		return isValidFileName( context, input, ESAPI.securityConfiguration().getAllowedFileExtensions(), allowNull, errors );
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidFileName(String context, String input, List<String> allowedExtensions, boolean allowNull) throws IntrusionException {
		try {
			getValidFileName( context, input, allowedExtensions, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidFileName(String context, String input, List<String> allowedExtensions, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidFileName( context, input, allowedExtensions, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}
	/**
	 * {@inheritDoc}
	 */
	public String getValidFileName(String context, String input, List<String> allowedExtensions, boolean allowNull) throws ValidationException, IntrusionException {
		if ((allowedExtensions == null) || (allowedExtensions.isEmpty())) {
			throw new ValidationException( "Internal Error", "getValidFileName called with an empty or null list of allowed Extensions, therefore no files can be uploaded" );
		}

		String canonical = "";
		// detect path manipulation
		try {
			if (isEmpty(input)) {
				if (allowNull) return null;
	   			throw new ValidationException( context + ": Input file name required", "Input required: context=" + context + ", input=" + input, context );
			}

			// do basic validation
	        canonical = new File(input).getCanonicalFile().getName();
	        getValidInput( context, input, "FileName", 255, true );

			File f = new File(canonical);
			String c = f.getCanonicalPath();
			String cpath = c.substring(c.lastIndexOf(File.separator) + 1);

			// the path is valid if the input matches the canonical path
			if (!input.equals(cpath)) {
				throw new ValidationException( context + ": Invalid file name", "Invalid directory name does not match the canonical path: context=" + context + ", input=" + input + ", canonical=" + canonical, context );
			}

		} catch (IOException e) {
			throw new ValidationException( context + ": Invalid file name", "Invalid file name does not exist: context=" + context + ", canonical=" + canonical, e, context );
		}

		// verify extensions
		Iterator<String> i = allowedExtensions.iterator();
		while (i.hasNext()) {
			String ext = i.next();
			if (input.toLowerCase().endsWith(ext.toLowerCase())) {
				return canonical;
			}
		}
		throw new ValidationException( context + ": Invalid file name does not have valid extension ( "+allowedExtensions+")", "Invalid file name does not have valid extension ( "+allowedExtensions+"): context=" + context+", input=" + input, context );
	}

	/**
	 * {@inheritDoc}
	 */
	public String getValidFileName(String context, String input, List<String> allowedParameters, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidFileName(context, input, allowedParameters, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return "";
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidNumber(String context, String input, long minValue, long maxValue, boolean allowNull) throws IntrusionException {
		try {
			getValidNumber(context, input, minValue, maxValue, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidNumber(String context, String input, long minValue, long maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidNumber(context, input, minValue, maxValue, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public Double getValidNumber(String context, String input, long minValue, long maxValue, boolean allowNull) throws ValidationException, IntrusionException {
		Double minDoubleValue = new Double(minValue);
		Double maxDoubleValue = new Double(maxValue);
		return getValidDouble(context, input, minDoubleValue.doubleValue(), maxDoubleValue.doubleValue(), allowNull);
	}

	/**
	 * {@inheritDoc}
	 */
	public Double getValidNumber(String context, String input, long minValue, long maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidNumber(context, input, minValue, maxValue, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidDouble(String context, String input, double minValue, double maxValue, boolean allowNull) throws IntrusionException {
        try {
            getValidDouble( context, input, minValue, maxValue, allowNull );
            return true;
        } catch( Exception e ) {
            return false;
        }
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidDouble(String context, String input, double minValue, double maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
        try {
            getValidDouble( context, input, minValue, maxValue, allowNull );
            return true;
        } catch( ValidationException e ) {
            errors.addError(context, e);
            return false;
        }
	}

	/**
	 * {@inheritDoc}
	 */
	public Double getValidDouble(String context, String input, double minValue, double maxValue, boolean allowNull) throws ValidationException, IntrusionException {
		NumberValidationRule nvr = new NumberValidationRule( "number", encoder, minValue, maxValue );
		nvr.setAllowNull(allowNull);
		return nvr.getValid(context, input);
	}

	/**
	 * {@inheritDoc}
	 */
	public Double getValidDouble(String context, String input, double minValue, double maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidDouble(context, input, minValue, maxValue, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}

		return new Double(Double.NaN);
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidInteger(String context, String input, int minValue, int maxValue, boolean allowNull) throws IntrusionException {
		try {
			getValidInteger( context, input, minValue, maxValue, allowNull);
			return true;
		} catch( ValidationException e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidInteger(String context, String input, int minValue, int maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidInteger( context, input, minValue, maxValue, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public Integer getValidInteger(String context, String input, int minValue, int maxValue, boolean allowNull) throws ValidationException, IntrusionException {
		IntegerValidationRule ivr = new IntegerValidationRule( "number", encoder, minValue, maxValue );
		ivr.setAllowNull(allowNull);
		return ivr.getValid(context, input);
	}

	/**
	 * {@inheritDoc}
	 */
	public Integer getValidInteger(String context, String input, int minValue, int maxValue, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidInteger(context, input, minValue, maxValue, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return original input
		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean isValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull) throws IntrusionException {
		try {
			getValidFileContent( context, input, maxBytes, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 */
	public boolean isValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidFileContent( context, input, maxBytes, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public byte[] getValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull) throws ValidationException, IntrusionException {
		if (isEmpty(input)) {
			if (allowNull) return null;
   			throw new ValidationException( context + ": Input required", "Input required: context=" + context + ", input=" + input, context );
		}

		long esapiMaxBytes = ESAPI.securityConfiguration().getAllowedFileUploadSize();
		if (input.length > esapiMaxBytes ) throw new ValidationException( context + ": Invalid file content can not exceed " + esapiMaxBytes + " bytes", "Exceeded ESAPI max length", context );
		if (input.length > maxBytes ) throw new ValidationException( context + ": Invalid file content can not exceed " + maxBytes + " bytes", "Exceeded maxBytes ( " + input.length + ")", context );

		return input;
	}

	/**
	 * {@inheritDoc}
	 */
	public byte[] getValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidFileContent(context, input, maxBytes, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// return empty byte array on error
		return new byte[0];
	}

	/**
	 * {@inheritDoc}
	 *
	 *
Note: On platforms that support symlinks, this function will fail canonicalization if directorypath
	 * is a symlink. For example, on MacOS X, /etc is actually /private/etc. If you mean to use /etc, use its real
	 * path (/private/etc), not the symlink (/etc).

     */
	public boolean isValidFileUpload(String context, String directorypath, String filename, File parent, byte[] content, int maxBytes, boolean allowNull) throws IntrusionException {
		return( isValidFileName( context, filename, allowNull ) &&
				isValidDirectoryPath( context, directorypath, parent, allowNull ) &&
				isValidFileContent( context, content, maxBytes, allowNull ) );
	}

        /**
	 * {@inheritDoc}
	 *
	 *
Note: On platforms that support symlinks, this function will fail canonicalization if directorypath
	 * is a symlink. For example, on MacOS X, /etc is actually /private/etc. If you mean to use /etc, use its real
	 * path (/private/etc), not the symlink (/etc).

     */
	public boolean isValidFileUpload(String context, String directorypath, String filename, File parent, byte[] content, int maxBytes, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		return( isValidFileName( context, filename, allowNull, errors ) &&
				isValidDirectoryPath( context, directorypath, parent, allowNull, errors ) &&
				isValidFileContent( context, content, maxBytes, allowNull, errors ) );
	}

	/**
	 * {@inheritDoc}
	 */
	public void assertValidFileUpload(String context, String directorypath, String filename, File parent, byte[] content, int maxBytes, List<String> allowedExtensions, boolean allowNull) throws ValidationException, IntrusionException {
		getValidFileName( context, filename, allowedExtensions, allowNull );
		getValidDirectoryPath( context, directorypath, parent, allowNull );
		getValidFileContent( context, content, maxBytes, allowNull );
	}

	/**
	 * {@inheritDoc}
	 */
	public void assertValidFileUpload(String context, String filepath, String filename, File parent, byte[] content, int maxBytes, List<String> allowedExtensions, boolean allowNull, ValidationErrorList errors)
		throws IntrusionException {
		try {
			assertValidFileUpload(context, filepath, filename, parent, content, maxBytes, allowedExtensions, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
	}

	 /**
	 * {@inheritDoc}
	 *
	 * Returns true if input is a valid list item.
	 */
	public boolean isValidListItem(String context, String input, List<String> list) {
		try {
			getValidListItem( context, input, list);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 *
	 * Returns true if input is a valid list item.
	 */
	public boolean isValidListItem(String context, String input, List<String> list, ValidationErrorList errors) {
		try {
			getValidListItem( context, input, list);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * Returns the list item that exactly matches the canonicalized input. Invalid or non-matching input
	 * will generate a descriptive ValidationException, and input that is clearly an attack
	 * will generate a descriptive IntrusionException.
	 */
	public String getValidListItem(String context, String input, List<String> list) throws ValidationException, IntrusionException {
		if (list.contains(input)) return input;
		throw new ValidationException( context + ": Invalid list item", "Invalid list item: context=" + context + ", input=" + input, context );
	}

	/**
	 * ValidationErrorList variant of getValidListItem
     *
     * @param errors
     */
	public String getValidListItem(String context, String input, List<String> list, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidListItem(context, input, list);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return original input
		return input;
	}

	 /**
	 * {@inheritDoc}
     */
	public boolean isValidHTTPRequestParameterSet(String context, HttpServletRequest request, Set<String> requiredNames, Set<String> optionalNames) {
		try {
			assertValidHTTPRequestParameterSet( context, request, requiredNames, optionalNames);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

         /**
	 * {@inheritDoc}
     */
	public boolean isValidHTTPRequestParameterSet(String context, HttpServletRequest request, Set<String> requiredNames, Set<String> optionalNames, ValidationErrorList errors) {
		try {
			assertValidHTTPRequestParameterSet( context, request, requiredNames, optionalNames);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * Validates that the parameters in the current request contain all required parameters and only optional ones in
	 * addition. Invalid input will generate a descriptive ValidationException, and input that is clearly an attack
	 * will generate a descriptive IntrusionException.
	 *
	 * Uses current HTTPRequest
	 */
	public void assertValidHTTPRequestParameterSet(String context, HttpServletRequest request, Set<String> required, Set<String> optional) throws ValidationException, IntrusionException {
		Set<String> actualNames = request.getParameterMap().keySet();

		// verify ALL required parameters are present
		Set<String> missing = new HashSet<String>(required);
		missing.removeAll(actualNames);
		if (missing.size() > 0) {
			throw new ValidationException( context + ": Invalid HTTP request missing parameters", "Invalid HTTP request missing parameters " + missing + ": context=" + context, context );
		}

		// verify ONLY optional + required parameters are present
		Set<String> extra = new HashSet<String>(actualNames);
		extra.removeAll(required);
		extra.removeAll(optional);
		if (extra.size() > 0) {
			throw new ValidationException( context + ": Invalid HTTP request extra parameters " + extra, "Invalid HTTP request extra parameters " + extra + ": context=" + context, context );
		}
	}

	/**
	 * ValidationErrorList variant of assertIsValidHTTPRequestParameterSet
     *
	 * Uses current HTTPRequest saved in ESAPI Authenticator
     * @param errors
     */
	public void assertValidHTTPRequestParameterSet(String context, HttpServletRequest request, Set<String> required, Set<String> optional, ValidationErrorList errors) throws IntrusionException {
		try {
			assertValidHTTPRequestParameterSet(context, request, required, optional);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
	}

	/**
     * {@inheritDoc}
     *
	 * Checks that all bytes are valid ASCII characters (between 33 and 126
	 * inclusive). This implementation does no decoding. http://en.wikipedia.org/wiki/ASCII.
	 */
	public boolean isValidPrintable(String context, char[] input, int maxLength, boolean allowNull) throws IntrusionException {
		try {
			getValidPrintable( context, input, maxLength, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
     * {@inheritDoc}
     *
	 * Checks that all bytes are valid ASCII characters (between 33 and 126
	 * inclusive). This implementation does no decoding. http://en.wikipedia.org/wiki/ASCII.
	 */
	public boolean isValidPrintable(String context, char[] input, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidPrintable( context, input, maxLength, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * Returns canonicalized and validated printable characters as a byte array. Invalid input will generate a descriptive ValidationException, and input that is clearly an attack
	 * will generate a descriptive IntrusionException.
     *
     * @throws IntrusionException
     */
	public char[] getValidPrintable(String context, char[] input, int maxLength, boolean allowNull) throws ValidationException, IntrusionException {
		if (isEmpty(input)) {
			if (allowNull) return null;
   			throw new ValidationException(context + ": Input bytes required", "Input bytes required: HTTP request is null", context );
		}

		if (input.length > maxLength) {
			throw new ValidationException(context + ": Input bytes can not exceed " + maxLength + " bytes", "Input exceeds maximum allowed length of " + maxLength + " by " + (input.length-maxLength) + " bytes: context=" + context + ", input=" + new String( input ), context);
		}

		for (int i = 0; i < input.length; i++) {
			if (input[i] <= 0x20 || input[i] >= 0x7E ) {
				throw new ValidationException(context + ": Invalid input bytes: context=" + context, "Invalid non-ASCII input bytes, context=" + context + ", input=" + new String( input ), context);
			}
		}
		return input;
	}

	/**
	 * ValidationErrorList variant of getValidPrintable
     *
     * @param errors
     */
	public char[] getValidPrintable(String context, char[] input,int maxLength, boolean allowNull, ValidationErrorList errors)
		throws IntrusionException {

		try {
			return getValidPrintable(context, input, maxLength, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return original input
		return input;
	}

	 /**
	 * {@inheritDoc}
	 *
	 * Returns true if input is valid printable ASCII characters (32-126).
	 */
	public boolean isValidPrintable(String context, String input, int maxLength, boolean allowNull) throws IntrusionException {
		try {
			getValidPrintable( context, input, maxLength, allowNull);
			return true;
		} catch( Exception e ) {
			return false;
		}
	}

        /**
	 * {@inheritDoc}
	 *
	 * Returns true if input is valid printable ASCII characters (32-126).
	 */
	public boolean isValidPrintable(String context, String input, int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			getValidPrintable( context, input, maxLength, allowNull);
			return true;
		} catch( ValidationException e ) {
            errors.addError(context, e);
			return false;
		}
	}

	/**
	 * Returns canonicalized and validated printable characters as a String. Invalid input will generate a descriptive ValidationException, and input that is clearly an attack
	 * will generate a descriptive IntrusionException.
     *
     * @throws IntrusionException
     */
	public String getValidPrintable(String context, String input, int maxLength, boolean allowNull) throws ValidationException, IntrusionException {
		try {
    		String canonical = encoder.canonicalize(input);
    		return new String( getValidPrintable( context, canonical.toCharArray(), maxLength, allowNull) );
	    //TODO - changed this to base Exception since we no longer need EncodingException
    	//TODO - this is a bit lame: we need to re-think this function.
		} catch (Exception e) {
	        throw new ValidationException( context + ": Invalid printable input", "Invalid encoding of printable input, context=" + context + ", input=" + input, e, context);
	    }
	}

	/**
	 * ValidationErrorList variant of getValidPrintable
     *
     * @param errors
     */
	public String getValidPrintable(String context, String input,int maxLength, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidPrintable(context, input, maxLength, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return original input
		return input;
	}

	/**
	 * Returns true if input is a valid redirect location.
	 */
	public boolean isValidRedirectLocation(String context, String input, boolean allowNull) throws IntrusionException {
		return ESAPI.validator().isValidInput( context, input, "Redirect", 512, allowNull);
	}

        /**
	 * Returns true if input is a valid redirect location.
	 */
	public boolean isValidRedirectLocation(String context, String input, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		return ESAPI.validator().isValidInput( context, input, "Redirect", 512, allowNull, errors);
	}

	/**
	 * Returns a canonicalized and validated redirect location as a String. Invalid input will generate a descriptive ValidationException, and input that is clearly an attack
	 * will generate a descriptive IntrusionException.
	 */
	public String getValidRedirectLocation(String context, String input, boolean allowNull) throws ValidationException, IntrusionException {
		return ESAPI.validator().getValidInput( context, input, "Redirect", 512, allowNull);
	}

	/**
	 * ValidationErrorList variant of getValidRedirectLocation
     *
     * @param errors
     */
	public String getValidRedirectLocation(String context, String input, boolean allowNull, ValidationErrorList errors) throws IntrusionException {
		try {
			return getValidRedirectLocation(context, input, allowNull);
		} catch (ValidationException e) {
			errors.addError(context, e);
		}
		// error has been added to list, so return original input
		return input;
	}

	/**
     * {@inheritDoc}
     *
	 * This implementation reads until a newline or the specified number of
	 * characters.
     *
     * @param in
     * @param max
     */
	public String safeReadLine(InputStream in, int max) throws ValidationException {
		if (max <= 0) {
			throw new ValidationAvailabilityException( "Invalid input", "Invalid readline. Must read a positive number of bytes from the stream");
		}

		StringBuilder sb = new StringBuilder();
		int count = 0;
		int c;

		try {
			while (true) {
				c = in.read();
				if ( c == -1 ) {
					if (sb.length() == 0) {
						return null;
					}
					break;
				}
				if (c == '\n' || c == '\r') {
					break;
				}
				count++;
				if (count > max) {
					throw new ValidationAvailabilityException( "Invalid input", "Invalid readLine. Read more than maximum characters allowed (" + max + ")");
				}
				sb.append((char) c);
			}
			return sb.toString();
		} catch (IOException e) {
			throw new ValidationAvailabilityException( "Invalid input", "Invalid readLine. Problem reading from input stream", e);
		}
	}

	/**
	 * Helper function to check if a String is empty
	 *
	 * @param input string input value
	 * @return boolean response if input is empty or not
	 */
	private final boolean isEmpty(String input) {
		return (input==null || input.trim().length() == 0);
	}

	/**
	 * Helper function to check if a byte array is empty
	 *
	 * @param input string input value
	 * @return boolean response if input is empty or not
	 */
	private final boolean isEmpty(byte[] input) {
		return (input==null || input.length == 0);
	}

	/**
	 * Helper function to check if a char array is empty
	 *
	 * @param input string input value
	 * @return boolean response if input is empty or not
	 */
	private final boolean isEmpty(char[] input) {
		return (input==null || input.length == 0);
	}
}

redpajama_set_name: RedPajamaGithub


Down's Syndrome Scotland (DSS) is a parent led charity which was established in 1982. They are the only charity in Scotland dedicated solely to supporting people with Down's syndrome and their carers. Their key aim is that through working with families they will help to improve the quality of life of children, young people and adults with Down's syndrome.
Our funding over two years helped support the ABC programme in which a qualified Speech and Language Therapist and trained co-workers delivered communications skills development sessions for children with Down's syndrome and their parents weekly during term time in cities across Scotland, in addition parental workshops were also held.
"The benefits are huge and cannot be over stated. My daughter's speech has improved immensely. Her vocabulary has increased, her speech is clearer, and we are both better at signing. She's recognising words and is able to match a selection of words. She is able to communicate better with those around her and gets less frustrated as she can make herself understood.
I think of all the services that Down Syndrome Scotland provide, this is the one that impacts most significantly and positively on people with Down's Syndrome".


The Remy Ma Nicki Minaj beef has got hip hop fans licking their lips in anticipation of some good diss songs.The history of hip hop is littered with great battles between rappers and The Remy Ma shelter lyrics is going on that path.
Some background info on those of you who don't quite know who she is.
She is a Grammy-nominated rapper from the Bronx, NY who released her first solo album There's Something About Remy: Based on a True Story in 2006. Though you may know her for the hit song "Lean Back" with the group she's a part of, Terror Squad.
The entire song is directed at Nicki, but some lyrics to note: "You was screaming 'Free Remy' when I was upstate doomed /But now that they freed Remy, you don't sing the same tune," and, "How are you on the VMAs acting like you hood? / Way across the stage, talking 'bout 'Miley, what's good?' / That's Hannah Montana, she was always happy / You only fronted on Mariah 'cause Mariah don't carry / Tried to disrespect Taylor 'cause Taylor wasn't Swift enough," among many, many others.
7. And if you pay attention closely, you'll notice that Remy Ma and Nicki Minaj are modeling their diss off one of rap's most infamous beef's: Nas and JAY Z.
Pinkprint, Nicki Minaj's third studio album, is a nod to JAY Z's Blueprint. Remy's diss track is called "sheTHER," a play on the word "Ether" that is consequentially the title of the diss track in which Nas targets JAY Z.


text:
Submitting a Work for Publication
Savant Books and Publications (SBAP) seeks previously unpublished literary works of enduring value with a twist that expand and transform English readers' point-of-view throughout the world. Special interest areas include:
* FICTION ("novellas and novels" - all genres, but especially historical or alternative history novels based on author experience)
* NON-FICTION (memoirs; academic theses and dissertations of note rewritten for the general public; single-author textbooks and workbooks, especially those involving or invoking transformational learning)
Listen to Connie Dunn interview Daniel S. Janik about publishing and Savant Books and Publications at http://publishwithconnie.com/interview-with-daniel-janik/
Aignos Publishing (AP), an imprint of Savant Books and Publications, seeks avant garde, experimental and innovative works that 'push the leading edge' of all genres of fiction and non-fiction." Special interest ares include:
* FICTION (e.g. "screenplay novels," multi-lingual and manga works)
* NON-FICTION (non-traditional works, especially those involving new, contemporary but controversial theories of existence)
SBAP/AP only accept never-before-published, solicited and non-solicited manuscripts, audio works and audio-video works. These may be by both established and previously unpublished authors, recording artists or audio-video producers.
Neither SBAP nor AP require that the submitter be represented by an agent.
SPECIAL NOTE TO AUTHORS, RECORDING ARTISTS,
AUDIO-VIDEO MEDIA CREATORS AND PROSPECTIVE SAVANT STAFF
WITHOUT A U. S. SOCIAL SECURITY NUMBER (SSN)
OR EMPLOYER IDENTIFICATION NUMBER (EIN)
Current taxation laws and regulations require that people or companies that do not have a current U. S. Social Security Number (SSN) or U. S. Employer Identification Number (EIN) obtain a U. S. ITIN (Individual Taxpayer Identification Number) using a Form W-7 [download form and instructions at
www.irs.gov/app/picklist/list/formsInstructions.html
and enter "W-7"]. You will have to fill out the form, provide any required documents and send them directly to the United States Internal Revenue Service (IRS) to obtain an ITIN. To be contracted, you will be required to provide Savant Books and Publications with a current U. S. SSN, EIN or ITIN.
You may also be asked consider the rate of gross royalty tax withholdings. The standard withholding rate for non-U. S. citizens who do not have a U. S. SSN or U. S. EIN is 30% of royalties. The United States, however, may have an established taxation treaty with your country that allows for a lower or even no withholding of taxes. If you wish to claim this lower withholding tax, then you must also fill out a Form W-8BEN [download form and instructions at
and enter "W-8BEN"]. Savant Books and Publications requires a completed Form W-8BEN in order to withhold royalty or contract payments at a lower tax treaty rate.
In addition, if contracted, at the end of each calendar year, you will need to file a U. S. income tax report with the IRS (usually sometime between 1 Jan and 1 April) in order to pay any additional taxes or to receive a partial or full refund of royalty tax withholdings.
In some instances, these tasks can be simple, quick and involve little expense. In others, it can be difficult, time-consuming, and expensive. In some instances, especially in the case of low sales of expensive-to-publish products, even after successfully receiving an ITIN and Form W-8BEN, royalty withholding taxes can end up exceeding net royalties for up to a year to a year and a half, thus delaying receipt of your first net royalty check for that time or even longer.
It is important that you consider the above carefully before submitting a work to Savant Books and Publications or its imprint, Aignos Publishing. Thus far, we are successfully supporting several non-U. S. authors, recording artists/groups, audio-video media creation groups and staff. If you do not have a U. S. SSN or U. S. EIN and are still interested in pursuing publication with Savant Books and Publications, we will make every possible effort to assist you through the above as needed; however, YOU MUST FILL OUT, COMPLETE ALL FORMS, AND PROVIDE ALL REQUIRED DOCUMENTATION DIRECTLY TO THE U. S. IRS. If you do not have a U. S. SSN or U. S. EIN and do not plan to get either, then do not submit a work for publication to Savant Books and Publications or its imprint, Aignos Publications.
Choose one of the four submission categories below for further information on SBAP submissions:
SAVANT MANUSCRIPT
(for a Savant or Aignos book including screenplay novels)
(for Savant's Poetry Anthology)
(for a CD)
A/V FILES
(for a DVD)
Savant Bookstore Honolulu | Savant Distribution
© Savant Books and Publications LLC

redpajama_set_name: RedPajamaCommonCrawl


text:
package liulixiang.criminalintent;

import android.content.Context;
import android.util.Log;

import org.json.JSONException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.UUID;

/**
 * Created by liulixiang on 15/6/19.
 */
public class CrimeLab {
    private static final String TAG = "CrimeLab";
    private static final String FILENAME = "crimes.json";

    private ArrayList<Crime> crimes;
    private CriminalIntentJsonSerializer mSerializer;

    private static CrimeLab crimeLab;
    private Context appContext;

    private CrimeLab(Context appContext){
        this.appContext = appContext;
        mSerializer = new CriminalIntentJsonSerializer(appContext, FILENAME);
        try{
            crimes = mSerializer.loadCrimes();
        } catch (Exception e) {
            crimes = new ArrayList<>();
            Log.e(TAG, "Error loading crimes:", e);
        }
    }

    public static CrimeLab get(Context c) {
        if (crimeLab == null) {
            crimeLab = new CrimeLab(c.getApplicationContext());
        }
        return crimeLab;
    }

    //add crime
    public void addCrime(Crime c){
        crimes.add(c);
    }

    public ArrayList<Crime> getCrimes(){
        return crimes;
    }

    public Crime getCrime(UUID id){
        for(Crime c : crimes){
            if (c.getId().equals(id)){
                return c;
            }
        }
        return null;
    }

    public boolean saveCrimes(){
        try{
            mSerializer.saveCrimes(crimes);
            Log.d(TAG, "crimes saved to file");
            return true;
        } catch (Exception e) {
            Log.e(TAG, "Error saving crimes", e);
            return false;
        }
    }

    public void deleteCrime(Crime c){
        crimes.remove(c);
    }
}


text:
All Press Releases for September 02, 2020
Jerry W. Sanders, PhD, Presented with the Albert Nelson Marquis Lifetime Achievement Award by Marquis Who's Who
Dr. Sanders has been endorsed by Marquis Who's Who as a leader in international peace education
BERKELEY, CA, September 02, 2020 /24-7PressRelease/ -- Marquis Who's Who, the world's premier publisher of biographical profiles, is proud to present Jerry W. Sanders with the Albert Nelson Marquis Lifetime Achievement Award.
An accomplished listee, Dr. Sanders has been noted for achievements, leadership qualities, and the successes he has accrued in the fields of higher education, academic and policy research, and peace advocacy. Dr. Sanders celebrates a long career as an educator in international relations and peace and conflict studies, and author of many titles on the subjects of war and militarism, foreign policy, and world order. As in all Marquis Who's Who biographical volumes, individuals profiled are selected on the basis of current reference value. Factors such as position, noteworthy accomplishments, visibility and prominence in a field are all taken into account during the selection process.
During his tenure as Chair of Peace and Conflict Studies at the University of California, Berkeley Dr. Sanders was a dedicated and innovative leader in international peace education. In partnership with the Universidad del Salvador de Buenos Aires (USAL) he founded and directed Building Peace in the Americas, a bilingual program of cross-cultural dialogue between students and faculty from USAL and Berkeley. A second partnership was launched with the University of Nairobi, Kenya with a focus on Environmental Sustainability and Peacebuilding. Both of these programs were enhanced and informed by a third initiative, the Six Billion Paths to Peace Project in Service Learning, in partnership with the Shinnyo-En Foundation of San Francisco and Tokyo. Dr. Sanders substantially expanded these bilateral models in subsequent years, bringing students from a network of ten leading world universities (the International Alliance of Research Universities), to the United Nations University for Peace (UPEACE) in Costa Rica. Under the rubric Problems Without Passports: Human Security and Peacebuilding in the 21st Century, this program offered academic study of international peace and conflict with UPEACE faculty and graduate students, combined with community service learning opportunities focused on the UN Millennium Development Goals (MDGs).
As an undergraduate at Arizona State University in the 1960s, Dr. Sanders decided to major in sociology after reading The Sociological Imagination and The Power Elite by C. Wright Mills. Following graduation, and newly-married to Mercedes Guerrero, the young couple joined the Peace Corps where they served as community development volunteers in the poverty-stricken zones of Cartagena, Colombia from 1967 to 1969.
After the illuminating experience of Peace Corps, Dr. Sanders pursued the master's degree in sociology at the New School for Social Research in New York with renewed purpose. While attending the New School, he also worked as a Human Rights Specialist in the City of New York Housing Development Administration from 1969-1971. Awarded Danforth and Kent Fellowships to continue his post-MA studies toward a doctoral degree in sociology, Dr. Sanders transferred to the University of California, Berkeley. At Berkeley, following the tradition of Mills, Dr. Sanders honed his focus on systems and structures of power, culminating in his doctoral dissertation on the role of para-institutional elites in shaping the United States foreign policy consensus. The thesis would be revised and expanded into his well-received and highly-acclaimed book Peddlers of Crisis: The Committee on the Present Danger and the Politics of Containment.
Over the next decade Dr. Sanders held several posts in academic and policy circles. In 1980, he was appointed Assistant Professor of Sociology at the University of Hawaii, Hilo where he founded the interdisciplinary program in Peace Studies, and served as Coordinator of the Ground Zero/Nuclear Freeze Education Project. He was also named Associate Editor of Alternatives: A Journal of World Policy and selected as a Research Associate of the World Order Models Project at the Institute of World Order in New York.
In 1982, Dr. Sanders was appointed Senior Fellow at the World Policy Institute in New York where he was a co-founder and managing editor of the World Policy Journal, Peace and World Order Studies consultant to universities on peace curricula, and director of the Security Project, as well as contributor to the World Policy Journal. Dr. Sanders also held the post of Adjunct Associate Professor in International Studies at the City University of New York (CUNY) and, served as a policy analyst with the Cuomo Commission on Trade and Competitiveness, and contributor to the Cuomo Commission Report.
Recruited in 1988 to join the faculty of Peace and Conflict Studies at the University of California, Berkeley, Dr. Sanders returned to academia where he would remain for the next quarter century. He continued in his role as Senior Fellow at the World Policy Institute, served on the Editorial Board of the World Policy Journal, and authored seven book chapters, twenty journal articles, and more than a dozen mass media and popular publication articles on international relations and peace-related issues. In 2009, he was commissioned by the Oxford International Encyclopedia of Peace to write three essay entries on the subjects of Cosmopolitanism as Peace Theory; Globalization; and Pax Americana.
Among his university honors Dr. Sanders was selected as University of California Faculty Fellow to the East-West Seminar on Global Security at Moscow State University, USSR in 1988. Highlighting his many invited speaking engagements, Dr. Sanders was the Gaspar de Portola Lecturer on Conflict and Cooperation in a New World Era at the University of Barcelona, Catalonia, Spain in 1992.
In 2012, after retirement from full-time duties as Chair of Peace and Conflict Studies at the University of California, Berkeley, Dr. Sanders continued to direct the UPEACE/Berkeley partnership on Human Security and Peacebuilding. He was also appointed to the UPEACE International Academic Council, served on the External Review Committee of the University's interdisciplinary graduate curriculum, and contributed to revision of the International Peace Studies Master's Program. Dr. Sanders was appointed Visiting Professor of International Peace Studies at the University for Peace in 2014. He resides today in Berkeley, California with his lifelong partner Mercedes Guerrero Sanders. They have two sons, Che Jeremy and Zachariah Octavio, and five grandchildren.
About Marquis Who's Who®
Since 1899, when A. N. Marquis printed the First Edition of Who's Who in America®, Marquis Who's Who® has chronicled the lives of the most accomplished individuals and innovators from every significant field of endeavor, including politics, business, medicine, law, education, art, religion and entertainment. Today, Who's Who in America® remains an essential biographical source for thousands of researchers, journalists, librarians and executive search firms around the world. Marquis® now publishes many Who's Who titles, including Who's Who in America®, Who's Who in the World®, Who's Who in American Law®, Who's Who in Medicine and Healthcare®, Who's Who in Science and Engineering®, and Who's Who in Asia®. Marquis® publications may be visited at the official Marquis Who's Who® website at www.marquiswhoswho.com.
Marquis Who's Who Ventures LLC


text:
Matt Grace becomes Washington Nationals' first official "opener"; tosses two scoreless against Los Angeles Dodgers...
The first part of Saturday's experiment with Matt Grace as an opener went well, it was all downhill from there though.
By Patrick Reddington@federalbaseball Jul 28, 2019, 12:01am EDT
Share All sharing options for: Matt Grace becomes Washington Nationals' first official "opener"; tosses two scoreless against Los Angeles Dodgers...
Photo by Scott Taetsch/Getty Images
Davey Martinez told reporters after Friday night's game that it would be Joe Ross starting in the second game of the Nationals' three-game set with the Los Angeles Dodgers in D.C. this afternoon.
"Yeah, Joe will start tomorrow," Washington's second-year skipper said.
When the lineup was released on Saturday afternoon, however, it was Matt Grace listed as the Nats' starter, or as the "opener" against the Dodgers, with the Nationals noting in their pregame notes it is the first time the team was officially employing an opener.
Grace, 30, had done it before, started that is, back in August of 2017, when he got the nod from then-Nats' manager Dusty Baker after Max Scherzer was determined to be unable to go on the road in Petco Park.
Grace threw 4 1⁄3 scoreless in that outing, a 7-1 win in which he received no decision, giving up two hits and a walk while he was on the mound.
He did start 58 games in the minors on the way up, but that outing against the Padres was his only start in the majors.
"He's a guy that's done everything that we've asked him to do," Baker said that day.
"You see he started, he's gone long, he's gone middle. He's gone short. Basically keeps the ball in the ballpark. He throws ground balls, he throws strikes, and he's getting better, and so he has pitched his way onto the team and he's doing a great job."
Baker's replacement, Davey Martinez, said he put a lot of thought into the decision to make Grace the opener, thinking about it over the last 5-6 days before talking to Grace and finally deciding to give it a go.
"I just thought if we are ever going to do something like this, looking at their lineup they're very left-handed heavy, it's a perfect opportunity so I thought about using Matt and, I told him, I said 'Hey, go as long as you can go. We'll keep an eye on you,'" Martinez explained.
"And he was all for it, he was excited about it. He's done it before. Actually I looked it up, last time he started he went 4 1/3 innings, shutout, two hits. So hopefully we get him to repeat that performance."
Grace retired all six batters he faced in a 26-pitch performance, as the Nationals jumped out to a 2-0 lead on Clayton Kershaw, then he handed it off to Ross in the top of the third...
Matt Grace's Line: 2.0 IP, 0 H, 0 R, 0 ER, 0 BB, 3 Ks, 26 P, 16 S, 1/2 GO/FO.
Ross gave up a home run in the first at bat of third inning, three runs in the third, one in the sixth, and the Dodgers ended up scoring four runs in the seventh as well.
Ross was charged with seven runs total on the night, six earned, giving up nine hits and two walks while striking out seven batters, and Javy Guerra gave up two runs in 2 1⁄3 innings in a 9-3 loss.
"The first part of the plan was really good," Martinez said after the Nationals second straight loss to the Dodgers and third straight loss overall.
"I wish I could have sent Gracie out for a couple more innings," the manager added, "but he did his job. He was really, really good. Joe came in the game and gave up a home run early, thought he might settle down, and we gave up way too many two-out runs today, so we've got [Stephen] Strasburg tomorrow, so come back tomorrow — bullpen, I think Guerra did a great job after he came in that one inning and gave us the innings we needed. Our bullpen is fresh tomorrow, so let's come back tomorrow and win tomorrow."
Was the experiment with an opener a one-time thing, or a potential solution for a team that is looking for a fifth starter?
"I liked what I saw from Matt," Martinez told reporters, "and he did great. He did it one at a time, and actually was very successful, so for me this is a perfect opportunity because of the way [the Dodgers'] lineup is structured, to do that. Am I going to do it all the time with him?
"I don't know that yet. We'll have to figure out who we play and what kind of lineup they throw out there beforehand and then consider doing it."
Grace said he would be up for it if his manager asked him to do it again?
Trea Turner hits for the cycle for 2nd time, gets a new t-shirt:
LINK: New Breaking T shirt available now. Click RIGHT HERE!!!
"If that's something strategy-wise they see as a good opportunity I'll take the ball when they want to give it to me," the 30-year-old reliever said.
"It doesn't really make a difference to me when they want to use me, that's kind of up to them and their decision-making if they see it's a good opportunity."
Martinez said he ended Grace's outing on Saturday after two innings after talking to the left-hander to see how he felt.
"I said before the [game] it was what he can do for us and I talked to him after he came out the second inning and I told him, I said, 'You need to be totally honest with me right now and he said that he was done, so I said, 'Perfect.' He did a great job."
"I probably could have gone more, but [I was] feeling it a little bit," Grace said.


text:
Soloflight Wins Interactive Media Awards
Aon eSolution's 360° site and The BeltLine: Its Journey for the BeltLine Partnership, both produced by Soloflight, were honored with the Interactive Media Awards' Outstanding Achievement Award.
Created by the Interactive Media Council, Inc., the Interactive Media Awards recognizes excellence in website design and development. The judges stated that both Soloflight entries have "excelled in all areas of our judging criteria and represents a very high standard of planning, execution and overall professionalism." Both 360° for Aon eSolutions and The BeltLine: Its Journey earned more than 450 out of 500 points.
The entries are judged in five categories, design, content, feature functionality, usability, and cross-browser compatibility. The Soloflight entries excelled with scores in the upper 90′s in each of those categories.
» View The BeltLine: Its Journey
Written by soloflight in: Awards | Tags: 360, Aon eSolutions, Interactive Media Awards, Outstanding Achievement Award, The BeltLine Partnership, The BeltLine: Its Journey, winner


text:
Visiting the source of the Nile
Spending a wonderful time at the source of the Nile is one of the most rewarding things that you should not miss out while on safari in Uganda. The encounter takes you the very point where the Nile makes its outflow form the Lake at the submerged Rippon falls that were encountered by John Speke and James Grant while on the second account of the search for the source of the Nile.The location is amazing with the enchanting bird songs and the legendary stories of the Nile that date back to the ancient Roman times. The boat to the source is very rewarding as you approach the gigantic Lake Victoria which Speke described as vast something that was to be proved few years later by Henry Stanley after the Speke's death.
The monument of historical Mahatma Gandhi stands on the shore line justifying the Afro Asian Solidarity that he has advocated for years and his love for liberation of mankind. The Ashes of Mahatma Gandhi were thrown in the majestic Nile River which happens to the longest in the whole world. Encounter the footsteps of John Hannington Speke where he stood on his discovery account of the Nile.
KALAGALA FALLS AND THE WEST BANK:
Kalagala falls is 28km to the north is becoming an alternative tourism hub of the Nile following the construction of Bujagali dam. It has a stunning setting with three major rapids pouring between the riverbanks and two large mid-river islands. The western bank though it is denuded of trees is less developed due to existence of Kalagala Forest Reserve. The Adrift rafting company secured a concession of developing tourism facilities on the site and visitors enjoy a wide range of water sports including jet boating, river surfing, rafting and gentle cruises that offers sights of birds and otters.
Kalagala is a significant cultural site of Buganda and a massive tree beneath which the visiting Kabaka's sat is standing on the promontory above the river while the shrine which is still of great attachment to the traditionists is found with a jumble of massive riverside boulders.
Kalagala falls can be accessed from the western bank of the Nile 3km from Kangulumira town on the rather reserved Kayunga road that loops around Mabira forest. Another route can be turning on the road to Kayunga while in Mukono following it for 74km to Kangulumira turning right on a T – junction at Mukalagi.
Attraction at Kalagala
Kalagala Water falls
Kalagala falls is a mighty place to encounter the roaring strength of the falls with their thunderous roar as they pass through nestled black rocks with the water of the Nile in their enormous volumes and force. Encountering the mighty waters of the Nile from 4metres above as they forge their way through impermeable rock boulders to continue to their respective destination is one of the impressive memories you can have while on safari in Uganda.
The spirits tree
The spirits tree lies on the western side after the entrance to the falls and it where the n encounter with the old sprits of Buganda awaits you. The tree has a back cloth with an entrance like structure with two spears appearing besides the entrance and a fire place which is locally known as ekyooto.
The site is of great cultural importance to Buanda traditionists and they regard it as sacred. Shoes have to be removed as a sign of dedication and respect for these ancestral spirits. Traditionists pray for their various wishes to these spirits and the sprits grant them what they prayed for.
The rock trail
The rock trail enables you gain impressive sightseeing opportunities. The trail guides you to approach the wonder rocks moving along impressive short free standing trees on either sides and the its altitudinal rise gives it an advantage for offering rich scenic views of the river flow and the other side of the river do not forgetting small rocks down the river.
The wonder rocks
The wonder rock as the name suggests are splendid curved rocks at Kalagala. Their beauty lures one to spend the whole day at the site. The rocks present themselves in various shapes and sizes overlooking the river. The most interesting of these rocks include the Twin rocks where one rock is in possession of a male like reproductive organ while another one has a female like reproductive organ. The Baganda natives named them Salongo and Nalongo meaning the father and Mother of the twins and are covered with a bark cloth like how human being put on clothing to cover up these parts. A basket is perched in front of them where a sum is deposited before taking a glance at these unique rocks.
The rock tunnel
Following the viewing of Nalongo and Salongo, another impressive experience awaits ahead. The 4 meter trek in the tunnel like structure which is also believed to harbor a range of spirits is very rewarding. A sum is also dropped on the entrance and it is believed that whatever you ask for while inside you deinately receive it in abundance.
There is a magnificent island positioned on the other side of the River when standing on the western bank. The Island is asserted to be a boundary mark between Busoga and Buganda. The feature also offers beautiful scenic views.
MABIRA FOREST RESERVE:
Extending over more than 300km2, the Mabira Forest Reserve which straddles the Kampala – Jinja road about 20km south west of Jinja is primarily composed of moist deciduous forest in which more than 200 tree species have been identified. The forest is interspersed with patches of open grassland while several of the valleys support extensive papyrus swamps. In the colonial era, Mabira was heavily exploited for timber and rubber since over half a million rubber trees named Funtuma Elastica grow there, while its proximity to Kampala and Jinja led to an estimated 1,500 tons of charcoal being extracted annually in the 1960s.
During the civil war of the early 1980s, roughly 25% of the forest was cleared or degraded by subsistence farmers who were evicted in 1988. Since then, much of the degraded forest has recovered through the replanting of indigenous trees and illegal felling has practically ceased.
Mabira Forest is by far the largest remaining stand of indigenous forest in central Uganda not only of immense ecological value but also situated so close to the country's largest cities offering great potential for recreation and tourist development. Certainly, the combination of accessibility, affordable accommodation, and good monkey viewing and lovely walking trails makes it a highly recommended stop over for any traveller with an interest in natural history. Large mammals are relatively scarce today though small population of elephant was present as the 1950s. The red tailed monkey is regularly seen in the vicinity of the camp however grey cheeked Mangabey and blue duiker are quite common. Leopards are reputedly present but unlikely to be seen. More than 200 species of butterfly have been identified in Mabira Forest.
Mabira Forest ranks as one of the most important orthinological sites in Uganda with more than 300 species most of which are forest birds recorded including several rarities. The excellent network of forest trails that emanates from the visitor center can be explored unaccompanied but you will benefit greatly from taking a guide whose knowledge of the bird calls will assist in locating more elusive forest species.
Conspicuous larger birds include the stunning great blue turaco and more familiar African grey parrot, while three forest hornbill species and a variety of colorful sunbirds are often seen around the camp. Mabira is one of the only two places in East Africa where pretty tit hylia has been recorded and this rare bird rare bird is seen here with surprising regularity. It is one of the few places in Uganda where the localized forest wood-hoopoe, African Pitta, purple throated cuckoo-shrike, leaf love, weyn's weaver and Nahan's Francolin are regular. One of the best individual birding sites in Mabira forest is a forest-fringed pond that can be reached by following the Jinja road east for 5km past Najjembe then turning left onto a small dirt road for a few hundred meters.
THE BUSOGA KINGDOM
The Victoria Nile running past Jinja forms the boundary between the Kingdoms of Buganda and Busoga, the latter being the home of the Basoga. The Basoga speak Bantu language very similar to Luganda particularly close to the dialect of the inhabitants of the Ssese Islands though the Basoga claim a different origin from the Baganda and traditionally have less centralized societal settings.
Busoga is a cultural institution that promotes popular participation and unity among the people of Busoga, through cultural and developmental programs for the improved livelihood of the people of Busoga. It strives for a united people of Busoga, who enjoy economic, social and cultural prosperity. It also continues to enhance, revamp and pave the way for an efficient institutional and management system for the Kyabazinga kingship.
Busoga, literally translated to Land of the Soga, is the kingdom of the 11 principalities of the Basoga/Soga (singular Musoga) people. The term Busoga also loosely refers to the area that is generally indigenous to the Basoga. Busoga Kingdom is composed of seven politically organized districts: Kamuli, Iganga, Bugiri, Mayuge, Jinja, and the newly created districts of Kaliro and Busiki. The Busoga area is bounded on the north by the swampy Lake Kyoga, on the west by the Victoria Nile, on the south by Lake Victoria, and on the east by the Mpologoma River, Busoga also includes some islands in Lake Victoria, such as Buvuma Island.
The Busoga Kingdom is ruled by the King with the title His Royal Highness Isebantu Kyabazinga of Busoga where by the title Isebantu is translated as a father of all people who brings all of them together and is their cultural head.
Dating back to the ancient Roman times, the history of Busoga still thrives up to today giving a contemporary person a chance to encounter the legends of the past. The European explorer John Hannington Speke from the Royal Geographical Society stepped at Rippon Falls near Jinja on 28th July 1862 with the intention to ascertain the true source of the Nile. He then followed the mystical river downstream without crossing to Busoga region. However, Speke notes that he was told that Busoga which is the Swahili reference of Busoga was an island. The land which is bound by Lake Kyoga in the north, Victoria Nile in the west, Lake Victoria in the south and Mpologoma River in the east indeed conforms to this ancient reference.
During the 19th Century, Busoga was one of the prominent routes that was followed by various travellers who were making their attempt in Uganda including; John Speke and James Grant, Sir Gerald Portal, F.D Lugard, J.R. Macdonald, and Bishop Tucker and these people noted that the area was had a plenty of food. However in the year 1898–99 and 1900-01 the sleeping sickness epidemic broke out. In the year 1906, the people were told to evacuate the area and regardless of the efforts to clear the area, the epidemic continued up to 1910.
Due to this, the region which had 200,000 people in the 19th Century was unfortunately cleared of population in 10 years and by 1910 the southern region of Busoga was empty. In the years 1920s and 1930s, the survivors of the epidemic started returning to their ancestral land. Unfortunately in 1940 the outbreak again resurfaced in the area and in 1956 a resettlement programme aided by the government began. However things could not flow as usual and the few Basoga returned to their homeland.
Regarding the political history of Busoga Kingdom, the turn was made in the 16th Century with the arrival of the  Baisengobi clan from the more established Kingdom of Bunyoro. The Prince Mukama Namutukula arrived in Busoga following the Bunyoro's expansionist strategy and he trekked across the swamps of Lake Kyoga along with his wife Nawudo and a couple of servants, a dog and arms. They landed at Iyingo in the present day Kamuli District in the north of Busoga.
The Prince produced many children whom at the time of retreating to Bunyoro distributed across the region of Busoga as chiefs something that the colonialist were to find in the late 19th Century and merge into a federation. Prior the 1906, the Busoga could function as a Kingdom like its neighbor Buganda. Before the coming of the British to Uganda, there was no uniting leadership in Busoga. The British colonialists appointed Semei Kakungulu a Muganda man to be the head of the Basoga Lukiiko but without the tittle of a King.
The Basoga could hardly pay allegiance to the Muganda head instead they respected more their traditional hereditary chiefs. The Lukiiko later collapsed but the Basoga had realized the beauty of having one head. The colonialists were grooming Chief Yosia Nadiope, the Gabula of Bugabula to act as the initial permanent Musoga ruler of the Basoga but unfortunately he passed away in 1913 following Malaria sickness and this paved a gap for Chief Ezekeriel Tenywa Wako, the Zibondo of Bulamogi who was finalizing his studies at Kings College Budo and in 1919 he was elected the head of the Basoga Lukiiko by the hereditary chiefs of the Basoga.
The title of isebantu was created in 1918-19 an in 1925 the Ezekiel Tenywa Wako, the Kyabazinga of Busoga joined the Uganda Kings Council which consisted the Omugabe of Ankole, Kabaka of Buganda, Omukama of Toro, Omukama of Bunyoro and the Kyabazinga of Busoga. The Ezekiel Tenywa Wako the Zibondo of Bulamogi was officially installed as the Isebantu Kyabazinga of Busoga something that he maintained until his retirement in 1949 due to old age. By the time of his retirement, the Lukiiko had expanded to include other elected representatives with two from the each of the then 55 Busoga Sub counties.
With the retirement of Owekitibwa E.T. Wako, it was necessary to replace him and thus the Lukiiko resolved that the Isebantu Kyabazinga of Busoga will always be elected form the Baise Ngobi the Babiito hereditary rulers who were believed to be the five sons of the Prince of the King of Bunyoro who migrated into the area.
The subsequent Kyabazinga's of Busoga include the Chief William Wilberforce Nadiope Kadhumbula, Henry Wako Muloki and William Nadiope Gabula who is the current reigning King.
Busoga Historical Sites:
Kagulu Hill
Positioned in the district of Buyende 30km from the town of Kamuli, the Uganda safari feature of Kagulu hill stands high above other ordinary hills at an elevation of 10,000ft above the sea level. Kagulu hill is such a stunning feature that any traveller on safari in Uganda would be gifted to undertake provided he/she is chanced to know about it. Traditionally standing with in the principality of Bugabula in the Kingdom of Busoga, the huge protruding rock has got a rich cultural significance to the people of Busoga as evidenced by the existence of the caretakers that have lived on its foot hills for centuries past. This Uganda safari adventure site is noted to have been the first settlement center for the migrant Basoga who the folks have it that they entered Uganda via the East.
The rock has got some disposition to the Chwezi heritage and sometimes the caretakers receive supernatural interventions from the hill top and get visions to share with other local people which would be a remarkable encounter if luckily encountered while on safari in Uganda. The Kagulu hill is such adventurous activity and climbing it to the top is by no means an easy activity particularly for the first time climbers on Uganda safaris. However, it such a rewarding encounter and can be incorporated as part of Jinja adventure tours, gorilla trekking safaris in Uganda, wildlife safaris or Chimpanzee trekking safaris.
Upon reaching the hill top, the magnificent views of the waterfalls flowing down the rocks, sights of ancient caves that were explored by King Olimi I of Bunyoro in 1686 who used to seek sanctuary on this hill and the overlooking views of Lake Kyoga plus the meandering Nile River combine to appreciate your decision of including Kagulu hill while planning safari to Uganda.
Budhumbula shrine/palace
The Budhumbula shrine / palace is the residence of the former Busoga Kyabazinga Sir. William Nadiope Kadhumbula who passed away in the year 1976. The shrine has impressive Marbles has graves other royal family members including his mother and father Nakisombi and Yosia Nadiope.
Bujjagali Falls
The waterfall Bujagali held sacred by the local community is named after a powerful river spirit that has manifested its self in more than 30 successive human reincarnations over the centuries. Anyone who claims to be the new reincarnation of the spirit is required to prove it by sitting on a magical piece of bark cloth and drifts across the rapids. Only of he succeeds in this risky venture will local villagers accept him as their new spiritual leader.
The Last uncontested Bujagali died in 1970s unfortunately without nominating the heir and the identity of his successor has been a subject to heated dispute. Most Villagers believe that the spirits reside in a local Jaja who is said to have crossed he rapids on the magical piece of cloth while evading Amin's military arrest during the infamous Amin's era. The Jaja's rival for the tittle is an outsider called Jackson who dreamt that he was the reincarnation of Bujagali more than 20 years ago. Jackson arrived at the village to stake his claim and assisted by a companion, he ran off with the magic bark cloth in order to float over the rapids. Before he could attempt the crossing, however, villagers caught him and killed his companion. Jackson was banished from the village to out his days on what is apparently known as Jackson's Island.


text:
PRESS RELEASE June 14, 2019
Belarus to Improve Quality and Efficiency of Critical Utility Services, with World Bank Support
WASHINGTON, June 14, 2019 — Belarusians will gain access to more efficient water, sanitation, and solid waste disposal services, thanks to €90 million in financing for the Belarus Utility Efficiency and Quality Improvement Project, approved today by the World Bank's Board of Executive Directors. The project will support Belarus' national "Clean Water" program, which is expected to also receive investment from the European Investment Bank.
"Belarus has invested heavily to ensure people have access to adequate utility services. But, infrastructure is aging, while some utility companies are less efficient than others," said Alex Kremer, World Bank Country Manager for Belarus. "With this project, we seek not only to upgrade infrastructure but also to help utility companies provide better services at a lower cost."
Around 550,000 Belarusians from across the country will enjoy better quality drinking water, and a cleaner environment, thanks to the modernization of water and wastewater treatment facilities, which will be carried out as part of the project. Consequently, there will be less iron in the water supply and less pollution going into rivers.
Another component of the project will pilot a regional approach to solid waste management, which includes construction of the Polotsk/Novopolotsk Regional Landfill and similar facilities in other towns across the country. New landfills will replace existing mini-landfills that have no environmental controls, to ensure safe disposal of solid waste. In addition, several studies will be undertaken on the development of the waste management sector, along with public communications campaigns to raise environmental awareness.
"The project will help contribute to improving people's lives, as well as protecting the environment," said Stjepan Gabric, Project Task Team Leader. "Ensuring all Belarusians have access to affordable, efficient, and high-quality water and solid waste services is a key goal of the Government, which the World Bank actively supports."
For more than 10 years, the World Bank has successfully supported the water sector in Belarus, through the Water Supply and Sanitation Project and the Municipal Water Sector Review for Belarus. The Bank has also been involved in a national policy dialogue on solid waste management, through the Integrated Solid Waste Management Project, and through various analyses.
Since the Republic of Belarus joined the World Bank in 1992, lending commitments to the country have totaled $1.8 billion. In addition, the country has received grants of $31 million. The active investment lending portfolio financed by the World Bank in Belarus includes nine operations with a total amount of $993 million.
PRESS RELEASE NO: 2019/ECA/136
Vladislav Kovalevsky
ukavaleuski@worldbank.org
Sona Panajyan
spanajyan@worldbank.org
Belarus Utility Efficiency and Quality Improvement Project
Grodno's Residents Waste No Time Recycling to Improve their City
Hot Water Year Round in Belarus
World Bank in Belarus


text:
Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure
The work Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure represents a distinct intellectual or artistic creation found in Australian Institute of Aboriginal and Torres Strait Islander Studies (AIATSIS). This resource is a combination of several types including: Work, Language Material, Books.
The Resource Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure
a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure
Anthony Hoy
Hoy, Anthony
Art - Artists - Men
Art - Economic aspects - Markets - Market places
Art - Painting
Painting, Australian -- Aboriginal artists
Tjungurrayi, Helicopter Joey
Warlayirti Culture Centre
Yukenbarri Napanangka, Lucy, 1934-2003
Aboriginal Art Museum (Utrecht, Netherlands)
Artists, Helicopter and his wife Lucy Yukenbarri, attended the opening of the Aboriginal Art Museum in Utrecht, where their artwork is on display; they will return to the Tanami Desert for the opening of the Warlayirti Culture Centre in July
The Bulletin ;
Context of Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure
Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure, Anthony Hoy

 Data from Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure - Australian Institute of Aboriginal and Torres Strait Islander Studies (AIATSIS)

Data Citation of the Work Heaven & Helicopter : a jetsetter of the international art world is to return to his desert home for the opening of a bold, new cultural adventure


text:
import { IProduct } from '../product';

export interface IWishItem {
  ID: number;
  CreatedAt: number;
  Name: string;
  Img: string;
  Price: number;
  ProductID: number;

  product?: IProduct;
  invalid?: boolean;
}

export interface IWishListResponse {
  Items: IWishItem[]; // can be null
  Products: IProduct[]; // can be null
}

export interface IWishlistSavePayload {
  ProductID: number;
  Name: string;
  Img: string;
  Price: number;
}


Charisma Osborne scored 24 points and McKayla Williams had 12 points and 10 rebounds. Long Beach Poly defeated Lynwood 55-47. Bishop Montgomery defeated Redondo 68-61. Sierra Canyon improved to 27-0 with a 68-41 win over Troy.


For a man who is often paid to irreversibly change the lives of the guinea pigs that take part in his TV shows, this might sound rich. But Brown thinks that if you want to make friends, you have to be the one willing to be changed. You must become the guinea pig.
It might not feel like it but, like it or not, our lives tend to narrow as we age: new people are mainly work people, and we devote more and more of our time to fewer and fewer of our friends. Buddies you once saw weekly become buddies you see once a month and before you know it they're buddies you don't see at all. But can that seam of empathy, that capacity to be vulnerable to change, open up again?
In his new Netflix show Sacrifice, Derren Brown asks: would you die for someone you've never met?
Brown's new show, Sacrifice, asks a version of this question. In typically Brownian fashion, it's a question with somewhat higher stakes: would you die for someone you've never met? We are introduced to Phil, who has some unfortunate opinions about immigrants. By the end of the programme, will Phil throw off the narrow confines of the story he has told himself for so long, and take a bullet for a Mexican stranger?
Sacrifice is not only about sacrifice. It's also about the capacity to imagine the emotions of another person. This, says Brown, is indispensable in a good friend: you have to do your utmost to honour the otherness of the person with whom you share a relationship.
He thinks that his approach to making friends might also have been flawed. "I remember desperately trying to impress," he says. "That's the only way I knew how to do it. I think it's an urge that a lot of magicians have when they're young." As you get older and are on the receiving end of this tactic, he says, you realise that it is one of the last qualities that you look for in a friend.
Brown also thinks that we spend a lot of time trying to be like the people we want to impress, "as if that's going to make them warm to us more".
But things changed. Coming out helped enormously, and finding fame didn't exactly hurt. Although Brown says that he still doesn't belong to a social group – and sporadically 'inherits' the gangs of friends to which his friends belong – he says that he makes friends easily.
Professionally and personally, Brown listens to people. He gets inside their heads and tries to perceive things from their point of view. "Everyone's embarrassed. Everyone hates parties. If you go to bed a couple of nights a week thinking, 'What am I doing with this person, this is terrible,' that's sort of normal." So, when I ask him for advice on making friends, he says that he doesn't have a snappy tip such as 'When they fold their arms, fold your arms'. Life is more complicated than that.
It's a bit long to fit on a fridge magnet, but it works.


A small essential oils company used EAFRD funds to add organic rose oil to its product range by investing into distillery equipment.
EAFRD support was used to convert 5.4 ha of abandoned land into organic cherries orchards, thus helping to expand the harvest season and increase the farms profitability.
EAFRD support was used by a farmer to invest in precision farming and become more productive and comply to the needs of his long term client, a research institute.
A micro-enterprise received EAFRD support to purchase the equipment for producing renewable energy and achieve significantly reduced operational costs and level of energy autonomy.
EAFRD funding helped develop new tourism attractions and tools to facilitate access to natural and historical landmarks in the region.
Setting up a centre to upgrade, produce and maintain electric vehicles and charging stations.


How does the "Cancel Order & Send to Refund Due" process work?
How to set the cron file to run? What is a cron file and how do I get it set up?
What is the Pending Orders Section and How it Works?
How to test out the payment system? Testing Paypal before launching.


Howling at the moon? Are you a werewolf? Or just thrilled Chris Riddell is the new Children's Laureate? With his stunning drawings and spooky sense of humour, he's going to be fang-tastic! In this Gothic delight, crowds are flocking to Ghastly-Gorm Hall for Lord Goth's Literary Dog Show. But under the glow of the moon, a creepy mystery is unfolding. Midnight howling, eerie footprints, terrifying clues: does one of the dogs have a spooky secret? Like the other Goth Girl books, this is a work of extreme beauty, with silver foil skulls on the cover and incredibly ornate drawings right through.
it is a amazing book.like all of Chris riddle books.This is one of my favaret books!


text:
The age of retirement in the public sector is being raised
Michael Lanigan
The new mandatory retirement age in the public sector will be raised from 65 to 70, says the Minister for Finance
This change will primarily affect anyone who has joined the public service before 2004.
Speaking on Today with Sean O'Rourke on RTÉ Radio 1, the Minister for Finance, Public Expenditure and Reform Paschal Donohoe said that the change to the compulsory retirement age for those in the public sector will help create new roles and posts in the service. It will also help to retain a lot of those already working in public service.
Anybody working in front line services with a pension scheme that allows them to retire earlier will not be affected, such as Gardaí, Prison Officers or members of the Defence Forces, the Minister said.
"They will still have the ability to retire at the point that they currently do. In relation to, for example a consultant, that will be a matter for the HSE depending on the nature of the contract that they have."
"We are not making people work longer. We're extending the option to them depending on when they joined."
"We're not changing the minimum retirement age. We're saying when people get beyond that point, particularly for people who joined before 2004. They have the option to work longer."
When asked about any extensions, he said, "This has to be agreed between the employee and employer", stressing that "mutual consent" will be essential, but "in the vast majority of cases, it will be granted."
Donald Trump seemingly tells AOC to go back to where she comes from
The Minister also said that the pension cannot be withdrawn until the employee retires.
When asked about the cost implications, he said "it will depend on the number of people who take it", but "we will be able to cover the costs of this overall."
Commenting on the events surrounding the Brexit Phase 1 talks and DUP leader Arlene Foster's demand that Northern Ireland will not accept "regulatory alignment" with the EU, Donohoe said it was very disappointing, but that the Irish Government is clear that the agreement reached on the border must be upheld.
Speaking about Apple's agreement to start moving €13 billion into an escrow account, the Minister could not provide a clear time-frame. Noting that the tendering processes for the account are moving forward, he said that this should be completed by the end of January. However, no exact date was given as to when the funds would be moved into the account.
Paschal Donohue,
Public Sector.
President signs legislation to increase compulsory retirement age
Rudi Kinsella
Pope Francis: "Those who build walls will become prisoners of the walls they put up"
No-deal Brexit a "real possibility", says Simon Coveney
In a bizarre turn of events, Jim Carrey is feuding with Mussolini's granddaughter on Twitter
Support for Sinn Féin drops five points, according to new poll
Former New York mayor describes Brexit as "the stupidest thing any country has ever done", apart from electing Trump


Discussion in 'General Discussion' started by peder, Jan 9, 2004.
and i am god thriust me!!!!!
Are you by any chance from Denmark?
YAY! Peder is back on the boards.
Thats quite a statement to make there, young sir.
Is a /leveled level 20, full h2h.
I don't speak good English?
Nope, sorry, you dont !
And I do look bad don't I ?
now there's this years championship contender understatement.
Hey Peder old pal, how's it going?