text:
package com.go.tea.compiler;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.beans.IntrospectionException;
import com.go.tea.util.BeanAnalyzer;
import com.go.tea.util.KeyedPropertyDescriptor;

/******************************************************************************
 * Immutable representation of an expression's type.
 *
 * @author Brian S O'Neill
 * @version
 *  45 ,  01/02/05
 * @see com.go.tea.parsetree.Expression
 */
public class Type implements java.io.Serializable {
    /** Type that is compatble with all other types */
    public static final Type NULL_TYPE = new Type(Object.class) {
        public String getSimpleName() {
            return toString();
        }

        public String getFullName() {
            return toString();
        }

        public String toString() {
            return "null-type";
        }
    };

    /** Type that represents void, provided as a convenience */
    public static final Type VOID_TYPE = new Type(void.class);

    /** Type that represents all objects, provided as a convenience */
    public static final Type OBJECT_TYPE = new Type(Object.class);

    /** Type for representing ints, provided as a convenience */
    public static final Type INT_TYPE = new Type(int.class);

    /** Type for representing longs, provided as a convenience */
    public static final Type LONG_TYPE = new Type(long.class);

    /** Type for representing booleans, provided as a convenience */
    public static final Type BOOLEAN_TYPE = new Type(boolean.class);

    /** Type for representing Strings, provided as a convenience */
    public static final Type STRING_TYPE = new Type(String.class);

    /** Type for representing non-null Strings, provided as a convenience */
    public static final Type NON_NULL_STRING_TYPE = STRING_TYPE.toNonNull();

    private static final Method[] EMPTY_METHOD_ARRAY = new Method[0];

    private final Class mObjectClass;
    private final Class mNaturalClass;
    private final boolean mPrimitive;

    private transient boolean mCheckedForArrayLookup;
    private transient Type mArrayElementType;
    private transient Type[] mArrayIndexTypes;
    private transient Method[] mArrayAccessMethods;
    private transient boolean mCheckedForIteration;
    private transient Type mIterationElementType;

    public Type(Class type) {
        if (type.isPrimitive()) {
            mNaturalClass = type;
            mObjectClass = convertToObject(type);
            mPrimitive = true;
        }
        else {
            mObjectClass = mNaturalClass = type;
            mPrimitive = false;
        }
    }

    private Type(Class object, Class natural) {
        mObjectClass = object;
        mNaturalClass = natural;
        if (natural.isPrimitive()) {
            mPrimitive = true;
        }
        else {
            mPrimitive = false;
        }
    }

    Type(Type type) {
        mObjectClass = type.mObjectClass;
        mNaturalClass = type.mNaturalClass;
        mPrimitive = type.mPrimitive;

        mCheckedForArrayLookup = type.mCheckedForArrayLookup;
        mArrayElementType = type.mArrayElementType;
        mArrayIndexTypes = type.mArrayIndexTypes;
        mArrayAccessMethods = type.mArrayAccessMethods;
        mCheckedForIteration = type.mCheckedForIteration;
        mIterationElementType = type.mIterationElementType;
    }

    /**
     * Class returned never represents a primitive type.
     */
    public Class getObjectClass() {
        return mObjectClass;
    }

    /**
     * Returns the natural class for this type. If type is primitive, then its
     * primitive peer is returned.
     */
    public Class getNaturalClass() {
        return mNaturalClass;
    }

    /**
     * Returns true if this type is a primitive.
     */
    public boolean isPrimitive() {
        return mPrimitive;
    }

    /**
     * Returns true if this type is not primitive, but it has a primitive
     * type peer.
     */
    public boolean hasPrimitivePeer() {
        if (mObjectClass == Integer.class ||
            mObjectClass == Boolean.class ||
            mObjectClass == Byte.class ||
            mObjectClass == Character.class ||
            mObjectClass == Short.class ||
            mObjectClass == Long.class ||
            mObjectClass == Float.class ||
            mObjectClass == Double.class ||
            mObjectClass == Void.class) {

            return true;
        }

        return false;
    }

    /**
     * Returns a new type from this one that represents a primitive type.
     * If this type cannot be represented by a primitive, then this is
     * returned.
     */
    public Type toPrimitive() {
        if (mPrimitive) {
            return this;
        }
        else {
            return new Type(mObjectClass, convertToPrimitive(mObjectClass));
        }
    }

    /**
     * Returns a new type from this one that represents a non-primitive type.
     * If this type actually is primitive, the returned type is marked as not
     * being able to reference null. i.e. if this type is int,
     * new Type(Integer.class).toNonNull() is returned.
     */
    public Type toNonPrimitive() {
        if (mPrimitive) {
            return new Type(mObjectClass).toNonNull();
        }
        else {
            return this;
        }
    }

    /**
     * Returns true if this type cannot reference null. For primitive types,
     * true is always returned.
     */
    public boolean isNonNull() {
        return isPrimitive();
    }

    /**
     * Returns true if this type can reference null, or simply the opposite
     * result of isNonNull.
     */
    public boolean isNullable() {
        return !isNonNull();
    }

    /**
     * Returns this type converted such that it cannot reference null.
     */
    public Type toNonNull() {
        if (isNonNull()) {
            return this;
        }
        else {
            return new Type(this) {
                public boolean isNonNull() {
                    return true;
                }

                public boolean isNullable() {
                    return false;
                }

                public Type toNullable() {
                    return Type.this;
                }
            };
        }
    }

    /**
     * Returns this type converted such that it can reference null. The
     * resulting type is never primitive.
     */
    public Type toNullable() {
        if (!isNonNull()) {
            return this;
        }
        else {
            return new Type(mObjectClass);
        }
    }

    /**
     * If this Type supports array lookup, then return the element type.
     * Otherwise, null is returned.
     */
    public Type getArrayElementType() throws IntrospectionException {
        if (!mCheckedForArrayLookup) {
            checkForArrayLookup();
        }

        return mArrayElementType;
    }

    /**
     * If this Type supports array lookup, then return the index type. Because
     * the index type may be overloaded, an array is returned.
     * Null is returned if this Type doesn't support array lookup.
     */
    public Type[] getArrayIndexTypes() throws IntrospectionException {
        if (!mCheckedForArrayLookup) {
            checkForArrayLookup();
        }

        return mArrayIndexTypes == null ? null :
            (Type[])mArrayIndexTypes.clone();
    }

    /**
     * If this Type supports array lookup, then return all of the methods
     * that can be called to access the array. If there are no methods, then
     * an empty array is returned. Null is returned only if this Type
     * doesn't support array lookup.
     */
    public Method[] getArrayAccessMethods() throws IntrospectionException {
        if (!mCheckedForArrayLookup) {
            checkForArrayLookup();
        }

        return mArrayAccessMethods == null ? null :
            (Method[])mArrayAccessMethods.clone();
    }

    /**
     * If this type supports iteration, then the element type is returned.
     * Otherwise, null is returned.
     */
    public Type getIterationElementType() throws IntrospectionException {
        if (!mCheckedForIteration) {
            mCheckedForIteration = true;

            if (mNaturalClass.isArray()) {
                mIterationElementType = getArrayElementType();
            }
            else if (Collection.class.isAssignableFrom(mNaturalClass)) {
                mIterationElementType = OBJECT_TYPE;

                try {
                    Field field =
                        mNaturalClass.getField
                        (BeanAnalyzer.ELEMENT_TYPE_FIELD_NAME);
                    if (field.getType() == Class.class &&
                        Modifier.isStatic(field.getModifiers())) {

                        mIterationElementType =
                            new Type((Class)field.get(null));
                    }
                }
                catch (NoSuchFieldException e) {
                }
                catch (IllegalAccessException e) {
                }
            }
        }

        return mIterationElementType;
    }

    /**
     * Returns true if this type supports iteration in the reverse direction.
     */
    public boolean isReverseIterationSupported() {
        return mNaturalClass.isArray() ||
            List.class.isAssignableFrom(mNaturalClass);
    }

    private void checkForArrayLookup() throws IntrospectionException {
        mCheckedForArrayLookup = true;

        if (mObjectClass.isArray()) {
            mArrayElementType = new Type(mObjectClass.getComponentType());
            mArrayAccessMethods = EMPTY_METHOD_ARRAY;
            mArrayIndexTypes = new Type[] {INT_TYPE};
            return;
        }

        try {
            Map properties = BeanAnalyzer.getAllProperties(mObjectClass);

            KeyedPropertyDescriptor keyed =
                (KeyedPropertyDescriptor)properties.get
                (BeanAnalyzer.KEYED_PROPERTY_NAME);

            if (keyed == null) {
                return;
            }

            mArrayElementType = new Type(keyed.getKeyedPropertyType());
            mArrayAccessMethods = keyed.getKeyedReadMethods();
        }
        catch (ClassCastException e) {
            return;
        }

        int length = mArrayAccessMethods.length;
        mArrayIndexTypes = new Type[length];
        for (int i=0; i<length; i++) {
            Method m = mArrayAccessMethods[i];
            mArrayIndexTypes[i] = new Type(m.getReturnType());
        }
    }

    /**
     * Accessed by the TypeChecker, to override the default.
     */
    Type setArrayElementType(Type elementType) throws IntrospectionException {
        Type type = new Type(mObjectClass, mNaturalClass);
        type.checkForArrayLookup();
        type.mArrayElementType = elementType;
        return type;
    }

    public String getSimpleName() {
        if (mNaturalClass.isArray()) {
            int dim = 0;
            Class baseNat = mNaturalClass;
            Type baseType = this;
            while (baseNat.isArray()) {
                dim++;
                baseNat = baseNat.getComponentType();
                try {
                    baseType = baseType.getArrayElementType();
                }
                catch (IntrospectionException e) {
                    baseType = new Type(baseNat);
                }
            }

            String baseName = baseType.getSimpleName();
            StringBuffer nameBuf =
                new StringBuffer(baseName.length() + dim * 2);
            nameBuf.append(baseName);

            while (dim-- > 0) {
                nameBuf.append('[');
                nameBuf.append(']');
            }

            return nameBuf.toString();
        }
        else if (mPrimitive) {
            return mNaturalClass.getName();
        }
        else {
            String name = mObjectClass.getName();
            int index = name.lastIndexOf('.');
            if (index >= 0) {
                name = name.substring(index + 1);
            }
            return name;
        }
    }

    public String getFullName() {
        if (isPrimitive()) {
            return mNaturalClass.getName();
        }

        StringBuffer nameBuf = new StringBuffer(20);
        if (isNonNull()) {
            nameBuf.append("non-null ");
        }

        if (!mNaturalClass.isArray()) {
            nameBuf.append(mObjectClass.getName());
        }
        else {
            int dim = 0;
            Class baseNat = mNaturalClass;
            Type baseType = this;
            while (baseNat.isArray()) {
                dim++;
                baseNat = baseNat.getComponentType();
                try {
                    baseType = baseType.getArrayElementType();
                }
                catch (IntrospectionException e) {
                    baseType = new Type(baseNat);
                }
            }

            String baseName = baseType.getFullName();
            nameBuf.append(baseName);

            while (dim-- > 0) {
                nameBuf.append('[');
                nameBuf.append(']');
            }
        }

        return nameBuf.toString();
    }

    public String toString() {
        if (!isPrimitive() && isNonNull()) {
            return "non-null " + mNaturalClass.getName();
        }
        else {
            return mNaturalClass.getName();
        }
    }

    public int hashCode() {
        return mNaturalClass.hashCode();
    }

    public boolean equals(Object another) {
        if (this == another) {
            return true;
        }

        if (another instanceof Type) {
            Type t = (Type)another;

            if (this == NULL_TYPE || another == NULL_TYPE) {
                return false;
            }

            if (mNaturalClass == t.mNaturalClass &&
                isNonNull() == t.isNonNull()) {

                if (!mCheckedForArrayLookup && !t.mCheckedForArrayLookup) {
                    // Don't recursively check array element type. They
                    // will be the same. This test fixes an infinite recursion
                    // bug if the element type is of the same type.
                    return true;
                }

                try {
                    Type thisArrayType = getArrayElementType();
                    Type otherArrayType = t.getArrayElementType();

                    if (thisArrayType != null) {
                        if (thisArrayType.equals(otherArrayType)) {
                            return true;
                        }
                    }
                    else {
                        if (otherArrayType == null) {
                            return true;
                        }
                    }
                }
                catch (IntrospectionException e) {
                }
            }
        }

        return false;
    }

    /**
     * Returns a type that is compatible with this type, and the one passed in.
     * The type returned is selected using a best-fit algorithm.
     *
     *
If the type passed in represents a primitive type, but this type is
     * not, the type returned is an object (or a subclass of), but never a
     * primitive type. Compatible primitive types are returned when both this
     * and the parameter type were already primitive types.
     *
     *
Input types which are arrays are also supported by this method.
     *
     *
Returns null if the given type isn't compatible with this one.
     */
    public Type getCompatibleType(Type other) {
        if (other == null) {
            return null;
        }

        if (equals(other)) {
            if (this == NULL_TYPE) {
                return other;
            }
            else {
                return this;
            }
        }

        Class classA = mObjectClass;
        Class classB = other.mObjectClass;

        Type compat;

        if (classA == Void.class) {
            if (classB == Void.class) {
                compat = this;
            }
            else {
                return null;
            }
        }
        else if (classB == Void.class) {
            return null;
        }
        else if (other == NULL_TYPE) {
            compat = this.toNullable();
        }
        else if (this == NULL_TYPE) {
            compat = other.toNullable();
        }
        else if (Number.class.isAssignableFrom(classA) &&
            Number.class.isAssignableFrom(classB)) {

            Class clazz = compatibleNumber(classA, classB);
            if (isPrimitive() && other.isPrimitive()) {
                compat = new Type(clazz, convertToPrimitive(clazz));
            }
            else {
                compat = new Type(clazz);
            }
        }
        else {
            compat = new Type(findCommonBaseClass(classA, classB));
        }

        if (isNonNull() && other.isNonNull()) {
            compat = compat.toNonNull();
        }

        return compat;
    }

    /**
     * Returns the most specific common superclass or interface that can be
     * used to represent both of the specified classes. Null is only returned
     * if either class refers to a primitive type and isn't the same as the
     * other class.
     */
    public static Class findCommonBaseClass(Class a, Class b) {
        Class clazz = findCommonBaseClass0(a, b);

        if (clazz != null && clazz.isInterface()) {
            // Only return interface if it actually defines something.
            if (clazz.getMethods().length <= 0) {
                //clazz = Object.class;
            }
        }

        return clazz;
    }

    private static Class findCommonBaseClass0(Class a, Class b) {
        if (a == b) {
            return a;
        }

        if (a.isPrimitive() || b.isPrimitive()) {
            return null;
        }

        if (a.isArray() && b.isArray()) {
            Class clazz = findCommonBaseClass(a.getComponentType(),
                                              b.getComponentType());

            if (clazz == null) {
                return Object.class;
            }

            return Array.newInstance(clazz, 0).getClass();
        }

        // Determine the intersection set of all the classes, superclasses and
        // interfaces from the passed in classes.
        Set set = new HashSet(19);
        addToClassSet(set, a);

        Set setB = new HashSet(19);
        addToClassSet(setB, b);

        set.retainAll(setB);

        int size = set.size();
        if (size == 1) {
            return (Class)set.iterator().next();
        }
        else if (size == 0) {
            return Object.class;
        }

        // Reduce the set by removing classes/interfaces that are extended and
        // interfaces that are implemented by other classes.
        Iterator i = set.iterator();
        while (i.hasNext()) {
            Class x = (Class)i.next();
            Iterator j = set.iterator();
            while (j.hasNext()) {
                Class y = (Class)j.next();
                if (x != y && x.isAssignableFrom(y)) {
                    i.remove();
                    break;
                }
            }
        }

        size = set.size();
        if (size == 1) {
            return (Class)set.iterator().next();
        }
        else if (size == 0) {
            return Object.class;
        }

        // Reduce the set by discarding interfaces.
        i = set.iterator();
        while (i.hasNext()) {
            if (((Class)i.next()).isInterface()) {
                i.remove();
            }
        }

        if (set.size() == 1) {
            return (Class)set.iterator().next();
        }

        return Object.class;
    }

    private static void addToClassSet(Set set, Class clazz) {
        if (clazz == null || !set.add(clazz)) {
            return;
        }

        addToClassSet(set, clazz.getSuperclass());

        Class[] interfaces = clazz.getInterfaces();
        for (int i=0; i<interfaces.length; i++) {
            addToClassSet(set, interfaces[i]);
        }
    }

    private static Class compatibleNumber(Class classA, Class classB) {
        if (classA == Integer.class) {

            if (classB == Integer.class ||
                classB == Byte.class || classB == Short.class) {

                return Integer.class;
            }

            if (classB == Long.class) {
                return classB;
            }
        }
        else if (classA == Byte.class || classA == Short.class) {
            if (classB == Integer.class ||
                classB == Byte.class || classB == Short.class) {

                return Integer.class;
            }

            if (classB == Long.class) {
                return classB;
            }

            if (classB == Float.class) {
                return Float.class;
            }
        }
        else if (classA == Float.class) {
            if (classB == Float.class) {
                return classB;
            }

            if (classB == Byte.class || classB == Short.class) {
                return Float.class;
            }
        }
        else if (classA == Long.class) {
            if (classB == Integer.class ||
                classB == Byte.class || classB == Short.class ||
                classB == Long.class) {

                return Long.class;
            }
        }

        return Double.class;
    }

    /**
     * If class passed in represents a primitive type, its object peer is
     * returned. Otherwise, it is returned unchanged.
     */
    private static Class convertToObject(Class type) {
        if (type == int.class) {
            return Integer.class;
        }
        else if (type == boolean.class) {
            return Boolean.class;
        }
        else if (type == byte.class) {
            return Byte.class;
        }
        else if (type == char.class) {
            return Character.class;
        }
        else if (type == short.class) {
            return Short.class;
        }
        else if (type == long.class) {
            return Long.class;
        }
        else if (type == float.class) {
            return Float.class;
        }
        else if (type == double.class) {
            return Double.class;
        }
        else if (type == void.class) {
            return Void.class;
        }
        else {
            return type;
        }
    }

    /**
     * If class passed in has a primitive type peer, it is returned.
     * Otherwise, it is returned unchanged.
     */
    private static Class convertToPrimitive(Class type) {
        if (type == Integer.class) {
            return int.class;
        }
        else if (type == Boolean.class) {
            return boolean.class;
        }
        else if (type == Byte.class) {
            return byte.class;
        }
        else if (type == Character.class) {
            return char.class;
        }
        else if (type == Short.class) {
            return short.class;
        }
        else if (type == Long.class) {
            return long.class;
        }
        else if (type == Float.class) {
            return float.class;
        }
        else if (type == Double.class) {
            return double.class;
        }
        else if (type == Void.class) {
            return void.class;
        }
        else {
            return type;
        }
    }

    /**
     * Returns the conversion cost of assigning the given type to this type.
     * Conversions are allowed between arrays as well if they have the
     * same dimensions. If no legal conversion exists, -1 is returned.
     * The conversion costs are as follows:
     *
     *

     *
any type is assignable by its own type
     *
any superclass type is assignable by a subclass type
     *
any object with a primitive peer can be converted to its primitive
     *
any primitive can be converted to its object peer
     *
any byte or short can be widened to an int
     *
any byte, short or int can be widened to a long
     *
any byte or short can be widened to a float
     *
any primitive number can be widened to a double
     *
any Number object can be converted to a primitive and widened
     *
any primitive number can be converted to a Number object
     *
any primitive number can be widened to a Number object
     *
any Number object can be widened to another Number object
     *
any primitive number can be narrowed to a double
     *
any Number object can be narrowed to a double
     *
any primitive number can be narrowed to a Double object
     *
any Number object can be narrowed to a Double object
     *
any primitive number can be narrowed to a long
     *
any Number object can be narrowed to a long
     *
any primitive number can be narrowed to a Long object
     *
any Number object can be narrowed to a Long object
     *
any primitive number can be narrowed to a float
     *
any Number object can be narrowed to a float
     *
any primitive number can be narrowed to a Float object
     *
any Number object can be narrowed to a Float object
     *
any primitive number can be narrowed to a int
     *
any Number object can be narrowed to a int
     *
any primitive number can be narrowed to a Integer object
     *
any Number object can be narrowed to a Integer object
     *
any primitive number can be narrowed to a short
     *
any Number object can be narrowed to a short
     *
any primitive number can be narrowed to a Short object
     *
any Number object can be narrowed to a Short object
     *
any primitive number can be narrowed to a byte
     *
any Number object can be narrowed to a byte
     *
any primitive number can be narrowed to a Byte object
     *
any Number object can be narrowed to a Byte object
     *
any primitive can be converted to an object
     *
NULL_TYPE can be converted to any object
     *
anything can be converted to a String
     *

     *
     * @return the conversion cost, or -1 if the other can't assign to this
     */
    public int convertableFrom(Type other) {
        if (equals(other)) {
            return 1;
        }

        Class thisNat = mNaturalClass;
        Class otherNat = other.mNaturalClass;

        if (thisNat.isAssignableFrom(otherNat)) {
            return 2;
        }

        if (other == NULL_TYPE && !thisNat.isPrimitive()) {
            return 38;
        }

        if (thisNat.isArray() && otherNat.isArray()) {
            // Get dimensions of each array.
            int thisDim = 0;
            while (thisNat.isArray()) {
                thisDim++;
                thisNat = thisNat.getComponentType();
            }

            int otherDim = 0;
            while (otherNat.isArray()) {
                otherDim++;
                otherNat = otherNat.getComponentType();
            }

            if (thisDim != otherDim) {
                return -1;
            }
        }

        int aCode = typeCode(thisNat);
        if (aCode < 0) {
            return -1;
        }
        int bCode = typeCode(otherNat);
        if (bCode < 0) {
            if (aCode == 18) {
                // Anything can be converted to a String.
                return 39;
            }
            else {
                return -1;
            }
        }

        return mCostTable[bCode][aCode];
    }

    private static int typeCode(Class clazz) {
        if (clazz.isPrimitive()) {
            if (clazz == boolean.class) {
                return 0;
            }
            else if (clazz == char.class) {
                return 1;
            }
            else if (clazz == byte.class) {
                return 2;
            }
            else if (clazz == short.class) {
                return 3;
            }
            else if (clazz == int.class) {
                return 4;
            }
            else if (clazz == float.class) {
                return 5;
            }
            else if (clazz == long.class) {
                return 6;
            }
            else if (clazz == double.class) {
                return 7;
            }
        }
        else {
            if (clazz == Boolean.class) {
                return 8;
            }
            else if (clazz == Character.class) {
                return 9;
            }
            else if (clazz == Byte.class) {
                return 10;
            }
            else if (clazz == Short.class) {
                return 11;
            }
            else if (clazz == Integer.class) {
                return 12;
            }
            else if (clazz == Float.class) {
                return 13;
            }
            else if (clazz == Long.class) {
                return 14;
            }
            else if (clazz == Double.class) {
                return 15;
            }
            else if (Number.class.isAssignableFrom(clazz)) {
                return 16;
            }
            else if (clazz == Object.class) {
                return 17;
            }
            else if (clazz == String.class) {
                return 18;
            }
        }

        return -1;
    }

    // 19 by 19 two dimensional byte array. [from][to]
    private static byte[][] mCostTable =
    {
        //0  1   2  3  4  5  6  7   8  9  10 11 12 13 14 15  16  17 18

        { 1,-1, -1,-1,-1,-1,-1,-1,  4,-1, -1,-1,-1,-1,-1,-1, -1, 37,39}, //  0
        {-1, 1, -1,-1,-1,-1,-1,-1, -1, 4, -1,-1,-1,-1,-1,-1, -1, 37,39}, //  1

        {-1,-1,  1, 5, 5, 7, 6, 8, -1,-1,  4,11,11,11,11,11, 10, 37,39}, //  2
        {-1,-1, 33, 1, 5, 7, 6, 8, -1,-1, 35, 4,11,11,11,11, 10, 37,39}, //  3
        {-1,-1, 33,29, 1,21, 6, 8, -1,-1, 35,31, 4,23,11,11, 10, 37,39}, //  4
        {-1,-1, 33,29,25, 1,17, 8, -1,-1, 35,31,27, 4,19,11, 10, 37,39}, //  5
        {-1,-1, 33,29,25,21, 1,13, -1,-1, 35,31,27,23, 4,15, 10, 37,39}, //  6
        {-1,-1, 33,29,25,21,17, 1, -1,-1, 35,31,27,23,19, 4, 10, 37,39}, //  7

        { 3,-1, -1,-1,-1,-1,-1,-1,  1,-1, -1,-1,-1,-1,-1,-1, -1,  2,39}, //  8
        {-1, 3, -1,-1,-1,-1,-1,-1, -1, 1, -1,-1,-1,-1,-1,-1, -1,  2,39}, //  9

        {-1,-1,  3, 9, 9, 9, 9, 9, -1,-1,  1,12,12,12,12,12,  2,  2,39}, // 10
        {-1,-1, 34, 3, 9, 9, 9, 9, -1,-1, 36, 1,12,12,12,12,  2,  2,39}, // 11
        {-1,-1, 34,30, 3,22, 9, 9, -1,-1, 36,32, 1,24,12,12,  2,  2,39}, // 12
        {-1,-1, 34,30,26, 3,18, 9, -1,-1, 36,32,28, 1,20,12,  2,  2,39}, // 13
        {-1,-1, 34,30,26,22, 3,14, -1,-1, 36,32,28,24, 1,16,  2,  2,39}, // 14
        {-1,-1, 34,30,26,22,18, 3, -1,-1, 36,32,28,24,20, 1,  2,  2,39}, // 15

        {-1,-1, 34,30,26,22,18,14, -1,-1, 36,32,28,24,20,16,  1,  2,39}, // 16

        {-1,-1, -1,-1,-1,-1,-1,-1, -1,-1, -1,-1,-1,-1,-1,-1, -1,  1,39}, // 17
        {-1,-1, -1,-1,-1,-1,-1,-1, -1,-1, -1,-1,-1,-1,-1,-1, -1,  2, 1}, // 18
        {66,82, 73,65,78,32,83,32, 79,39, 78,69,73,76,76,-1, -1, -1,-1}  // 19
    };
}


text:
When you are in the family... you have more rights than when you are asking to join and knocking on the door.
Not a MindZip member yet
Jacques Chirac's quotes
These irresponsible acts, which cannot have any justification whatsoever, are to be fully condemned. In these appalling circumstances, I want to offer you the most sincere condolences, both in my name and in that of the French people.
If our language, our programs, our creations are not strongly present in the new media, the young generation of our country will be economically and culturally marginalized.
Terrorism has become the systematic weapon of a war that knows no borders or seldom has a face.
Terrorism takes us back to ages we thought were long gone if we allow it a free hand to corrupt democratic societies and destroy the basic rules of international life.
National Missile Defense is of a nature to retrigger a proliferation of weapons, notably nuclear missiles. Everything that goes in the direction of proliferation is a bad direction.
The construction of Europe is an art. It is the art of the possible.
If we prove capable of showing a pioneering commitment, we shall create a commmunity listened to around the world.
They missed a great opportunity to shut up.
As soon as one nation claims the right to take preventive action, other countries will naturally do the same. If we go down that road, where are we going?
Romania and Bulgaria were particularly irresponsible. If they wanted to diminish their chances of joining Europe they could not have found a better way.
One month, two months, I am ready to accept any accord on this point that has the approval of the inspectors.
France will insist on the need for updated and responsive institutions.
One can go to war alone, butyou can't build peace alone.
One can go to war alone, but you can't build peace alone.
Young actors often don't think of the consequences of doing nudity or sex scenes. They want the role so badly that they agree to be exploited, and then end up embarrassing family, friends, and even strangers.
On the road to equality there is no better place for blacks to detour around American values than in forgoing its example in the treatment of its women and the organization of its family.
Eleanor Holmes Norton
We're parents first, and once you have kids, everybody knows that you have priority lists. Number one is your family and everything else just kind of finds its place.
I have a project at HBO and one at the Family Channel coming that are being looked at. Aside from that I am not doing much more than playing golf and some skiing.
Gil Gerard
I didn't tell anybody about my plan because I was convinced my family or friends would stop me. I didn't think much about what would happen afterwards.
You know raising a family in the lifestyle of a professional athlete can be very difficult.
I love to see my family together. That's what life is about. It's about family.
Like religion, politics, and family planning, cereal is not a topic to be brought up in public. It's too controversial.
It was an idea we had when Al was in the Senate - to organize and moderate an annual conference that would look at government policy through the lens of the family to help identify ways that the family can be supported and strengthened.
Tipper Gore
Even though we were all celebrities to a certain extent, we all looked at each other as family.
The steady expansion of welfare programs can be taken as a measure of the steady disintegration of the Negro family structure over the past generation in the United States.
A growing awareness of the depth of popular attachment to the family has led some liberals to concede that family is not just a buzzword for reaction.
Christopher Lasch
Manute Bol
I have other obligations now - the show, my family, my life... though I know that without my sobriety I wouldn't have any of those things.
When they were small and my wife really had no other responsibilities, except taking care of the family and all of us, it wasn't that big a deal. It was fun. Hey, we're going to Moscow. We're going to Italy. We're going to Toronto. We're going to New York.
I miss my family, and I like being a tourist when I go back.
I'm not in the business of becoming famous. And that's the advice I give to younger aspiring actors. Work onstage and do the little roles. In the end it's not important to be seen. It's important to do. There's a lot of disappointment in this business, but my family keeps me grounded.
The last three decades have seen the collapse of the family wage system.
I have continued systematically to study the Book of Mormon and Bible to understand even more deeply what God expects of me and my family while on this earth.
When I finally gave up any hope of doing anything representative of the American family, I actually seemed to have tapped into other people's weirdness in that way.
Leave the matter of religion to the family altar, the church, and the private school, supported entirely by private contributions. Keep the church and state forever separate.
When I said I was going to audition for a film, I got a hearty laugh from all my family.
Victoria Abril
And partly, the worst thing you could do in my family was need something from someone. So physical strength represented an avenue of self-sufficiency to me.
I mean, I would never want to do anything to hurt my family, but then again I would never want to do anything to hurt myself. And I think they go hand in hand.
Lauren Bush
After a hundred years the son of the King then reigning, who was of another family from that of the sleeping Princess, was a-hunting on that side of the country, and he asked what those towers were which he saw in the middle of a great thick wood.
I was on Oprah's show recently talking about the people who impacted me the most. One was a teacher and one was my soccer coach. I didn't even go into my family, who had the most influence.
As the family goes, so goes the nation and so goes the whole world in which we live.
He said there is 80 of us, ready to come down and the next thing I knew is that Jo Brown dashed in and said your family has already moved and you have to move, the boat is ready to take you out. I didn't have time to ask, even ask a question.
Kamisese Mara
We expect teachers to handle teenage pregnancy, substance abuse, and the failings of the family. Then we expect them to educate our children.
John Sculley
I had an amazing experience working with great people. I had a great family, a typical family with drama in certain areas, and that's pretty much everywhere in everyone's life.
Tina Yothers
I come from a family of losers, and I've rejected my family as something I don't want to be like.
I think togetherness is a very important ingredient to family life.
It's the sense of what family is at the dinner table. It was the joy of knowing mother was in the kitchen making our favorite dish. I wish more people would do this and recall the joy of life.

redpajama_set_name: RedPajamaCommonCrawl


St Anthony Regional Hospital & Nursing Home is an acute care hospital located in Carroll, IA 51401 that serves the Carroll county area. This facility is a non-profit hospital with emergency services.
The hospital patient survey at St Anthony Regional Hospital & Nursing Home is administered to a random sample of adult inpatients after discharge. The following are the results of some the survey's five-star quality ratings.
These performance measures at St Anthony Regional Hospital & Nursing Home show how rapidly emergency departments give recommended treatments known to get the best results for patients with certain common conditions. This information could help patients compare which hospitals provide the right care at the right time.
Time Before Admission: 2 hours 51 minutes before being admitted to hospital.
Transfer Time: 27 minutes admitted before being taken to room.
We have identified the following individual quality measures where St Anthony Regional Hospital & Nursing Home has better average ratings than other hospitals in Iowa or where the hospital is performing better compared to national averages or benchmarks.
The provider's use of abdomen CT use of contrast material is better and more effective compared to the average hospital rate in the state of IA.
The provider's Emergency Department performance of 171 minutes for time before admission is better than the statewide average of 209 minutes in Iowa.
The provider's Emergency Department performance of 27 minutes for transfer time is better than the statewide average of 60 minutes in Iowa.
The provider's Preventive Care performance score of 96% for the quality measure healthcare workers flu immunization is better than the 92% average score of Iowa.
The provider's Emergency Department performance of 83 minutes for discharge time is better than the statewide average of 116 minutes in Iowa.
The provider's Emergency Department performance score of 0% for the quality measure left without being seen is better than the 1% average score of Iowa.
The provider's Surgical Care Improvement Project performance score of 100% for the quality measure beta-blocker prior to admission is better than the 98% average score of Iowa.
The provider's Surgical Care Improvement Project performance score of 98% for the quality measure antibiotic within 1 hour is better than the 96% average score of Iowa.
The provider's Stroke Care performance score of 100% for the quality measure venous thromboembolism (vte) prophylaxis is better than the 97% average score of Iowa.
The provider's Blood Clot Prevention and Treatment performance score of 93% for the quality measure treatment to prevent blood clots is better than the 92% average score of Iowa.
The provider's Blood Clot Prevention and Treatment performance score of 97% for the quality measure icu treatment to prevent blood clots is better than the 96% average score of Iowa.


text:
var RING_MAX_LINE_WIDTH = 20;
var INITIAL_DISTANCE = 1000;
var MAX_SIDE = 500;

function Ring(aZ) {
	var ACUTAL_RADIUS = 20;
	var RING_MAX_ROTATION = 60;
	var RING_INITIAL_RADIUS = 10;

	/*
		this.intensity: number
		this.center : Vector2
		this.draw : function [abstract]
		this.rescale : function [abstract]
	*/

	this.z = aZ;
	this.radius = RING_INITIAL_RADIUS;
	this.angle = Math.random() * 360;
	this.angleIncrement = Math.random() * RING_MAX_ROTATION * (-1 + Math.round(Math.random()) * 2);

	this.resize = function(aDimensions) {
		this.center = aDimensions.multiply(0.5);
		this.rescale();
	};

	this.act = function(aEngine, aDistanceTravelled, aDelta, aKX, aKY) {
		//if the ring is beyond the camera - create a new ring to replace this one
		if (this.z < 0) {
			Game.spawnRing(INITIAL_DISTANCE + this.z);
		}

		//calculate new z-position
		this.z -= aDistanceTravelled;
		this.radius = aEngine.FIELD_OF_VIEW * (ACUTAL_RADIUS / Math.max(this.z, 1));
		this.angle += this.angleIncrement * aDelta;

		if (this.angle >= 360) {
			this.angle -= 360;
		} else if (this.angle < 0) {
			this.angle += 360;
		}

		this.center = aEngine.center.translate(aKX * this.radius, aKY * this.radius);
		this.updateIntensity();
		this.rescale();
	};
}

Ring.prototype.updateIntensity = function() {
	if (this.z <= 200) {
		this.intensity = 1;
	} else {
		var d = INITIAL_DISTANCE - 200;
		this.intensity = (d - this.z + 200) / d;
	}
};

function EmptyRing(aZ) {
	Ring.call(this, aZ);

	this.DECORATION_HEIGHT = 0.2;

	this.lineTop = new Line(new Point(0, 0), new Point(0, 0));
	this.lineBottom = new Line(new Point(0, 0), new Point(0, 0));
	this.lineLeft = new Line(new Point(0, 0), new Point(0, 0));
	this.lineRight = new Line(new Point(0, 0), new Point(0, 0));

	this.rescale = function() {
		this.lineTop.p1.x = this.center.x;
		this.lineTop.p1.y = this.center.y - this.radius;
		this.lineTop.p2.x = this.lineTop.p1.x;
		this.lineTop.p2.y = this.lineTop.p1.y + this.radius * this.DECORATION_HEIGHT;

		this.lineBottom.p1.x = this.center.x;
		this.lineBottom.p1.y = this.center.y + this.radius;
		this.lineBottom.p2.x = this.lineBottom.p1.x;
		this.lineBottom.p2.y = this.lineBottom.p1.y - this.radius * this.DECORATION_HEIGHT;

		this.lineLeft.p1.x = this.center.x - this.radius;
		this.lineLeft.p1.y = this.center.y;
		this.lineLeft.p2.x = this.lineLeft.p1.x + this.radius * this.DECORATION_HEIGHT;
		this.lineLeft.p2.y = this.lineLeft.p1.y;

		this.lineRight.p1.x = this.center.x + this.radius;
		this.lineRight.p1.y = this.center.y;
		this.lineRight.p2.x = this.lineRight.p1.x - this.radius * this.DECORATION_HEIGHT;
		this.lineRight.p2.y = this.lineRight.p1.y;
		this.rotate();
	};

	this.rotate = function() {
		this.lineTop.rotate(this.angle, this.center);
		this.lineBottom.rotate(this.angle, this.center);
		this.lineLeft.rotate(this.angle, this.center);
		this.lineRight.rotate(this.angle, this.center);

	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		context.beginPath();
		context.arc(this.center.x, this.center.y, this.radius, 0, 2 * Math.PI, false);

		this.lineTop.draw(context);
		this.lineBottom.draw(context);
		this.lineLeft.draw(context);
		this.lineRight.draw(context);

		context.closePath();
		context.stroke();
	};
}

EmptyRing.prototype = Object.create(Ring.prototype);
EmptyRing.prototype.constructor = EmptyRing;

function RectangleRingSingle(aZ) {
	Ring.call(this, aZ);

	this.RECTANGLE_WIDTH = 0.8;
	this.RECTANGLE_HEIGHT = 1.6;

	this.rectangle = new ReverseRectangle(new Point(0, 0), 0, 0, 0);

	this.rescale = function() {

		this.rectangle.rescale(
			new Point(this.center.x - this.radius * (this.RECTANGLE_WIDTH / 2), this.center.y - this.radius * (this.RECTANGLE_HEIGHT / 2)),
			this.RECTANGLE_WIDTH * this.radius,
			this.RECTANGLE_HEIGHT * this.radius
		);
		this.rotate();
	};

	this.rotate = function() {
		this.rectangle.rotate(this.angle, this.center);
	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		var grey = Util.intensity255(204, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.fillStyle = 'rgba(' + grey + ',' + grey + ',' + grey + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		context.beginPath();
		context.arc(this.center.x, this.center.y, this.radius, 0, 2 * Math.PI, false);
		this.rectangle.draw(context);
		context.closePath();

		context.fill();
		context.stroke();
	};
}

RectangleRingSingle.prototype = Object.create(Ring.prototype);
RectangleRingSingle.prototype.constructor = RectangleRingSingle;

function DoorLockRing(aZ) {
	Ring.call(this, aZ);

	this.CIRCLE_RADIUS = 0.3;
	this.ANGLE = 60;

	var s, c, circleRadius,
		xOffsetSmall, yOffsetSmall, xOffsetBig, yOffsetBig,
		radAngle, radStartAngle, radEndAngle, angleTo90;

	angleTo90 = 90 - this.ANGLE;

	radAngle = Math.PI * (angleTo90 / 180);
	s = Math.sin(radAngle);
	c = Math.cos(radAngle);

	radStartAngle = Math.PI / 2;
	radEndAngle = Math.PI * ( angleTo90 / 180);

	var topPointLeft = new Point(0, 0),
		midPointLeft = new Point(0, 0),
		bottomPointLeft = new Point(0, 0),
		topPointRight = new Point(0, 0);

	this.rescale = function() {
		circleRadius = this.radius * this.CIRCLE_RADIUS;
		xOffsetSmall = c * circleRadius; //b
		yOffsetSmall = s * circleRadius; //a
		xOffsetBig = c * this.radius; //b
		yOffsetBig = s * this.radius; //a

		topPointLeft.x = this.center.x;
		topPointLeft.y = this.center.y + circleRadius;

		midPointLeft.x = this.center.x;
		midPointLeft.y = topPointLeft.y + (this.radius - circleRadius) / 2;

		bottomPointLeft.x = this.center.x;
		bottomPointLeft.y = this.center.y + this.radius;

		topPointRight.x = this.center.x + xOffsetSmall;
		topPointRight.y = this.center.y + yOffsetSmall;
		this.rotate();
	};

	this.rotate = function() {
		topPointLeft.rotate(this.angle, this.center);
		midPointLeft.rotate(this.angle, this.center);
		bottomPointLeft.rotate(this.angle, this.center);
		topPointRight.rotate(this.angle, this.center);
	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		var grey = Util.intensity255(204, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.fillStyle = 'rgba(' + grey + ',' + grey + ',' + grey + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		var currentAngle = this.angle * (Math.PI / 180);
		context.beginPath();
		context.moveTo(midPointLeft.x, midPointLeft.y);
		context.lineTo(bottomPointLeft.x, bottomPointLeft.y);
		context.arc(this.center.x, this.center.y, this.radius, radStartAngle + currentAngle, radEndAngle + currentAngle, false);
		context.lineTo(topPointRight.x, topPointRight.y);
		context.arc(this.center.x, this.center.y, circleRadius, radEndAngle + currentAngle, radStartAngle + currentAngle, true);
		context.lineTo(midPointLeft.x, midPointLeft.y);
		context.closePath();

		context.fill();
		context.stroke();
	};
}

DoorLockRing.prototype = Object.create(Ring.prototype);
DoorLockRing.prototype.constructor = DoorLockRing;

function FanRing(aZ) {
	Ring.call(this, aZ);

	this.CIRCLE_RADIUS = 0.3;

	var topMidPoint = new Point(0, 0),
		topHighPoint = new Point(0, 0),
		rightLowPoint = new Point(0, 0),
		bottomHighPoint = new Point(0, 0),
		leftLowPoint = new Point(0, 0);

	var circleRadius;

	this.rescale = function() {
		circleRadius = this.radius * this.CIRCLE_RADIUS;
		topMidPoint.x = this.center.x;
		topMidPoint.y = this.center.y - circleRadius;
		topHighPoint.x = this.center.x;
		topHighPoint.y = this.center.y - this.radius;
		rightLowPoint.x = this.center.x + circleRadius;
		rightLowPoint.y = this.center.y;
		bottomHighPoint.x = this.center.x;
		bottomHighPoint.y = this.center.y + this.radius;
		leftLowPoint.x = this.center.x - circleRadius;
		leftLowPoint.y = this.center.y;

		this.rotate();
	};

	this.rotate = function() {
		topMidPoint.rotate(this.angle, this.center);
		topHighPoint.rotate(this.angle, this.center);
		rightLowPoint.rotate(this.angle, this.center);
		bottomHighPoint.rotate(this.angle, this.center);
		leftLowPoint.rotate(this.angle, this.center);
	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		var grey = Util.intensity255(204, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.fillStyle = 'rgba(' + grey + ',' + grey + ',' + grey + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		var currentAngle = this.angle * (Math.PI / 180);

		context.beginPath();

		context.moveTo(topMidPoint.x, topMidPoint.y);
		context.lineTo(topHighPoint.x, topHighPoint.y);
		context.arc(this.center.x, this.center.y, this.radius, Math.PI * (3 / 2) + currentAngle, 0 + currentAngle, false);
		context.lineTo(rightLowPoint.x, rightLowPoint.y);
		context.arc(this.center.x, this.center.y, circleRadius, 0 + currentAngle, Math.PI * (1 / 2) + currentAngle, false);
		context.lineTo(bottomHighPoint.x, bottomHighPoint.y);
		context.arc(this.center.x, this.center.y, this.radius, Math.PI * (1 / 2) + currentAngle, Math.PI + currentAngle, false);
		context.lineTo(leftLowPoint.x, leftLowPoint.y);
		context.arc(this.center.x, this.center.y, circleRadius, Math.PI + currentAngle, Math.PI * (3 / 2) + currentAngle, false);
		context.lineTo(topMidPoint.x, topMidPoint.y);
		context.closePath();

		context.fill();
		context.stroke();
	};
}

FanRing.prototype = Object.create(Ring.prototype);
FanRing.prototype.constructor = FanRing;

function HalfRing(aZ) {
	Ring.call(this, aZ);

	this.rescale = function() {
	};

	this.rotate = function() {
	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		var grey = Util.intensity255(204, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.fillStyle = 'rgba(' + grey + ',' + grey + ',' + grey + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		var currentAngle = this.angle * (Math.PI / 180);

		context.beginPath();
		context.arc(this.center.x, this.center.y, this.radius, 0 + currentAngle, Math.PI + currentAngle, false);
		context.closePath();

		context.fill();
		context.stroke();
	};
}

HalfRing.prototype = Object.create(Ring.prototype);
HalfRing.prototype.constructor = HalfRing;

function HoleRing(aZ, aHoles, aHoleRadiusRatio, aDistanceFormCenterRatio) {
	Ring.call(this, aZ);

	this.holes = aHoles;
	this.holeRadiusRatio = aHoleRadiusRatio;

	this.distanceFromCenterRatio = aDistanceFormCenterRatio;

	var centerPoints = [];
	for (var i = 0; i < this.holes; i++) {
		centerPoints[i] = new Point(0, 0);
	}
	var distanceFormCenter, holeAngle, holeRadius;

	this.rescale = function() {
		distanceFormCenter = this.radius * this.distanceFromCenterRatio;
		holeAngle = 360 / this.holes;
		centerPoints[0].x = this.center.x + distanceFormCenter;
		centerPoints[0].y = this.center.y;
		centerPoints[0].rotate(this.angle, this.center);
		for (var i = 1, len = centerPoints.length; i < len; i++) {
			centerPoints[i].x = centerPoints[i - 1].x;
			centerPoints[i].y = centerPoints[i - 1].y;
			centerPoints[i].rotate(holeAngle, this.center);

		}
		holeRadius = this.radius * this.holeRadiusRatio;
	};

	this.rotate = function() {
	};

	this.translate = function() {
	};

	this.collisionCheck = function() {
	};

	this.draw = function(aEngine) {
		var context = aEngine.context;

		var black = Util.intensity255(0, this.intensity);
		var grey = Util.intensity255(204, this.intensity);
		context.strokeStyle = 'rgba(' + black + ',' + black + ',' + black + ',1)';
		context.fillStyle = 'rgba(' + grey + ',' + grey + ',' + grey + ',1)';
		context.lineWidth = RING_MAX_LINE_WIDTH * (this.radius / MAX_SIDE);

		context.beginPath();
		context.arc(this.center.x, this.center.y, this.radius, 0, Math.PI * 2, false);
		for (var i = 0, len = centerPoints.length; i < len; i++) {
			context.moveTo(centerPoints[i].x + holeRadius, centerPoints[i].y);
			context.arc(centerPoints[i].x, centerPoints[i].y, holeRadius, 0, Math.PI * 2, true);
		}
		context.closePath();
		//context.clip();
		context.fill();
		context.stroke();
	};
}

HoleRing.prototype = Object.create(Ring.prototype);
HoleRing.prototype.constructor = HoleRing;

redpajama_set_name: RedPajamaGithub


text:
The Unknown Candidates
Mar 16, 2016 | Politics
When I voted yesterday in the presidential primary, I knew that all of the GOP candidates' names would be on the ballot (including the ones who have "suspended" their campaigns), but for the Democrats, I thought there would be exactly two: Hillary Clinton and Bernie Sanders. But there were nine, including the withdrawn Martin O'Malley, and six other names I didn't recognize: Henry Hewes, Rocky De La Fuente, Keith Judd, Willie L. Wilson, John Wolfe Jr., and Jon Adams.
How did they get on the ballot? According to the Missouri Secretary Of State's website:
Candidates must provide a filing fee receipt of $1,000.00 paid to the state committee of candidate's established political party or a statutorily qualifying petition signed by not less than 5,000 registered Missouri voters and a sworn statement that the candidate is unable to pay the filing fee. The receipt or the petition together with a sworn statement must be submitted with the written request to be included on the presidential preference primary.
In other words, you don't have to stand around the supermarket with a clipboard trying to convince people to sign a petition to let you run. You just have to come up with a thousand bucks, and you're on the ballot. I'm guessing that's how the six unknowns got on there, but I can't even speculate why.
It's wrong to look at these people as crazy, even though they had no chance in the long-term. After all, Jeb Bush wasted $150 million and he's not going to be his party's nominee. Neither are Marco Rubio, Ben Carson, Rand Paul, Mike Huckabee, Carly Fiorina, Rick Santorum, or Chris Christie. Yet, at some point, they all must have believed they were going to be our next commander-in-chief, and had advisers and friends who bought into the concept and encouraged them — not to mention the people and PACs who wrote checks to support that impossible dream (Yahoo Finance's Rick Newman tallies the wasted money here).
Believe it or not, the unknowns actually did receive some votes. In this state, while Clinton won with 310,602 and Sanders received 309,071 votes, the third place finisher was Hewes, who a remarkable 648 people voted for. That's more than O'Malley, who despite dropping out, was still the choice of 440 Missourians.
Technically, "uncommitted" was in third place, and I'll never understand that option even being on the ballot. If you don't know who to vote for, why are you taking the time to drive to the polling place, wait in line, take a ballot, and then make no choice? It's not like there were other offices and issues to vote for yesterday. All you had to do was choose which candidate you wanted to be the nominee of your party, and you essentially chose "none of the above." Why bother?
Besides Hewes, the other unknowns had totals of a few hundred each, including Jon Adams, who claims he's a third-cousin-many-times-removed from America's second president, and may have had another motive for running. It appears that Adams is using his presidential candidacy to try to get laid. On his website, on a tab labelled "First Lady," Adams writes:
I have not been lucky in love. And yet this presents an opportunity. If you are interested in joining the campaign as a possible future First Lady of the United States, and if you have a deep, abiding love of country as well as class, elegance and style, please email a short bio to: FLOTUS@adamsforpresident.com. This is not a reality television show. You can become First Lady of the United States. If all else fails, we can always hold a small election for First Lady in December 2016.
I wonder if Darva Conger is still single.


What Is Benjamin Pakulski's Work Out Plan?
The workout plan involves a muscle intelligence training manual explaining some intense workouts to double muscle gains as well as for remodeling of weak body parts. His muscle intelligence(MI40) training system is designed to help people attain their ultimate body using scientifically proven techniques. The training manual includes nutritional information, rest patterns as well as training methods to attain the ultimate body.
Benjamin stresses the importance of tension. He says that lifting weights or doing a lot of exercises won't add muscle on their own but one requires to add some tension regularly to let the body get used to its need to gain muscle. He recommends the time under tension of 40 to 60 seconds. However, the time is not set and one can go beyond 60 seconds if they can. The more time under tension one's body can take the more muscle they can grow.
The Pak Man asserts the importance of understanding the muscles, their origins, where they are located in the body, their actions when they contract, how to shorten them as well as all other details on the muscles. This is to allow for one to understand exactly how much tension they can take and how much of it will result in muscle gain. Knowing the location of each muscle in the body will allow a person to conduct specific training of that particular muscle instead of just doing general exercises.
Some of the training variables Ben talks about were intensity, frequency, duration, reps, test intervals as well as sets. These were focused toward understanding such techniques as the Time Under Tension(TUT) limits, Set-extensions, Full Range Of Motion(ROM), as well as his, advise for people to train in a straight line. What he means by training in a straight line is that one should not combine so many moves during their exercises but instead focus.
Benjamin says that one of the best nutrition plans for a healthy body includes a low carb diet. This means eating mostly either natural or unprocessed food products. The meals should consist mainly of proteins, healthy fats as well as vegetables and fruits. Benjamin explains that taking low carb foods at specific times could spike insulin uptake which could facilitate muscle growth. He also insists on the importance of taking the right supplements both before and after the workouts.


The National Council for Peace and Order (NCPO) issued an order making three categories of criminal offences are to be tried by the Military Court.
They are: offences regarding the Monarchy, the Royal Family and the Regent in accordance with Sections 107-112 of the Criminal Code; offences against the national security in accordance with Sections 113-118 of the Criminal Code with the exception of the offences occurred in areas placed under the Internal Security Act or the Emergency Decree; and offences as announced by NCPO.
Order No 37 of the NCPO will remain effective until there are further changes.
Meanwhile, Colonel Winthai Suvaree, deputy spokesman of NCPO, said Sunday that NCPO would coordinate with the Foreign Ministry to take legal action against Robert Amsterdam, legal advisor of fugitive former prime minister Thaksin Shinawatra, for reportedly claiming that a government in exile would be set up.
Colonel Winthai said that Mr Amsterdam had committed activities deemed to be jeopardizing national security but added that it was rather difficult to approach him.


text:
Q: Do actions added with extraReducers on createSlice have the slice's name prefix added to their types? From the official doc's example:
https://redux-toolkit.js.org/api/createSlice#the-extrareducers-builder-callback-notation
import { createAction, createSlice } from '@reduxjs/toolkit'
const incrementBy = createAction<number>('incrementBy')
const decrement = createAction('decrement')

createSlice({
  name: 'counter',
  initialState: 0,
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addCase(incrementBy, (state, action) => { // DO SOMETHING })
      .addCase(decrement,   (state, action) => { // DO SOMETHING })
      .addDefaultCase((state, action) => {})
  },
})

Also from the docs:

One of the key concepts of Redux is that each slice reducer "owns" its slice of state, and that many slice reducers can independently respond to the same action type. extraReducers allows createSlice to respond to other action types besides the types it has generated.

QUESTION
In the example above, will the cases incrementBy and decrement also get the counter name as a prefix in their types?
Like:
"counter/incrementBy"
"counter/decrement"

Is this how the extraReducers property work?

A: No, because the entire point of extraReducers is that it does not generate any new action types.
extraReducers exists so that a slice reducer can listen to other action types that have already been defined outside the slice.

A: No. It does not get the name prefix.
https://codesandbox.io/s/xenodochial-dew-35ivq

import { createAction, createSlice } from "@reduxjs/toolkit";

interface CounterState {
  value: number;
}

export const decrementV2 = createAction('decrement');

const initialState = { value: 0 } as CounterState;

const counterSlice = createSlice({
  name: "counter",
  initialState,
  reducers: {
    increment(state,action) {
      console.log(`action.type: ${action.type}`);
      state.value++;
    },
    decrement(state,action) {
      console.log(`action.type: ${action.type}`);
      state.value--;
    }
  },
  extraReducers: (builder) => {
    builder.addCase(decrementV2, (state, action) => {
      console.log("FROM decrementV2 (from extraReducers)")
      console.log(`action.type: ${action.type}`);
      state.value--;
    });
  }
});

export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;

redpajama_set_name: RedPajamaStackExchange


I am your Inn Keeper, Pamela Jean Young. It has been a lifelong dream of mine to have an Inn, so everyone who visits can enjoy the Island as I do. Come share in the history of Jackson Harbor, it will be a pleasure to meet you!
The Jackson Harbor Inn house was built in 1904 by Rasmus Hansen. He owned the dock and the land next door now known as the Ridges. Shortly after, he purchased Rock Island. He sold Rock Island a few years later to Mr. Thordarson so his wife could return to her homeland for a visit as she was homesick. Rasmus had a general store in the building. He was a boat builder and a commercial fisherman for many years using the upstairs of the newly renovated Harbor House to mend his nets.
His son Art took over the Inn and added cottages on the Ridges which he rented out till the 1970s. Then he sold the dock and the Ridges to the town of Washington.
The Inn has had a variety of owners since. In 2006, I purchased the Inn and started an intense remodeling – updating and enhancing the beauty of Jackson Harbor. My grandfather, Fred Young, was a commercial fisherman and I grew up right around the corner from the Inn. My father, Larry Young, has been a builder on the Island for over 30 years.


text:
Q: Variable interference with threads Thread t1= new Thread(new Runnable() {
            public void run() {
                //perform Database stuff
            }
        });
t1.start();
initCache();//perform other Database stuff (Can this code be executed while thread 1 is running?)

How can I make sure the initCache method is forced to wait after t1 finishes?

A: Don't run it in a different thread to start with?
You could call t1.join() but really, if you want to run task X and then task Y, just run them in the same thread...

A: If you want initCache() to only run after t1 has finished running, then why do you start t1 in the first place?
Simply execute the code in run() and then initCache().
If there's some other action happening between t1.start() and initCache(), then you could use t1.join() to wait for t1 to finish before calling initCache().

A: Using join()? Seriously? Did the 90's called because they want their low-level synchronization facilities back?
What about something a bit more high-level? Like a CountDownLatch?
final CountDownLatch cdl = new CountDownLatch(1);
Thread t1= new Thread(new Runnable() {
            public void run() {
                //perform Database stuff
                cdl.countDown();
            }
        });
t1.start();
cdl.await();
initCache();

Can also be configured with a timeout etc.

A: while (t1.isAlive()) {
  try {
    Thread.currentThread().sleep();
  }
  catch (InterruptedException e) {
    //check again
  }
}
initCache();

That should do it. Although actually the t1.join() method is a hell of a lot simpler.


Our toilet roll holder for cubicles is manufactured from grade 304 stainless steel with a smooth satin finish, offering a low maintenance and hygienic solution for public washroom facilities. Designed for the modern washroom in mind, this stainless steel toilet roll holder with surface fix is highly corrosion resistant.
This toilet roll holder for cubicles is sold singly and supplied complete with fixing screws ready for installation onto the cubicle partition. The item measures 134mm in length and 80mm in height.


text:
Presentation of the owner
This "Site" is the property of the company AGENCE TUESDAY, Simplified Joint Stock Company with a capital of € 1,000, whose head office is located at 10 rue de Penthièvre 75008 Paris, registered with the Paris Trade and Companies Register under number 521 436 170 and represented by M. Alban Picard.
Publication director: M. Alban Picard
Telephone: +33 1 83 84 44 40
Hosting: OVH, SAS with a capital of € 10,069,020
2 rue Kellermann, 59100 Roubaix.
General Conditions of Use of the "Site"
By using this "Site", the user expressly accepts the legal notices.
If you do not accept these legal notices, please do not use this website.
The internet user is informed that during his visits to this site, cookies can be automatically installed on his browser software. Cookies or "cookies" are small files stored on the hard drive of the user's computer that do not identify it but are only used to record information relating to the navigation of it on this site (the pages consulted, the date and time of the consultation, the browser it uses, etc.) in order to improve its visit to the site during subsequent connections.
These cookies also make it possible to establish statistics of frequentation of the site.
Most Internet browsers have systems that notify the user of the presence of a "cookie". The user can deactivate this function in their Internet browser.
The AGENCE TUESDAY website is an intellectual work protected by intellectual property law.
The site, its general structure, its organization, its content and in particular its:
texts,
Graphics,
brands,
Logos,
models,
Video clips,
And other creations,
Are the property of the Publisher for which the latter is the holder of all intellectual property rights, in particular under copyright, design law, database law.
Consequently, the user of the site is prohibited in particular from reproducing, representing, downloading, selling, distributing, emitting, translating, adapting, exploiting, distributing, disseminating and communicating, in whole or in part, in any form whatsoever, for commercial or not, any work of original spirit or data contained on the site.
The reproduction or representation, in whole or in part, of the pages, data and any other element constituting the AGENCE TUESDAY site, by any process or medium whatsoever, for any use other than personal and private, is prohibited and constitutes without authorization from the publisher a counterfeit.
The information disseminated does not engage the responsibility of AGENCE TUESDAY. We strive to keep them up to date and accurate. However, we cannot guarantee them. Please report any errors or omissions to us by writing to the above address.
Responsibility of the publisher
The use of the information available on this site is under the full and sole responsibility of the User, who assumes all of the consequences that may arise from it, without the Publisher being able to be sought in this capacity and without recourse against the latter .
Furthermore, the Publisher cannot be held responsible for any malfunctions of the site attributable to interruptions in the services of the User's access provider or those of the internet network.
Update date: March 2020


DJ Premier Blog » Blog Archive » DJ Premier talks about unreleased Gang Starr project and more!
DJ Premier talks about unreleased Gang Starr project and more!
This page took 0.225 seconds of computer labor to produce.


text:
DAVIDSON: Twelve Observations on Life to Contemplate
You can gain wisdom by listening to others with a non-judgmental ear.
Every person on the planet has some knowledge that could benefit others, including the people you work with everyday. Never write-off others because they are too old, too young, too rich, too poor, or for any other superficial reason. You'll be surprised by the wisdom you can gain by simply listening with a non-judgmental ear.
The First Six
1. Do not lament that you're not smarter than you are, or that you're not as good at something as you would like to be. You can accomplish nearly anything you want through hard work. Your skills develop over the course of your life, and you can develop new ones. Maybe your boss will foot the bill for training, or maybe you have to enroll and pay for yourself. Further, recognize the things at which you are adept and put your talents to use, rather than struggling to excel in the wrong career.
2. It is of little use to dwell on the past and wish you could change it. Making mistakes and feeling as if you've squandered time is a natural part of life that happens to everyone. Anew, view your youth with a healthy perspective; while you might have squandered some time, you probably also accomplished a lot and had some fun along the way.
3. Never become so caught up in dwelling on your mistakes that you fail to seize present opportunities. You have time left in your life to move on and use it productively.
4. Regard change as a recurring event. It's a part of life and certainly part of your work. You won't be the same person at 30 that you were at 20, or the same at February 25, 2020 that you will be at 40 or 60. Growing in all different ways is a good thing. If you went through life with the mindset of a 20 year old, you would miss a lot of the joys of adulthood. While change can be disconcerting at first, each stage of life becomes more (or at least as) enjoyable and fulfilling than the previous one.
5. Make a constant effort to grow. Challenge yourself mentally. Explore different means of spirituality. Place yourself in new social situations. Unfamiliar scenarios are usually a little frightening at first but, with time, the unfamiliar becomes the familiar, and you're glad you took the chance. Move out of your comfort zone and explore.
6. Stay flexible. In our rapidly changing society, it's easy to feel overwhelmed by all the technological innovations and information you think you need to absorb in order to function productively at work and even at home. Rest assured that everyone feels the same way. Remaining flexible is key to maintaining productivity. Find ways to make the changes in your work life advantageous.
The Second Six
7. Life is a continuing process, and there is no one point when you become magically grown up and have accomplished everything you wanted. If there was such a point, what would you do when you got there?
8. The nature of life is to constantly grow and change, and there is always more to learn and experience. Be wary of feeling as if you have reached the pinnacle of all of your experiences and accomplishments. If you become complacent, that point really will be the pinnacle of your life, since you won't feel compelled to achieve even more.
9. You only have so much time and energy in your life. To feel fulfilled, you must choose what things you want to spend most of your time and energy doing. Choosing your priorities might take some soul-searching, or they might be obvious. Is family most important to you? Or, do you envision a time-consuming career? Whatever your interests, you must define your priorities in order to be productive. You can try to have a dozen different 'priorities,' but they will hardly be priorities, and you likely won't pay sufficient attention to each. Decide what few things are important to you, and spend most of your time and energy supporting those priorities.
10. Never underestimate the power of your attitude and the effect it has on your perceptions. In general, people see what they want to see. If you've heard something negative about a person before you meet them, you are more likely to dislike that person right off the bat, regardless of anything they do or say. The same holds true for almost every situation in life: There are both beautiful and horrible things in the world. If you think positively, you're more likely to notice the beautiful things. If you think negatively, you will pick up on all the not-so-great things that occur.
11. Many people seem to blame the mistakes in their life on some unseen force that constantly brings them down. They think they are just unlucky or that others are out to get them. For the most part, this is not the case. Almost everything that happens to us results from the choices we make, consciously or unconsciously. Not choosing becomes a choice in itself. Don't ignore the tough choices you will have to make.
Blaming fate for your misfortunes leads nowhere; taking control of your life and the choices you face does. To empower yourself, recognize the choices in your life for what they are and consciously make the best decision you can. Something completely random will happen to you occasionally and you have no control over that. Still, realize that most of the things that happen to you don't merely "happen to you."
12. Making effective decisions can be difficult. The best decisions result from careful thought. However, don't ignore your gut feeling about something. We have instincts for a reason, and such instincts don't often lead you astray. Sometimes it is detrimental to overthink an issue; instead go with what 'your little' voice tells you. You'll be surprised how much you don't realize you already know. The subconscious is a powerful thing. When you can harness some of that power and put it to use in the conscious world, you will find that the things your little voice tells you are usually on target.
Related Topics:bidenContemplateFeaturedlifeObservationsopinionTrump
Operation Wind Fall: Lessons From Biden's Failed Mission to Board Air Force One (Opinion)
Boulder Grocery Store Killer Is 21-Year-Old Man Ahmad Al Aliwi Alissa, Born In Syria (Details)
Biden Policy Losses Mount | Schaftlein Report
Is the Biden Agenda Dead or can he triangulate toward the middle?
1) The Biden Agenda Dead or can he triangulate toward the middle?
*We've seen nothing to indicate he will do this as he is beholden to his radical base and the leftists in the White House will NOT permit it
2) Policy Losses Mount
*Filibuster – Sen. Sinema say NO
*Vaccine Mandates – Supreme Court says NO
*Build Back Better – Sen. Manchin says NO
*Voting Rights – Divisive Speech looks like the bill has NO Republican support and will be Filibustered – Sen. Schumer sets vote this week.
*Inflation Running Hot – Replace Yellin? – He's lost the people
*Covid – Little Progress
*No more $300Children Payments (for now)
*No Climate Bills (for now)
*Border – Still wide open
3) In Virginia, the new Governor Glen Youngkin abolishes Critical Race Theory and removes Vaccine Mandates
4) From the Lunatic Democratic Left: 59% of Unvaxxed should be confined to home, 45% placed in Designated Facilities and 48% fined or incarcerated
5) In January 2021, more people identified at Democratic or leaning Democratic by 49-40% – Now, those numbers have flipped 14 points to 42 Democrat and 47 Republican, +9 to -5
https://rumble.com/embed/vq5rym/?pub=4 Biden Policy Losses Mount | Schaftlein Report —————— Topics: 1) The Biden Agenda Dead or can he triangulate toward the middle? *We've seen nothing to indicate he will do this as he is beholden to his radical base and the leftists in the White House will NOT permit it 2) Policy Losses Mount *Filibuster – Sen. Sinema say NO *Vaccine Mandates – Supreme Court says NO *Build Back Better – Sen. Manchin says NO *Voting Rights – Divisive Speech looks like the bill has NO Republican support and will be Filibustered – Sen. Schumer sets vote this week. *Inflation Running Hot – Replace Yellin? – He's lost the people *Covid – Little Progress *No more $300Children Payments (for now) *No Climate Bills (for now) *Border – Still wide open 3) In Virginia, the new Governor Glen Youngkin abolishes Critical Race Theory and removes Vaccine Mandates 4) From the Lunatic Democratic Left: 59% of Unvaxxed should be confined to home, 45% placed in Designated Facilities and 48% fined or incarcerated 5) In January 2021, more people identified at Democratic or leaning Democratic by 49-40% – Now, those numbers have flipped 14 points to 42 Democrat and 47 Republican, +9 to -5
The Globalist's Fanatical Quest for a One-world Government
Every activity of the Left is designed to diminish the strength, status, and sovereignty of the U.S.
What has happened in the United States in the last 14 months? It doesn't even seem like our own nation any more. People who riot in the streets are described by the lamestream media as 'peaceful protesters.' District Attorneys let hardened criminals out of jail. Grammar schools indoctrinate in our children, teaching them to hate America.
Who Is Running the Asylum?
Governors mandate restrictions of their citizens, while flagrantly breaking their own rules. The Biden administration, run by who knows who, actively undermines the "1776 Project" — which was designed to offer a balanced perspective on American history. Instead Biden and company support the misdirected "1619 Project," launched by New York Times, which claims that the real founding of the U.S. started when slaves were first shipped across the Atlantic.
We have witnessed thousands of strange assertions, end runs around the law, and media flights of complete fantasy. The creepy, illegal, unpatriotic, absurd positions of the Left are unfolding at an increasing pace. Whether it's defacing property, ruining women's sport by allowing biological males to compete, desecrating church symbols, renaming schools, defaming Dr. Seuss, or re-assigning the sex of a plastic toy potato, the Left know no bounds.
Those in a position to call them out, our elected representatives, as well as opinion makers, too often say little or nothing.
Marching to Madness
Is there a common denominator to all of the heartless and heart-sickening behaviors that we've witnessed for months on end now, and realistically, on a lesser level, for years? Actually, the answer is yes
Every activity of the Left, from tiny to gargantuan, in one form or another, is designed to diminish the strength, status, and sovereignty of the U.S. Whether it's seeking to overrun the country with illegal immigrants, pack the Supreme Court, smear Supreme Court nominees, besmirch local officials, cancel the careers of people who've made one errant statement even if it was 30 years ago, and so on, all such activities have a common denominator.
The common denominator is to vanquish the opposition thoroughly, vanquish the U.S. Constitution, ignore due process, overturn the right of habeas corpus, obliterate 'one person one vote,' and much more, so that as a nation we are left in tatters.
"We Know Best"
If the U.S. declines in stature and power, the global elite believe that they move closer and closer to their goal of having a 'one world government.' Headed by global elites – Leftist multi-million dollar career politicians and Leftist billionaires, who pull the strings around the world – such a government supposedly will produce the utopian society that Left fervently desires.
Utopias don't exist, however, could not work if they did, and would end up enslaving their citizens. Read Utopia by Sir Thomas More, Leviathan by Thomas Hobbes, The Republic by Plato, or any other treatise on supposedly ideal societies. You will quickly understand that the elite invariably will regard the citizenry with disdain, nothing more than serfs – worker drones – who are to act according to how they are manipulated and who will do exactly what they are told.
By any measure, the global elite's decades-long quest for a one-world government is exceedingly far from Americans ideals. Indeed, it so distant from what our Constitution guarantees, and so far from the spirit of the Declaration of Independence, that it is beyond chilling.
A Sordid Vision
If America falls, the whole world falls, except for the Chinese Communists. They will control at least half of the globe, and their form of government is going to be worse than what the global elites have in mind. The Chinese are already experimenting with creating biologically enhanced 'super soldiers', more powerful than the average soldier.
They already have imprisoned thousands if not hundreds of thousands of people in slave labor camps. They already have surveillance cameras in their larger cities to a degree that you cannot imagine. In time, it might be shown that they intentionally released the Wuhan virus on the world. Who can say right now?
The global elites, as well as the Chinese Communists, must be contained and, in time, stopped. It will be a monumental task, but we stopped Hitler and Mussolini, we overcame the monolithic Soviet Union, and we can prevail now as well. It will require Gen Xers and Millennials to break away from the Left's cultural stranglehold. And as they do, they will find that least 75 million Trump voters will be on their side.
What has happened in the United States in the last 14 months? It doesn't even seem like our own nation any more. People who riot in the streets are described by the lamestream media as 'peaceful protesters.' District Attorneys let hardened criminals out of jail. Grammar schools indoctrinate in our children, teaching them to hate America. Who Is Running the Asylum? Governors mandate restrictions of their citizens, while flagrantly breaking their own rules. The Biden administration, run by who knows who, actively undermines the "1776 Project" — which was designed to offer a balanced perspective on American history. Instead Biden and company support the misdirected "1619 Project," launched by New York Times, which claims that the real founding of the U.S. started when slaves were first shipped across the Atlantic. We have witnessed thousands of strange assertions, end runs around the law, and media flights of complete fantasy. The creepy, illegal, unpatriotic, absurd positions of the Left are unfolding at an increasing pace. Whether it's defacing property, ruining women's sport by allowing biological males to compete, desecrating church symbols, renaming schools, defaming Dr. Seuss, or re-assigning the sex of a plastic toy potato, the Left know no bounds. Those in a position to call them out, our elected representatives, as well as opinion makers, too often say little or nothing. Marching to Madness Is there a common denominator to all of the heartless and heart-sickening behaviors that we've witnessed for months on end now, and realistically, on a lesser level, for years? Actually, the answer is yes Every activity of the Left, from tiny to gargantuan, in one form or another, is designed to diminish the strength, status, and sovereignty of the U.S. Whether it's seeking to overrun the country with illegal immigrants, pack the Supreme Court, smear Supreme Court…
Opinion24 mins ago


text:
Joe Biden, say it ain't f------ so!
Last week, Vice President Joe Biden pronounced the mother of the Irish Prime Minister dead during a St. Patrick's event at the White House. He quickly apologized to the hale and hearty Mrs. Cowen. This week, he swore, saying "this is a big f------ deal," when he embraced President Barack Obama after the signing ceremony for the health care bill. Microphones clearly picked it up. Joe should listen to his own advice: After last week's gaffe, he quickly quoted an old Irish proverb, "Is Binn Beal in a Thost," which means "Sweet is the mouth that's shut." Joe could learn a lot from that proverb.
Niall O'Dowd
Last week, Vice President Joe Biden pronounced the mother of the Irish Prime Minister dead during a St. Patrick's event at the White House.
He quickly apologized to the hale and hearty Mrs. Cowen.
This week, he swore, saying "this is a big f------ deal," when he embraced President Barack Obama after the signing ceremony for the health care bill. Microphones clearly picked it up.
Joe should listen to his own advice: After last week's gaffe, he quickly quoted an old Irish proverb, "Is Binn Beal in a Thost," which means "Sweet is the mouth that's shut."
Joe could learn a lot from that proverb.


Municipal Election: "2019 Municipal Elections" - "City and County of Denver" - - "2011 Municipal Elections 2015". Does Wikipedia and Ballotpedia know? "Candidate Marcus Giavanni is the Icon for representing Denver citizens since 2011. "Marcus Giavanni" was denied on the 2011 ballot, and made the 2015 ballot. And Marcus Giavanni came in 2nd Place for "Denver Mayoral Election in 2015" to "Denver Mayor Michael Hancock".


In 2013, former Formula One Champion Michael Schumacher fell while skiing and suffered a traumatic brain injury even though he was wearing a helmet. The culprit? Some sources blame his helmet-mounted GoPro. Although fears that the camera were later allayed, some skiiers are still thinking twice about mounting devices in such a manner. Now, a company called Sweet Protection has designed the first snow helmet capable of protecting you from your action camera.
Think about it for a second. Attaching a small, strong, sharp-sided implement securely to your helmet creates two problems: 1) it means you're almost certain to fall onto something hard and protruding in any significant crash and 2) the strength of its mount and its pokey-outy nature basically attaches a lever which will apply rotational torque to your head and neck if it catches on something or jams in the snow. Both are bad.
Because wearers require their helmets to be as light and slim as possible, they just haven't been designed to specifically account for the potential problems created by action cameras. Fall and hit a rock, sure. But fall and hit a rock with a small, strong block of plastic in the way and that's a whole other type of impact. Cameras create more potential for penetration and more rotational forces.
Enter this new $450 (£301) Sweet Grimnir. The snow helmet's carbon fibre-reinforced plastic shell is made stronger behind two dedicated mounting points: one on the forehead for a GoPro and one on the side for a Contour or similar. That prevents the cameras from being rammed through the shell, but the problem with additional rotational forces remains.
To address that, Sweet has designed built-in mounting points that screw into the helmet's shell. That makes them much more easily removable than the press-on pads that most people use now and, removing both the cameras and the mounts eliminates protrusions that may "grab" during a fall and twist your head, brain and neck.
To be clear, that danger remains while the camera or its mount is attached to the helmet.
At 600 grams, the Grimnir remains very light, but is around 100 grams heavier than equivalent helmets without the reinforcement or mount threads. The helmet meets both the EN 1077 and ASTM 2040 safety standards.
Additionally, Grimnir is fitted with the MIPS anti-rotation technology and, by varying the direction and weave patterns of the carbon fibers in the polymer shell, Sweet says it's been able to take out weight while providing impact absorption tailored to the shapes and strengths of the human skull.
You know, so your next holiday video won't include footage of you going into a coma.


A splendid choice as a business gift: a collection of early 20th-century Finnish national romantic orchestral music (...) gorgeous illustrations add to a fine CD product.
A successful album, which forms an ideal present for others or yourself. You could not imagine a better visiting card for Finland!
This CD + photo album product features a fine collection of 12 Finnish orchestral gems (including Valse triste by Sibelius, Wedding March by Toivo Kuula and Valse lente by Oskar Merikanto), newly recorded under the direction of chief conductor Leif Segerstam. The booklet includes 18 carefully chosen colour photographs of typical Finnish landscapes, which illustrate the inspiration which the featured composers draw from their relationship with Finnish nature.
This digipak album was released in 2007 in celebration of the Helsinki Philharmonic Orchestra's 125th anniversary. The Helsinki Philharmonic Orchestra was founded in 1882 and remains the oldest professional symphony orchestra in the Nordic countries. It gave the first performances of almost all the symphonic works by Jean Sibelius (1865-1957) with the composer himself conducting.


The annual Arizona Challenge is an elite, invitational event run by US 4-way Champions Arizona Airspeed, as their way of giving back to skydivers who support the team. The event and the team have been going for over 20 years.
Friday saw four groups of 16 or 20 skilled flyers each with one or two Airspeed coaches, who had carefully crafted some complicated, difficult skydives you'd never have the audacity to try at your average weekend. The groups are designed to be equally matched and that proved to be the case as every load had a day of brilliant skydiving. About 75 per cent of participants were Challenge veterans but the mix included an influx of new blood. Airspeed had set a specific goal of recruiting rising young jumpers, from teams they coached, recommendations and talent-spotting. The standard seemed higher than last year, and the jumpers were expertly managed by the coaches, putting people in the right slots for successful skydives. Jumps were out of 2 aircraft, a Skyvan or Otter in the lead and a trail Twin Otter. It's super fun, a fast build and a rare treat to do 16-way out of 2 planes.
Saturday saw different groups for each coach, so everyone got to make some new friends and allegiances, and each person rotated through base, floater and diver, in trail and lead planes. This gave everyone a chance to try everything, kept it fresh and allowed the coaches to evaluate the jumpers. There was a brilliant energy from the very beginning and this built steadily each day, as the skydives were consistently good.
The wide variety of designs, formations and elements really kept these small jumps enjoyable. It's useful for the coaches to try elements of Monday's Challenge formation, and try out people in various slots but this was balanced with a huge range of other stuff, keeping it fun and leaving us guessing at this year's theme. Ari and Mikhail's group for example took an 8-way zipper flake vertically over another and re-docked them. Eliana's 16-way group completed the 4-way dive 7, 4, with 4-way zippers as individuals.
I loved some of the second point ideas, especially one where the base released grips and all ended up outfacing (above). An inventive folding in around the grip between cats charmed us and gave everyone the chance to fly. Finally we finished the day with a smaller jump, planned the previous day but stopped by over-excited winds.
The energy and talent of the assembled skydivers, plus the standard of jumps so far led me to believe we would complete the formation well inside the five skydives planned. The first jump - at 16,000 feet using oxygen - saw it 90 per cent complete, with just a small section out. A different corner was absent on jump 2, and the formation developed a life of its own, with big squirling waves like rolling surf going through the formation.
This next skydive proved to be successful, completing the puzzle, making a perfect triangular Airspeed logo - or depending what way up you viewed it – a Thong!
The formation design was inherently the same structure as the Sequential Games 17-Rings dive, completed in Klatovy, 2017. Niklas got his inspiration from the Olympic Rings skydive, Seoul, 1989. The Sequential Games design team of Patrick Passe and Dieter Kirsch were inspired by a book cover, The Flower of Life, and crafted a formation based on the Olympic Rings dive of 1989… so ultimately both formations were born out of the Olympic Rings.
How did we do with our goals?
1. SAFETY - was excellent throughout, with a happily uneventful Challenge. Two ankle injuries on landing – so we all walked away even if on crutches! Check!
2. FUN – yes we had loads of fun and brilliantly successful skydives on all four days. You could see Nik, Mikhai, Ari, Thiago, Eliana and Mark enjoyed themselves too… and that is key. When, as an organizer, you can enjoy your own event, because you've done the prep and can relax into having fun, controlling the things you can and letting go of the rest. Job done!
3. COMPLETION – yes, we did it.
Scotty gave me another piece of Tom, wrapped in a small piece of paper, to take home with me, and release over European dropzones on my tour – Hohenems (Austria), Hibaldstow (UK), Kharkiv (Ukraine), Moorsele (Belgium) and Alvor (Portugal). Yes it feels weird going through customs with a small paper wrap of white powder! But, anything for Tom!