text:
package ai.ku.model;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JOptionPane;
import javax.vecmath.Matrix4d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;

import ai.ku.animation.MoveAnimation;
import ai.ku.astar.AStar;
import ai.ku.astar.ShortestPathStep;
import ai.ku.drawing.AIPoint;
import ai.ku.drawing.AIRect;
import ai.ku.drawing.AISize;
import ai.ku.math.AIVector;
import ai.ku.nlp.AIAdjective;
import ai.ku.nlp.AINoun;
import ai.ku.nlp.AIPOS;
import ai.ku.nlp.AIPreposition;
import ai.ku.nlp.AIPreposition.Preposition;
import ai.ku.nlp.Parser;
import ai.ku.nlp.WordNetFinder;
import ai.ku.reasoning.Oracle;
import ai.ku.resource.SynsetRepository;
import ai.ku.util.GeomUtils;
import ai.ku.util.Logger;
import ai.ku.util.Randomizer;
import ai.ku.util.Scale;

import com.bulletphysics.BulletStats;
import com.bulletphysics.collision.broadphase.BroadphaseInterface;
import com.bulletphysics.collision.broadphase.DbvtBroadphase;
import com.bulletphysics.collision.dispatch.CollisionDispatcher;
import com.bulletphysics.collision.dispatch.CollisionObject;
import com.bulletphysics.collision.dispatch.DefaultCollisionConfiguration;
import com.bulletphysics.collision.shapes.BoxShape;
import com.bulletphysics.collision.shapes.CollisionShape;
import com.bulletphysics.dynamics.DiscreteDynamicsWorld;
import com.bulletphysics.dynamics.RigidBody;
import com.bulletphysics.dynamics.RigidBodyConstructionInfo;
import com.bulletphysics.dynamics.constraintsolver.ConstraintSolver;
import com.bulletphysics.dynamics.constraintsolver.SequentialImpulseConstraintSolver;
import com.bulletphysics.linearmath.Clock;
import com.bulletphysics.linearmath.DefaultMotionState;
import com.bulletphysics.linearmath.Transform;
import com.bulletphysics.util.ObjectArrayList;

import edu.cmu.cs.stage3.alice.authoringtool.AuthoringTool;
import edu.cmu.cs.stage3.alice.authoringtool.WorldFrame;
import edu.cmu.cs.stage3.alice.authoringtool.util.ElementPopupUtilities.DeleteRunnable;
import edu.cmu.cs.stage3.alice.core.Direction;
import edu.cmu.cs.stage3.alice.core.Model;
import edu.cmu.cs.stage3.alice.core.World;
import edu.cmu.cs.stage3.alice.scenegraph.event.AbsoluteTransformationEvent;
import edu.cmu.cs.stage3.alice.scenegraph.event.AbsoluteTransformationListener;
import edu.cmu.cs.stage3.math.Box;
import edu.cmu.cs.stage3.math.Vector3;
import edu.stanford.nlp.util.StringUtils;
// import ai.ku.nlp.WordNetFinder;

public class ModelExtractor implements AbsoluteTransformationListener {

	// private POSTagger tagger;
	private AuthoringTool authoringTool;
	private WorldFrame frame;

	public ModelExtractor(AuthoringTool authoringTool, WorldFrame frame){
		WordNetFinder.init();
		SynsetRepository.init();
		Parser.init();
		// tagger = new POSTagger();
		this.authoringTool = authoringTool;
		this.frame = frame;
	}

	public void checkWNFirst(AINoun noun) {
		ArrayList<AIAdjective> mods = noun.getModifiers();
		for(int i=0;i<mods.size();i++)
		{
			ArrayList<AIAdjective> adjs = new ArrayList<AIAdjective>();
			for( int j = i; j < mods.size(); j++ )
				adjs.add(mods.get(j));

			String value = "";
			for( int j = 0; j < adjs.size(); j++ )
			{
				value += adjs.get(j).value();
				if( j != adjs.size()-1 ) value += " ";
			}
			value += " "+noun.getStem();
			Logger.log(value);
			if( WordNetFinder.getInstance().hasNounPhrase(value) )
			{
				noun.setValue(value);
				for(int j=0;j<adjs.size();j++)
					mods.remove(adjs.get(j));
				Logger.log("included");
			}
		}
	}

	public void startQuery() {
		String question = JOptionPane.showInputDialog(null, "Ask me:", "JLangVis", JOptionPane.QUESTION_MESSAGE).toLowerCase();

		// StringTokenizer tokenizer = new StringTokenizer(question);

		if( question == null || question.equals("") )
			return;

		HashMap<Integer,AIPOS> posIndexMap = new HashMap<Integer,AIPOS>();

		for( AIPOS pos : posModelMap.keySet() ) {
			// Logger.log(""+pos.value()+" "+posModelMap.get(pos).getModel().getRepr());
			int index = question.indexOf(pos.value());
			if( index >= 0 ) {
				posIndexMap.put(index, pos);
				// Logger.log(""+ index + " : "+pos.value());
			}
		}

		ArrayList<Integer> idxs = new ArrayList<Integer>();
		for( Integer i:posIndexMap.keySet() )
			idxs.add(i);
		Collections.sort(idxs);

		String answer = "I do not know.";

		if( idxs.size() == 1 )
		{
			AIPOS posA = posIndexMap.get(idxs.get(0));
			Model A = posModelMap.get(posA).getModel();

			if( question.contains("where") )
			{
				answer = StringUtils.capitalize(posA.value())+ " is ";
				for( AIPOS posB : posModelMap.keySet() )
				{
					Model B = posModelMap.get(posB).getModel();
					if( B.equals(A) )
						continue;
					else
					{
						answer += ( A.isInFrontOf(B) ) ? "in front of the "+posB.value()+", " : "";
						answer += ( A.isBehind(B) ) ? "behind the "+posB.value()+", " : "";
						answer += ( A.isLeftOf(B) ) ? "on the left side of the "+posB.value()+", " : "";
						answer += ( A.isRightOf(B) ) ? "on the right side of the "+posB.value()+", " : "";
						answer += ( A.isAbove(B) ) ? "above the "+posB.value()+", " : "";
						answer += ( A.isBelow(B) ) ? "below the "+posB.value()+", " : "";
						answer += ( Oracle.isInside(A, B) ) ? "in the "+posB.value()+", " : "";
					}
				}
				if( !answer.equals(posA.value()+ " is ") )
				{
					answer = answer.substring(0, answer.length()-2);
					answer += ".";
				}
			}
		}
		else if( idxs.size() == 2 )
		{
			AIPOS posA = posIndexMap.get(idxs.get(0));
			AIPOS posB = posIndexMap.get(idxs.get(1));
			Model A = posModelMap.get(posA).getModel();
			Model B = posModelMap.get(posB).getModel();
			Logger.log("Checking A:"+A.getRepr()+", B:"+B.getRepr());

			if( question.contains("in front of") )
				answer = ( A.isInFrontOf(B) ) ? "Yes" : "No";
			else if( question.contains("behind") )
				answer = ( A.isBehind(B) ) ? "Yes" : "No";
			else if( question.contains("left of") )
				answer = ( A.isLeftOf(B) ) ? "Yes" : "No";
			else if( question.contains("right of") )
				answer = ( A.isRightOf(B) ) ? "Yes" : "No";
			else if( question.contains("above") )
				answer = ( A.isAbove(B) ) ? "Yes" : "No";
			else if( question.contains("below") )
				answer = ( A.isBelow(B) ) ? "Yes" : "No";
			else if( question.contains("see") ) {
				answer = ( Oracle.canSee(A, B, models) ) ? "Yes" : "No";
			}
			else if( question.contains("intersect") )
				answer = ( Oracle.intersects(A, B) ) ? "Yes" : "No";
			else if( question.contains("inside") || question.contains("in") )
				answer = ( Oracle.isInside(A, B) ) ? "Yes" : "No";

			Logger.log("Answer: "+answer);
		}
		else if( idxs.size() == 3 )
		{
			AIPOS posA = posIndexMap.get(idxs.get(0));
			AIPOS posB = posIndexMap.get(idxs.get(1));
			AIPOS posC = posIndexMap.get(idxs.get(2));
			Model A = posModelMap.get(posA).getModel();
			Model B = posModelMap.get(posB).getModel();
			Model C = posModelMap.get(posC).getModel();

			if( question.contains("between") )
				answer = (A.isBetween(B, C) ) ? "Yes" : "No";
		}

		JOptionPane.showMessageDialog(null, answer);

	}

	public void extractModels(String text) {

		if( Parser.getInstance() == null )
			Logger.log("null parser");
		else
			Logger.log("parser valid");

		/*
		// creates a StanfordCoreNLP object, with POS tagging, lemmatization, NER, parsing, and coreference resolution
	    Properties props = new Properties();
	    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
	    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

	    // read some text in the text variable
	    // String text = "Alice is in the room. She is sitting on the sofa. She was looking pale."; // Add your text here!

	    // create an empty Annotation just with the given text
	    Annotation document = new Annotation(text);

	    // run all Annotators on this text
	    pipeline.annotate(document);

	    // these are all the sentences in this document
	    // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types
	    List<CoreMap> sentences = document.get(SentencesAnnotation.class);

	    for(CoreMap sentence: sentences) {
	      // traversing the words in the current sentence
	      // a CoreLabel is a CoreMap with additional token-specific methods
	      for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
	        // this is the text of the token
	        String word = token.get(TextAnnotation.class);
	        // this is the POS tag of the token
	        String pos = token.get(PartOfSpeechAnnotation.class);
	        // this is the NER label of the token
	        String ne = token.get(NamedEntityTagAnnotation.class);

	      }

	      // this is the parse tree of the current sentence
	      Tree tree = sentence.get(TreeAnnotation.class);

	      // this is the Stanford dependency graph of the current sentence
	      SemanticGraph dependencies = sentence.get(CollapsedCCProcessedDependenciesAnnotation.class);
	    }

	    // This is the coreference link graph
	    // Each chain stores a set of mentions that link to each other,
	    // along with a method for getting the most representative mention
	    // Both sentence and token offsets start at 1!
	    Map<Integer, CorefChain> graph = document.get(CorefChainAnnotation.class);

	    for( Integer i : graph.keySet() ) {
	    	CorefChain cc = graph.get(i);
	    	Logger.log(cc.getRepresentativeMention().gender.toString());
	    	Logger.log("Printing mentions...");
	    	List<CorefMention> cms = cc.getCorefMentions();
	    	for( CorefMention cm : cms ) {
	    		Logger.log("Gender: "+cm.gender.toString());
	    		Logger.log("Mention ID: "+cm.mentionID);
	    		Logger.log("Mention Type: "+cm.mentionType);
	    		Logger.log("Mention Span:"+cm.mentionSpan);
	    	}
	    }

	    text = text.replace("alice", "girl");
		 */

		WordNetFinder wordNet = WordNetFinder.getInstance();
		ArrayList<AINoun> nouns = Parser.getInstance().parse(text.toLowerCase());
		for( AINoun noun : nouns ){
			int count = Parser.getInstance().parseNumber(noun.getCount());
			checkWNFirst(noun);

			AIModel aiModel = wordModelMap.get(noun.value());
			if( aiModel == null || !noun.getDeterminer().equals("the") ) {
				for(int i=0;i<count;i++) {
					Model mod = this.retrieveModel(noun.value(), noun.tag());
					if( mod != null ) {

						AIModel model = new AIModel(mod);
						model.setGround(this.getGround());
						// model.setGround( new AIModel( (Model)mod.getWorld().getChildAt(5) ) );

						// Model box = this.createAndAddBox();
						// model.setBox(box);

						/*
						for( int k = 0; k < mod.getWorld().getChildCount(); k++ ) {
						Logger.log(""+mod.getWorld().getChildAt(k).getRepr());
						}
						 */

						for( AIAdjective adj : noun.getModifiers() ) {
							// String id = WordNetFinder.getInstance().getSynsetID(adj.value(), adj.tag());
							ArrayList<String> ids = wordNet.getSynsetIDs(adj.value(), adj.tag());
							for( String id : ids ) {
								String property = wordNet.getSynsetProperty(id);
								if(property!=null) Logger.log("Property: " + property);

								String modifier = SynsetRepository.getInstance().getModifier(id);
								Logger.log("modifier:"+modifier);
								if( modifier != null )
								{
									Logger.log("resizing "+model.getModel().getRepr());
									ModelModifier.getInstance().modify(model.getModel(), new Scale(modifier));
								}
							}

							/*
							String attribute = WordNetFinder.getInstance().getSynsetProperty(id);
							if( attribute != null ) {
								Logger.log("Attribute:"+attribute);
								String function = SynsetRepository.getInstance().getFunction(attribute);
								Logger.log("function:"+function);
								if( function != null )
								{
									Logger.log("resizing "+model.getRepr());
									ModelModifier.getInstance().modify(model, function);
								}
							}
							 */
						}

						ModelPositioner.getInstance().placeOnGround(model);
						// AIModelPositionerWithSolver.getInstance().placeOnGround(model);

						posModelMap.put(noun, model);
						wordModelMap.put(noun.value(), model);
						models.add(model);

						// BubbleManager bm = new BubbleManager();
						// bm.setBubbles(new Bubble());

						// model.setupBox();
						// model.getModel().getAGoodLookAtRightNow(mod);
					}
					else {
						Logger.log("Model is null");
					}
				}
			}
			else if( noun.getDeterminer().equals("the") ) {
				Logger.log("using the old model");

				AIModel model = wordModelMap.get(noun.value());
				for( AIAdjective adj : noun.getModifiers() ) {
					// String id = WordNetFinder.getInstance().getSynsetID(adj.value(), adj.tag());
					ArrayList<String> ids = wordNet.getSynsetIDs(adj.value(), adj.tag());
					for( String id : ids ) {
						String modifier = SynsetRepository.getInstance().getModifier(id);
						Logger.log("modifier:"+modifier);
						if( modifier != null )
						{
							Logger.log("resizing "+model.getModel().getRepr());
							Scale scale = new Scale(modifier);
							ModelModifier.getInstance().modify(model.getModel(), model.getScale().inverse());
							ModelModifier.getInstance().modify(model.getModel(), scale);
							model.setScale(scale);
						}
					}
				}
			}
		}

		// HashMap<AIPOS,AIModel> posModelMap = new HashMap<AIPOS,AIModel>();
		for( AIPOS pos : posModelMap.keySet() ) {
			Logger.log(""+pos.value()+" "+posModelMap.get(pos).getModel().getRepr());
		}

		ArrayList<AIPreposition> preps = Parser.getInstance().getPreps();
		for( AIPreposition prep : preps ) {
			AIPOS Apos = prep.getSource();
			AIPOS Bpos = prep.getTarget();
			// AIModel A = posModelMap.get(Apos);
			// AIModel B = posModelMap.get(Bpos);
			AIModel A = wordModelMap.get(Apos.value());
			AIModel B = wordModelMap.get(Bpos.value());
			Preposition p = prep.getRelation();

			if( A == null )
				Logger.log("A is null! Value: "+Apos.value());
			if( B == null )
				Logger.log("B is null! Value: "+Bpos.value());

			if( A != null && B != null ) {
				System.out.println(""+A.getModel().getRepr()+" "+prep.toString()+" "+B.getModel().getRepr());
				ModelPositioner.getInstance().place(A, B, p);
				// AIModelPositionerWithSolver.getInstance().place(A, B, p);
				// A.setupBox();
				// B.setupBox();
			}
		}
		/*
		boolean printPositive = true;
		boolean printNegative = false;

		for( int i = 0; i < models.size(); i++ )
		{
			for( int j = i+1; j < models.size(); j++ )
			{
				// if( i == j ) continue;

				// Logger.log("Checking i"+i+", j"+j);
				Model A = models.get(i).getModel();
				Model B = models.get(j).getModel();

				// check in_front_of relation
				if(A.isInFrontOf(B) && printPositive)
					Logger.log(""+A.getRepr()+" is in front of "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not in front of "+B.getRepr());
				if(B.isInFrontOf(A) && printPositive)
					Logger.log(""+B.getRepr()+" is in front of "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not in front of "+A.getRepr());

				// check behind relation
				if(A.isBehind(B) && printPositive)
					Logger.log(""+A.getRepr()+" is behind "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not behind "+B.getRepr());
				if(B.isBehind(A) && printPositive)
					Logger.log(""+B.getRepr()+" is behind "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not behind "+A.getRepr());

				// check left_of relation
				if(A.isLeftOf(B) && printPositive)
					Logger.log(""+A.getRepr()+" is on the left of "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not on the left of "+B.getRepr());
				if(B.isLeftOf(A) && printPositive)
					Logger.log(""+B.getRepr()+" is on the left of "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not on the left of "+A.getRepr());

				// check right_of relation
				if(A.isRightOf(B) && printPositive)
					Logger.log(""+A.getRepr()+" is on the right of "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not on the right of "+B.getRepr());
				if(B.isRightOf(A) && printPositive)
					Logger.log(""+B.getRepr()+" is on the right of "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not on the right of "+A.getRepr());

				// check above relation
				if(A.isAbove(B) && printPositive)
					Logger.log(""+A.getRepr()+" is above "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not above "+B.getRepr());
				if(B.isAbove(A) && printPositive)
					Logger.log(""+B.getRepr()+" is above "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not above "+A.getRepr());

				// check below relation
				if(A.isBelow(B) && printPositive)
					Logger.log(""+A.getRepr()+" is below "+B.getRepr());
				else if( printNegative )
					Logger.log(""+A.getRepr()+" is not below "+B.getRepr());
				if(B.isBelow(A) && printPositive)
					Logger.log(""+B.getRepr()+" is below "+A.getRepr());
				else if( printNegative )
					Logger.log(""+B.getRepr()+" is not below "+A.getRepr());
			}
		}
		 */

		/*
		AITokenizer tokenizer = new AITokenizer(sentence);
		ArrayList<String> list = tokenizer.getTokens();

		for( int i = 0; i < list.size(); i++ )
		{
			String replace = list.get(i);
			if( replace.contains(" ") )
			{
				this.retrieveModel(replace, "NN");
				sentence = sentence.replace( replace, "");
			}
		}
		 */

		/*
		 * This was already commented out.
		ArrayList<String> list = WordNetFinder.getInstance().getNounPhrases( sentence );
		for(int i = 0; i < list.size(); i++ )
		{
			String replace = list.get(i);
			this.retrieveModel(replace, "NN");
			sentence = sentence.replace( replace, "");
		}
		Logger.log(list);
		 */

		/*
		Logger.log( tagger.tagString( sentence ) );
		ArrayList<TaggedWord> tagged = tagger.getTagged();
		// tagger.removeDeterminers(tagged); // remove determiners

		for( int i = 0; i < tagged.size(); i++ )
		{
			TaggedWord tw = tagged.get(i);
			String tag = tw.tag();
			String word = tw.word().toLowerCase();

			if( tag.contains("NN") )
				this.retrieveModel(word, tag);
		}
		 */

		// this.placeModels();
		// for(Model model:models) model.addAbsoluteTransformationListener(this);

		AIModel biggest = this.getBiggestModel();
		if( biggest != null ) {
			Timer timer = new Timer();
			timer.schedule( new PositionCameraTask( biggest.getModel(), this.getCamera() ), 2000 );
		}
		// AIModelPositionerWithSolver.getInstance().solveConstraintAndUpdatePosition(models);
		Logger.log("Done.");
	}

	public void getAGoodLookAtScene() {

		AIModel biggest = this.getBiggestModel();
		if( biggest != null ) {
			// Model first = (Model) authoringTool.getWorld().getChildAt(6);
			Model camera = this.getCamera();
			camera.getAGoodLookAtRightNow( biggest.getModel() );
		}
		// this.initWorld();
		// viewAll();
	}

	public Box getAllBoundingBox() {
		Box bm = new Box();
		for( AIModel m : models )
			bm.union( m.getBoundingBox() );
		return bm;
	}

	public void viewAll() {

		Model box = this.createAndAddBox();

		Box bm = new Box();
		for( AIModel m : models )
			bm.union( m.getBoundingBox() );

		Box bb = box.getBoundingBox( box.getWorld() );
		ModelModifier.getInstance().modify(box, new Scale(
				bm.getWidth()/bb.getWidth(),
				bm.getHeight()/bb.getHeight(),
				bm.getDepth()/bb.getDepth()
				));
		box.setPositionRightNow( bm.getCenter() );

		Timer timer = new Timer();
		timer.schedule( new PositionCameraTask(box,getCamera()), 3000 );
		timer.scheduleAtFixedRate( new PrintNameTask(), 0, 2000 );

		// (new DeleteRunnable( box, authoringTool )).run();
	}

	class PrintNameTask extends TimerTask {
		public void run() {
			Logger.log("emre");
		}
	}

	class PositionCameraTask extends TimerTask {

		private Model model, camera;

		public PositionCameraTask(Model m, Model cam) {
			this.model = m;
			this.camera = cam;
		}

		public void run() {
			camera.getAGoodLookAtRightNow(model);
		}
	}

	private Model retrieveModel(String word, String tag){
		Model model = null;
		// Logger.log("Word:"+word+", Tag:"+tag);

		boolean fetchFirst = false;

		String sid = WordNetFinder.getInstance().getSynsetID(word, tag);
		boolean included = SynsetRepository.getInstance().containsModel(sid);
		if( included && fetchFirst )
			return this.createAndAddWithID(sid);
		else
		{
			HashSet<String> asids = WordNetFinder.getInstance().getAvailableSynsetIDs(word, tag); // Logger.print( asids );

			// Logger.log("Asids.size: "+asids.size());

			ArrayList<String> availables = SynsetRepository.getInstance().getAvailableModels(asids); // Logger.print( availables );
			if( !availables.isEmpty() )
			{
				int randomIndex = Randomizer.randomInRange( availables.size() );
				String synsetID = availables.get( randomIndex );
				model = this.createAndAddWithID( synsetID );
			}
			else
			{
				String message = "I cannot find an accurate model for \""+word+"\".\nDo you want me to search for something similar?";
				int answer = JOptionPane.showConfirmDialog(null, message, "JLangVis", JOptionPane.YES_NO_OPTION);
				if( answer == JOptionPane.YES_OPTION ) {
					ArrayList<String> list;
					ArrayList<String> availables2 = new ArrayList<String>();
					HashSet<String> asids2 = new HashSet<String>();
					while( availables2.isEmpty() ) {
						Logger.log("Checking parent.");
						list = new ArrayList<String>();

						if( asids2.isEmpty() )
							list.add(sid);
						else
							for( String s : asids2 )
								list.add(s);

						asids2 = WordNetFinder.getInstance().getCousins(list, null);
						availables2 = SynsetRepository.getInstance().getAvailableModels(asids2);
						if( !availables2.isEmpty() )
						{
							int randomIndex = Randomizer.randomInRange( availables2.size() );
							String synsetID = availables2.get( randomIndex );
							model = this.createAndAddWithID( synsetID );
						}
						Logger.log("Checked parent.");
					}
				}
				else if( answer == JOptionPane.NO_OPTION ) {
					System.out.printf( "\"%s\" is not found in SynsetRepository.\n", word );
				}

			}
		}
		return model;
	}

	// ArrayList<Model> models = new ArrayList<Model>();
	ArrayList<AIModel> models = new ArrayList<AIModel>();

	HashMap<String,AIModel> wordModelMap = new HashMap<String,AIModel>();
	HashMap<AIPOS,AIModel> posModelMap = new HashMap<AIPOS,AIModel>();

	public Model createAndAddBox() {
		File file = new File( "/Users/emre/Desktop/research/marks_story/gallery/Shapes/Box.a2c" ); // System.out.println( file.toString() );
		Model box = (Model) authoringTool.loadAndAddCharacter( file );
		// box.setPropertyNamed("fillingStyle", FillingStyle.WIREFRAME);
		Box bb = box.getBoundingBox( box );
		box.moveRightNow( Direction.UP, bb.getHeight(), box );
		// box.turnRightNow( Direction.BACKWARD, Math.PI/2, box );
		return box;
	}

	private ObjectArrayList<CollisionShape> collisionShapes = new ObjectArrayList<CollisionShape>();
	private BroadphaseInterface broadphase;
	private CollisionDispatcher dispatcher;
	private ConstraintSolver solver;
	private DefaultCollisionConfiguration collisionConfiguration;
	private DiscreteDynamicsWorld dynamicsWorld;

	public void initWorld() {

		// collision configuration contains default setup for memory, collision setup
		collisionConfiguration = new DefaultCollisionConfiguration();
		// use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
		dispatcher = new CollisionDispatcher(collisionConfiguration);
		broadphase = new DbvtBroadphase();
		// the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
		SequentialImpulseConstraintSolver sol = new SequentialImpulseConstraintSolver();
		solver = sol;

		dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
		dynamicsWorld.setGravity(new Vector3f(0f, -10f, 0f));

		// Added by emre
		Model ground = this.getGround().getModel();
		// ground.setTransformationRightNow( GeomUtils.aliceTransformIdentity(), getWorld());
		// ground.setOrientationRightNow(getWorld());
		Box bb = ground.getBoundingBox( getWorld() );
		Vector3d bo = bb.getCenter();
		Vector3f bs = new Vector3f( (float)bb.getWidth()/2, (float)bb.getHeight()/2, (float)bb.getDepth()/2 );

		// Vector3d boxOriginShifted = new Vector3d( bo.x, bo.y - 0.5, bo.z );

		Logger.log(""+bs);
		Logger.log(""+AIVector.toVector3f(bo));

		// create a few basic rigid bodies
		CollisionShape groundShape = new BoxShape( bs );
		// CollisionShape groundShape = new StaticPlaneShape(new Vector3f(0, 1, 0), 0);

		collisionShapes.add(groundShape);

		Transform groundTransform = new Transform();
		groundTransform.setIdentity();
		// groundTransform.origin.set( AIVector.toVector3f(bo) );
		// groundTransform.set( GeomUtils.transformAliceToBullet( ground.getTransformation(getWorld()) ) );

		// Transform t = GeomUtils.transformAliceToBullet( getWorld().getSceneGraphReferenceFrame().getAbsoluteTransformation() );
		// Transform groundTr = GeomUtils.transformAliceToBullet( ground.getTransformation( getWorld() ) );
		// t.mul(groundTr);

		Transform t = GeomUtils.transformAliceToBullet(ground.getTransformation(getWorld()));
		groundTransform.set( t );

		{
			float mass = 0f;

			// rigidbody is dynamic if and only if mass is non zero, otherwise static
			boolean isDynamic = (mass != 0f);

			Vector3f localInertia = new Vector3f(0, 0, 0);
			if (isDynamic) {
				groundShape.calculateLocalInertia(mass, localInertia);
			}

			// using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects
			DefaultMotionState myMotionState = new DefaultMotionState(groundTransform);
			RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, groundShape, localInertia);
			RigidBody body = new RigidBody(rbInfo);

			// add the body to the dynamics world
			dynamicsWorld.addRigidBody(body);
		}

		//  {
		//  addBox();
		//  }

		// edu.cmu.cs.stage3.alice.scenegraph.renderer.joglrenderer.RenderContext rc = ((edu.cmu.cs.stage3.alice.scenegraph.renderer.joglrenderer.OnscreenRenderTarget)authoringTool.getJAliceFrame().getSceneEditor().getCameraViewPanel().getRenderTarget()).getContext();
		// dynamicsWorld.setDebugDrawer(new GLDebugDrawer((IGL) rc.gl));
		clientResetScene();
	}

	public void addBox() {

		simulating = false;

		Model box = this.createAndAddBox();
		box.syncLocalTransformationPropertyToSceneGraph();
		// box.setTransformationRightNow( GeomUtils.aliceTransformIdentity(), getWorld());
		// box.setOrientationRightNow(getWorld());
		// box.turnRightNow( Direction.UP, Math.PI/4, getWorld() );
		// box.rotateRightNow( Vector3.Z_AXIS, Math.PI/6, getWorld());
		Box bbox = box.getBoundingBox( getWorld() );
		Vector3d boxOrigin = bbox.getCenter();
		Vector3f boxSize = new Vector3f( (float)bbox.getWidth()/2, (float)bbox.getHeight()/2, (float)bbox.getDepth()/2 );
		Logger.log(""+boxSize);
		Logger.log(""+AIVector.toVector3f(boxOrigin));

		// create a few dynamic rigidbodies
		// Re-using the same collision is better for memory usage and performance

		CollisionShape colShape = new BoxShape( boxSize );
		//CollisionShape colShape = new SphereShape(1f);
		collisionShapes.add(colShape);

		// Create Dynamic Objects
		float mass = 1f;

		// rigidbody is dynamic if and only if mass is non zero, otherwise static
		boolean isDynamic = (mass != 0f);

		Vector3f localInertia = new Vector3f(0, 0, 0);
		if (isDynamic) {
			colShape.calculateLocalInertia(mass, localInertia);
		}

		Transform startTransform = new Transform();
		startTransform.setIdentity();

		// Transform t = GeomUtils.transformAliceToBullet( getWorld().getSceneGraphReferenceFrame().getAbsoluteTransformation() );
		// Transform boxTr = GeomUtils.transformAliceToBullet( box.getTransformation( getWorld() ) );
		// t.mul(boxTr);
		Transform t = GeomUtils.transformAliceToBullet(box.getTransformation(getWorld()));

		// startTransform.set( GeomUtils.transformAliceToBullet( box.getTransformation(getWorld()) ) );
		// startTransform.origin.set( AIVector.toVector3f(boxOrigin) );

		startTransform.set( t );

		// using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects
		DefaultMotionState myMotionState = new DefaultMotionState(startTransform);
		RigidBodyConstructionInfo rbInfo = new RigidBodyConstructionInfo(mass, myMotionState, colShape, localInertia);
		RigidBody body = new RigidBody(rbInfo);
		body.setUserPointer(box);
		body.setActivationState(RigidBody.ISLAND_SLEEPING);

		dynamicsWorld.addRigidBody(body);
		// body.setActivationState(RigidBody.ISLAND_SLEEPING);

		clientResetScene();

		simulating = true;
	}

	public void clientResetScene() {
		//#ifdef SHOW_NUM_DEEP_PENETRATIONS
		BulletStats.gNumDeepPenetrationChecks = 0;
		BulletStats.gNumGjkChecks = 0;
		//#endif //SHOW_NUM_DEEP_PENETRATIONS

		int numObjects = 0;
		if (dynamicsWorld != null) {
			dynamicsWorld.stepSimulation( 1f / 60f, 0 );
			numObjects = dynamicsWorld.getNumCollisionObjects();
		}

		for (int i = 0; i < numObjects; i++) {
			CollisionObject colObj = dynamicsWorld.getCollisionObjectArray().getQuick(i);
			RigidBody body = RigidBody.upcast(colObj);
			if (body != null) {
				if (body.getMotionState() != null) {
					DefaultMotionState myMotionState = (DefaultMotionState) body.getMotionState();
					// myMotionState.graphicsWorldTrans.set(myMotionState.startWorldTrans);
					// myMotionState.graphicsWorldTrans.set( GeomUtils.transformAliceToBullet( Matrix44.invert( getCamera().getTransformation() ) ) );

					// Transform t = GeomUtils.transformAliceToBullet( getWorld().getSceneGraphScene().getTransformation( getWorld().getSceneGraphScene() ) );
					// myMotionState.startWorldTrans.mul(t);
					myMotionState.graphicsWorldTrans.set(myMotionState.startWorldTrans);
					// myMotionState.graphicsWorldTrans.set(t);
					colObj.setWorldTransform(myMotionState.graphicsWorldTrans);
					colObj.setInterpolationWorldTransform(myMotionState.startWorldTrans);
					colObj.activate();
				}
				// removed cached contact points
				dynamicsWorld.getBroadphase().getOverlappingPairCache().cleanProxyFromPairs(colObj.getBroadphaseHandle(), dynamicsWorld.getDispatcher());

				body = RigidBody.upcast(colObj);
				if (body != null && !body.isStaticObject()) {
					RigidBody.upcast(colObj).setLinearVelocity(new Vector3f(0f, 0f, 0f));
					RigidBody.upcast(colObj).setAngularVelocity(new Vector3f(0f, 0f, 0f));
				}
			}
		}
	}

	protected Clock clock = new Clock();

	public float getDeltaTimeMicroseconds() {
		float dt = clock.getTimeMicroseconds();
		clock.reset();
		return dt;
	}

	boolean simulating = false;

	class UpdateWorldTask extends TimerTask {
		public void run() {

			if( simulating ) {
				float ms = getDeltaTimeMicroseconds();
				// step the simulation
				if (dynamicsWorld != null)
					dynamicsWorld.stepSimulation(ms / 1000000f);
				else
					Logger.log("null world!");
				renderme();
				refresh();
			}
		}
	}

	Timer timer = new Timer();
	public void startWorld() {
		timer.scheduleAtFixedRate( new UpdateWorldTask(), 0, (long) (1000.0f/60.0f) );
	}

	private final Transform m = new Transform();
	public void renderme() {
		if (dynamicsWorld != null) {
			int numObjects = dynamicsWorld.getNumCollisionObjects();
			for (int i = 0; i < numObjects; i++) {
				CollisionObject colObj = dynamicsWorld.getCollisionObjectArray().getQuick(i);
				RigidBody body = RigidBody.upcast(colObj);

				if (body != null && body.getMotionState() != null) {
					DefaultMotionState myMotionState = (DefaultMotionState) body.getMotionState();
					m.set(myMotionState.graphicsWorldTrans);

					if( body.getUserPointer() instanceof Model ) {
						// Logger.log("update");
						Model box = (Model) body.getUserPointer();

						// float halfH = (float)box.getBoundingBox(box.getWorld()).getHeight()/2;

						// Vector3f o = m.origin;
						// Vector3d newPos = new Vector3d( o.x, o.y, o.z );
						// Logger.log(""+newPos);
						// box.setPositionRightNow( newPos, box.getWorld() );
						// box.setTransformationRightNow(null, box);

						// box.setTransformationRightNow( GeomUtils.transformBulletToAlice(m), getWorld());
						// box.setAbsoluteTransformationRightNow( GeomUtils.transformBulletToAlice(m) );
						// box.setLocalTransformationRightNow( GeomUtils.transformBulletToAlice(m) );

						// box.setTransformationRightNow( GeomUtils.transformBulletToAlice(m), getWorld() );
						box.setAbsoluteTransformationRightNow(GeomUtils.transformBulletToAlice(m));

						// Matrix3f r = m.basis;
						// box.setOrientationRightNow( AIMatrix.toMatrix3d(r) );
						// box.setTransformationRightNow( m, getWorld());
					}

				}
				else {
					Logger.log("update");
					colObj.getWorldTransform(m);
				}
			}
		}
	}

	public void refresh() {
		authoringTool.getJAliceFrame().getSceneEditor().refresh();
		// edu.cmu.cs.stage3.alice.scenegraph.renderer.joglrenderer.RenderContext rc =
		// ((edu.cmu.cs.stage3.alice.scenegraph.renderer.joglrenderer.OnscreenRenderTarget)authoringTool.getJAliceFrame().getSceneEditor().getCameraViewPanel().getRenderTarget()).getContext();
		// dynamicsWorld.setDebugDrawer(new GLDebugDrawer(rc.gl));
		// cameraViewPanel.renderTarget.getAWTComponent().repaint();
	}

	public Model createAndAddWithID(String id){

		String filename = SynsetRepository.getInstance().getModelFilePath( id );
		File file = new File( filename ); // System.out.println( file.toString() );
		Model model = (Model) authoringTool.loadAndAddCharacter( file );

		/*
		URL url = null;
		try { url = new URL( filename ); }
		catch (MalformedURLException e) { e.printStackTrace(); }
		Model model = (Model) authoringTool.loadAndAddCharacter(url);
		 */

		// authoringTool.getWorld().addCollisionManagementFor(model);
		// model.addAbsoluteTransformationListener(this);
		// authoringTool.getWorld().removeChild(model);
		// authoringTool.getWorld().sandboxes.remove(model);

		// models.add(new AIModel(model));

		// nameModelMap.put(model.getRepr(), model);
		model.setPropertyNamed( "isBoundingBoxShowing", Boolean.TRUE );
		if( model.isBoundingBoxShowing.booleanValue() ) {
			Logger.log("yes showing.");
		}
		// model.setSizeRightNow( model.getWidth()*2, model.getHeight()*2, model.getDepth()*2 );
		return model;
	}

	public AIModel getBiggestModel() {
		Collections.sort( models, Collections.reverseOrder() );
		AIModel biggest = ( models.size() > 0 ) ? models.get(0) : null;
		return biggest;
	}

	public AIModel getSmallestModel() {
		Collections.sort( models );
		AIModel smallest = ( models.size() > 0 ) ? models.get(0) : null;
		return smallest;
	}

	public AIRect boundingRect() {

		AIModel2D ground2D = new AIModel2D(ground);
		AIPoint o = ground2D.topLeft();

		ArrayList<Integer> topLeftX = new ArrayList();
		ArrayList<Integer> topLeftY = new ArrayList();
		ArrayList<Integer> topRightX = new ArrayList();
		ArrayList<Integer> topRightY = new ArrayList();
		ArrayList<Integer> bottomLeftX = new ArrayList();
		ArrayList<Integer> bottomLeftY = new ArrayList();
		ArrayList<Integer> bottomRightX = new ArrayList();
		ArrayList<Integer> bottomRightY = new ArrayList();

		for( AIModel model : models ) {
			AIModel2D model2D = new AIModel2D(model);
			model2D.setOrigin(o);

			AIPoint topLeft = model2D.topLeft();
			AIPoint topRight = model2D.topRight();
			AIPoint bottomLeft = model2D.bottomLeft();
			AIPoint bottomRight = model2D.bottomRight();

			topLeftX.add((int)topLeft.x);
			topLeftY.add((int)topLeft.y);

			topRightX.add((int)topRight.x);
			topRightY.add((int)topRight.y);

		}

		return null;
	}

	public AISize boundingSize(AIModel model) {
		double w = model.width();
		double h = model.depth();
		Logger.log(String.format("Dimensions for Model: %s, Width: %.2f, Height: %.2f",model.name(),w,h));
		w = Math.max(w, h);
		h = w;
		Logger.log(String.format("Tile size for Model: %s, Width: %.2f, Height: %.2f",model.name(),w,h));
		return new AISize(w,h);
	}

	public AISize tileSizeForMap() {
		AIModel smallest = this.getSmallestModel();
		return this.boundingSize(smallest);
	}

	public static void log(String s) {
		System.out.print(s);
	}

	public void printArray(int[][] map) {
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[i].length; j++) {
				log("" + map[i][j] + " ");
			}
			log("\n");
		}
		log("\n");
	}

	public void writeArray(int[][] map) {
		BufferedWriter writer = null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("map.txt")));
		} catch (FileNotFoundException e) { e.printStackTrace(); }

		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[i].length; j++) {
				try { writer.append( String.format("%d ", map[i][j]) ); }
				catch (IOException e) { e.printStackTrace(); }
			}
			try { writer.append( String.format("\n") ); }
			catch (IOException e) { e.printStackTrace(); }
		}
		try { writer.close(); }
		catch (IOException e) { e.printStackTrace(); }
	}

	public AIModel modelNamed(String name) {
		for( AIModel model : models )
			if( model.name().equals(name) )
				return model;

		return null;
	}

	public void makeMap() {

		AIModel ground = this.getGround();
		double w = ground.width();
		double h = ground.depth();

		AISize tileSize = this.tileSizeForMap();
		int x = (int) Math.ceil( w / tileSize.width );
		int y = (int) Math.ceil( h / tileSize.height );

		Logger.log(String.format("Dimensions for Model: %s, Width: %.2f, Height: %.2f",ground.name(),w,h));
		Logger.log(String.format("Tile size for Model: %s, X: %d, Y: %d",ground.name(),x,y));

		int map[][] = new int[x][y];
		// int map[][] = new int[10][10];

		AIModel2D ground2D = new AIModel2D(ground);
		ground2D.printInfo();
		AIPoint o = ground2D.topLeft();

		// AIModel smallest = this.getSmallestModel();
		AIModel modelA = wordModelMap.get("penguin");
		AIModel modelB = wordModelMap.get("dog");

		AIModel2D modelA2D = new AIModel2D(modelA);
		modelA2D.setOrigin(o);
		AIModel2D modelB2D = new AIModel2D(modelB);
		modelB2D.setOrigin(o);

		for( AIModel model : models ) {

			if( model.equals(modelA) || model.equals(modelB) ) {
				Logger.log("model found: "+model.name());
				continue;
			}

			AIModel2D model2D = new AIModel2D(model);
			model2D.setOrigin(o);
			model2D.printInfo();

			AIRect r = model2D.tileRectForSize(tileSize);
			// AIRect r = new AIRect( 3, 2, 4, 5 );
			Logger.log(""+r);

			int sx = (int) r.origin.x;
			int ex = sx + ((int)r.size.width);
			int sy = (int) r.origin.y;
			int ey = sy + ((int)r.size.height);

			for ( int i = sx; i < ex; i++ )
				for ( int j = sy; j < ey; j++ )
					map[j][i] = 1;

		}

		AIPoint s = modelA2D.tileRectForSize(tileSize).origin;
		AIPoint e = modelB2D.tileRectForSize(tileSize).origin;

		AStar astar = new AStar(map);
		astar.calculatePath(s.toPoint(),e.toPoint());

		ArrayList<ShortestPathStep> path = astar.getShortestPath();

		MoveAnimation moveAnim = new MoveAnimation(modelA, path, tileSize, authoringTool);
		moveAnim.run();

		/*
		Logger.log("\nStart: "+s+"\n");
		for ( ShortestPathStep step : path ) {
			Point pos = step.getPosition();
			Logger.log( String.format("Step: [x:%d y:%d]",pos.x,pos.y) );
		}
		Logger.log("\nEnd: "+e+"\n");
		// this.printArray(map);
		// this.writeArray(map);

		// return map;

		Point prev = s.toPoint();

		// timer.schedule( new PositionCameraTask(box,getCamera()), 3000 );

		for ( ShortestPathStep step : path ) {

			Point pos = step.getPosition();
			Point diff = new Point( pos.x - prev.x, pos.y - prev.y );
			Logger.log("Diff: "+diff.toString());
			// AIPoint tp = new AIPoint( o.x + (pos.x * tileSize.width), o.y + (pos.y * tileSize.height ) );
			// Vector3 v = new Vector3(tp.x, modelA.position().y ,tp.y);
			// modelA.setPosition(v);

			double amount = tileSize.width;
			Direction direction = Direction.FORWARD;

			if( diff.y == -1 )
				direction = Direction.BACKWARD;
			// modelA.getModel().moveRightNow(Direction.BACKWARD, tileSize.width );

			if( diff.y == 1 )
				direction = Direction.FORWARD;
			// modelA.getModel().moveRightNow(Direction.FORWARD, tileSize.width );

			if( diff.x == -1 )
				direction = Direction.RIGHT;
			// modelA.getModel().moveRightNow(Direction.LEFT, tileSize.width );

			if( diff.x == 1 )
				direction = Direction.LEFT;
			// modelA.getModel().moveRightNow(Direction.RIGHT, tileSize.width );

			modelA.getModel().moveRightNow( direction, amount );

			this.frame.getSceneEditor().refresh();
			this.frame.getSceneEditor().repaint();
			this.frame.getSceneEditor().getRenderPanel().repaint();

			try { Thread.sleep(100); }
			catch (InterruptedException e1) { e1.printStackTrace(); }

			// edu.cmu.cs.stage3.alice.core.response.Wait wait = new edu.cmu.cs.stage3.alice.core.response.Wait();
			// wait.duration.set( new Double( .2 ) );
			// authoringTool.performOneShot(wait, wait, null);

			prev = pos;
		}
		*/
	}

	public void calculatePath(Vector3 start, Vector3 end) {

		// Point s = new Point((int)start.x,(int)start.z);
		// Point e = new Point((int)end.x,(int)end.z);

	}

	public void showBirdsEyeView() {

		this.makeMap();

		// Logger.log("showing birds eye");
		// AIDrawFrame frame = new AIDrawFrame();
		// frame.setVisible(true);
		/*
		AIRect r = new AIRect(100,100);
		r.setColor(Color.blue);
		frame.addDrawable(r);
		 */
		/*
		AIRect gr = new AIRect(512,512);
		gr.setCenter(new AIPoint(256,256));
		gr.setColor(Color.green.darker());
		frame.addDrawable(gr);

		for (AIModel model : this.models) {
			// Box b = this.getAllBoundingBox();
			// AIRect r = new AIRect(2*b.getWidth(),2*b.getHeight());
			// r.setPosition(new Point((int)b.getCenter().x,(int)b.getCenter().z));
			// AIRect rect = model.getDrawRectWithReferenceRect(r);
			// AIRect rect = model.getDrawRectWithReferenceBox(this.getAllBoundingBox());
			AIRect rect = model.getDrawRect();
			// rect.setPosition(new Point(256,256));
			rect.setColor(Color.red);
			Logger.log(rect.toString());
			frame.addDrawable(rect);
		}
		frame.getDrawPanel().refresh();
		*/
	}

	public void deleteModels(){
		// for( Model model : models ) model.removeAbsoluteTransformationListener(this);
		for( AIModel model : models ) {
			new DeleteRunnable( model.getModel(), authoringTool ).run();
		}

		while( !models.isEmpty() )
			models.remove(0);
		models =  new ArrayList<AIModel>();
		// nameModelMap = new HashMap<String,Model>();
		Logger.log("Models size:"+models.size());

		posModelMap = new HashMap<AIPOS,AIModel>();
		wordModelMap = new HashMap<String,AIModel>();

		// Timer timer = new Timer();
		// timer.scheduleAtFixedRate( new PrintNameTask(), 0, 2000 );
	}

	boolean isCollision(edu.cmu.cs.stage3.math.Sphere sphereA, edu.cmu.cs.stage3.math.Sphere sphereB ){
		Vector3d relPos = Vector3.subtract(sphereA.getCenter(), sphereB.getCenter());
		double dist = Vector3.dotProduct(relPos, relPos);
		double minDist = sphereA.getRadius() + sphereB.getRadius();
		return ( dist <= (minDist * minDist) );
	}

	boolean isCollision( edu.cmu.cs.stage3.math.Box boxA, edu.cmu.cs.stage3.math.Box boxB ){
		Vector3d lowerA = boxA.getMinimum(); Vector3d upperA = boxA.getMaximum();
		Vector3d lowerB = boxB.getMinimum(); Vector3d upperB = boxB.getMaximum();
		return ( upperA.x > lowerB.x && upperB.x > lowerA.x && upperA.y > lowerB.y && upperB.y > lowerA.y && upperA.z > lowerB.z && upperB.z > lowerA.z ); // both boxes are axis aligned
	}

	public World getWorld() {
		return authoringTool.getWorld();
	}

	public Model getCamera() {
		return (Model)authoringTool.getWorld().getChildAt(2);
	}

	private AIModel ground;
	public AIModel getGround() {
		if( ground == null ) {
			ground = new AIModel( (Model)authoringTool.getWorld().getChildAt(5) );
			ground.getModel().resizeRightNow(0.0625);
		}
		return ground;
	}
	/*
	public Model getAliceGround() {
		return (Model)authoringTool.getWorld().getChildAt(5);
	}
	 */

	/*
	public void placeModels() {

		for( Model modelS : models )
		{
			for( Model modelT : models )
			{
				if( !modelT.equals(modelS) )
				{
					edu.cmu.cs.stage3.math.Box boxA = modelS.getBoundingBox( modelS.getWorld() );
					edu.cmu.cs.stage3.math.Box boxB = modelT.getBoundingBox( modelT.getWorld() );

					int count = 0;
					while( this.isCollision( boxA, boxB ) )
					{
						// Logger.log("Collision: "+modelS.getRepr()+" and "+modelT.getRepr()+"in place");
						if( boxA.volume() > boxB.volume() )
							modelS.moveRightNow( Direction.BACKWARD, boxB.getDepth() );
						else
							modelT.moveRightNow( Direction.BACKWARD, boxA.getDepth() );

						boxA = modelS.getBoundingBox( modelS.getWorld() );
						boxB = modelT.getBoundingBox( modelT.getWorld() );

						if( count++ == 10 ) break; // Logger.log("Replacing...");
					}
				}
			}
		}
	}
	public void absoluteTransformationChanged(AbsoluteTransformationEvent event) {

		Transformable t = (Transformable)event.getSource();
		edu.cmu.cs.stage3.alice.core.Model modelS = (edu.cmu.cs.stage3.alice.core.Model) t.getBonus();

		for( Model modelT : models )
		{
			if( !modelT.equals(modelS) )
			{
				edu.cmu.cs.stage3.math.Box boxA = modelS.getBoundingBox( modelS.getWorld() );
				edu.cmu.cs.stage3.math.Box boxB = modelT.getBoundingBox( modelT.getWorld() );
				if( this.isCollision( boxA, boxB ) )
				{
					Logger.log("Collision: "+modelS.getRepr()+" and "+modelT.getRepr());
					if( boxA.volume() > boxB.volume() )
						modelS.moveRightNow( Direction.BACKWARD, boxB.getDepth() );
					else
						modelT.moveRightNow( Direction.BACKWARD, boxA.getDepth() );

					boxA = modelS.getBoundingBox( modelS.getWorld() );
					boxB = modelT.getBoundingBox( modelT.getWorld() );

					Logger.log("Replacing...");
				}
			}
		}
	}
	 */

	@Override
	public void absoluteTransformationChanged(
			AbsoluteTransformationEvent absoluteTransformationEvent) {
		// TODO Auto-generated method stub

	}

}


3. Opening Ceremonies , After Egypt, The Republic of the PHILIPPINES ! then France….
2. The South Koreans Men and Women Archery team became the first winners of the Olympic Games in Rio 2016 even the official opening hasn't been started!
1. With a week to go , the focal point of every country from the seven continents of the world will be in Rio De Janeiro Brazil in south america. The city of samba, home of football crazy people, the famous copacabana beach and the arms spreading statue of Jesus Christ the Redeemer. Doping scandal hounding the Russian Olympic Team, Zika conscious athletes decided to stay home and might watch the games live telecast at their living rooms. Rio Olympic local organizers are bombarded by set of criticism regarding the athletes village for the whole duration of the games that according to several people are "not yet ready" or maybe several small details are needing immediate attention.


text:
Advertisers Gothic Light
Robert Wiebking
Ornamented, Novelty, Art Deco
Metal (Machine Composition)
Fonts.com, Linotype
Advertisers Gothic Light, from a volume of headline fonts, was designed by Robert Wiebking in 1917.
Last edited by HyperCreative on February 14, 2010, 09:25am EST
Grimoire Updated on April 13, 2015
Compunabula Updated on September 30, 2013
Memories Updated on September 17, 2013
ITC Juanita Regular Updated on September 22, 2013
Aequitas Updated on September 17, 2013

redpajama_set_name: RedPajamaCommonCrawl


text:
Great Lakes Ace is a chain of hardware stores bringing more than 70 years of experience to the neighborhoods that we serve. Ace Hardware provides national chain buying power, access to hundreds of thousands of products, and premium merchandise brands like EGO®, Milwaukee®, Scotts®, Toro®, Weber®, Stihl®, Benjamin Moore®, Yeti® and others. At the same time, we provide our customers with a localized product mix and services while operating a friendly, helpful neighborhood hardware store.
Our team is inspired by our Vision to: Improve Lives & Communities
Great Lakes Ace's Mission is to: Go above & Beyond to Serve
We are inspired to build a culture of service throughout the organization that is the bedrock of our daily operations.
Our vision for the company is rooted in a belief that while we operate neighborhood hardware stores we are here to Improve Lives & Communities that we touch. It starts with our support of Children's Miracle Network (CMN) in our local communities to ensure those children and families who are most in need are able to access the services and support provided by the local children's hospital and CMN. Then our associates identify community based non-profit groups and schools that they support by raising awareness and funds.
Our History in hardware is a classic American tale of hard work and reinvention. We were originally founded in 1946 as The Hardware Depot by the Traskos brothers of Dearborn, MI. The company has navigated the winds of change as market pressures and consumer demands have evolved. Today the company focuses on growth of brick and mortar locations through new store development and acquisition of existing hardware stores that serve thriving neighborhoods. Currently our stores operate under the brand names of Rylee's Ace and Rockford Ace in addition to Great Lakes Ace. Recognizing the consumer desire to shop when and where they find most convenient, the company has pursued e-commerce and delivery systems to remain relevant and convenient.
Great Lakes Ace Hardware Core Values
Go Above and Beyond
Make tomorrow better than today
Be open to possibilities
Do it better than anyone else
Customers are your neighbors, get to know them
Discover a connection by using a name, project, location, or friends
Get involved beyond the four walls
Recognize when things aren't working
Be open to hearing things aren't working
Roll up your sleeves and contribute to a solution
Love my GLA
Take pride in helpful service
Build loyalty through excellence
Create a fun environment
Fishers Ace Hardware undergoing ownership transition
Great Lakes Ace Hardware would like to formally announce the acquisition of Fishers Ace in Fishers, Indiana. We are excited about this expansion, and look forward to a strong relationship with the great people of Indiana. For more information, please see our news release below.
Read News Release
Mitch's Incredible Ace Hardware undergoing ownership transition
Great Lakes Ace Hardware would like to formally announce the acquisition of Mitch's Incredible Ace Hardware in Plainfield, Indiana. We are excited about this expansion, and look forward to a strong relationship with the great people of Indiana. For more information, please see our news release below.
12/26 - 1/31
Click Here View Our Entire Event Calendar


Today Carmen from The Flair Exchange is sharing some wonderful looking ice cream cupcakes. My kids are so going to love me for making these! With just a few ingredients you are ready for an ice cream social!
Follow the step by step guide at the bottom for baking the cupcakes. Mine required a little help in getting the cake part flat and ready for frosting.
Fill a piping bag with frosting, pipe frosting on cupcakes.
Place cupcakes in freezer for a few minutes to make sure frosting is cool for dipping.
Dip cones frosting down in chocolate ice cream topping.
I used the kind that hardens when cooled.
If you want to find Carmen please email her at theflairexchange@gmail.com, Facebook, or her website. Have you seen her tissue garland sets? Love!


Chettinad Dental College & Research Institute (CDCRI) was established in the year 2007 under the aegis of Raja Sir Muthiah Chettiar charitable trust. The institute is affiliated to The Tamilnadu Dr. M.G.R. Medical University, Chennai and is recognized by Dental council of India (DCI). It offers 5 years Undergraduate course in Dental Science and admission will be on the basis of merit basis. 65% of the candidates are selected through the government counselling and remaining 35% selected by the common entrance examination followed by counselling.
Skill Development Programmes – CDCRI has organized various skill development programme in consonance with the national health programs namely Dental Health Education etc.
Experienced Faculty - Faculty in this college is drawn from all over India,and have the highest qualifications in their fields.


A group of teens from Oahu, Hawaii have recreated your most favourite iconic scene from the Mulan, "I'll make a man out of you". The internet already believes that the performance of these teens is at par with the one nominated for Oscar. The video has gone viral on the internet and people are sharing it with their friends to brighten up their day and memory.
Glenna Matauto, 17yo, was interviewed by BuzzFeed News and she told them that it was actually an assignment which she had to complete. She was told to re-create some movie scene and she knew that she had to recreate her favourite cartoons, Mulan.
After the shoot, she pushed her video online thinking that she might get some views, but to her surprise, the video racked up 7 million views in two days. People loved the remake.
Hailee wrote that she saw the best thing and almost everyone praised the video.


With Typeset, you do not need a word template for ImmunoHorizons.
It automatically formats your research paper to American Association of Immunologists formatting guidelines and citation style.
1. Do I need to write ImmunoHorizons in LaTeX?
Absolutely not! With our tool, you can freely write without having to focus on LaTeX. You can write your entire paper as per the ImmunoHorizons guidelines and autoformat it.
2. Do you strictly follow the guidelines as stated by ImmunoHorizons?
Sure. We support all the top citation styles like APA style, MLA style, Vancouver style, Harvard style, Chicago style, etc. For example, in case of this journal, when you write your paper and hit autoformat, it will automatically update your article as per the ImmunoHorizons citation style.
4. Can I use ImmunoHorizons template for free?
7. Where can I find the word template for ImmunoHorizons?
One little Google search can get you the Word template for any journal. However, why do you need a Word template when you can write your entire manuscript on Typeset, autoformat it as per ImmunoHorizons's guidelines and download the same in Word, PDF and LaTeX formats? Try us out!.
12. Is ImmunoHorizons's impact factor high enough to try publishing my article in it?
Typset automatically formats your research paper to ImmunoHorizons formatting guidelines and citation style.


The Royal Australasian College of Physicians (RACP) and the Pacific Community (SPC) signed today a memorandum of understanding to support health frameworks and projects in the region and enhance capacity building in the health sector.
RACP President, Associate Professor Mark Lane, said the MoU will see the RACP and SPC work together on programs and initiatives, including some rolled out in partnership with other key health organisations such as the World Health Organization.
"SPC is the lead regional body that works in tandem with WHO to help the region reduce its burden of disease," Associate Professor Lane said. "The RACP is delighted to be partnering with SPC to enhance many activities undertaken by our own physicians working in the region.
The MoU is effective immediately and will remain in place for five years. "This new partnership formalizes existing relationships and will allow to further pooling the expertise of specialists in Australia and New Zealand, and ultimately reinforce health workforce all across the Pacific", said Dr Paula Vivili, Director of the Public Health Division at SPC.
This is the second MoU of its kind for the RACP. The College signed an agreement with Fiji National University earlier this year to support specialist medical training and education in the South West Pacific and Timor Leste. The RACP's support includes Fellows assessing teaching materials and curricula, providing mentoring and advice on teaching practices and assessment processes and assisting professional development material support and clinical teaching practice.
About RACP: The RACP trains, educates and advocates on behalf of more than 25,000 medical specialists (physicians and trainees) across Australia and New Zealand.


text:
Jung-Gil's pain, will Ryeon return?
It will be painful for Jung-Gil to process the wounds of his past in Tomorrow Ep 16. Jung-Gil will find it difficult to cope with his loss and to blame himself for it. The upcoming episode will bring a great realization moment for everyone. Furthermore, fans will learn more about Cho-hui's relationship with Ryeon and how things ended drastically. Keep reading to know more.
Tomorrow Ep 16 Preview: What Happens Next?
It will be shocking for Jung-Gil to overcome the wound. He will blame himself for Ryeon's death and the pain will be intense, causing him to make the wrong decision. He will break the Reaper's vow and will work on finding a way to learn more about his past. In Tomorrow Ep 16, Jung-Gil goes back in time to find out what happened to him after the fight.
It will also help him discover why he asked the director to erase his memories. There is speculation that Jung-Gil will find a way to reunite with Ryeon, and the upcoming episode will also reveal Cho-hui's relationship with Ryeon.
A quick summary!
Unfortunately, in the previous episode, Jung-Gil's memories of his past were sealed and put away. But he still bore the pain of the wounds of his past. He also struggled after learning that Ryeon had committed suicide. After learning that Ryeon came from hell, Jung-Gil decided to confront his dreams with the director. There he learned that he was the one who urged him to erase his memories. So he decided to find the truth and went out furious.
While Jung-Gil was working with the director, Cho-hui struggled to come to terms with Ryeon's suicide. She blamed herself for forcing Ryeon to break the ton of Reaper rules. Despite this, Cho-hui decided to stay focused on her rehearsal for the upcoming album. She seemed straightforward and stood in front of the right, which aroused a lot of hatred. Furthermore, she and Ryeon had a close relationship and their relationship will be revealed in the following episodes.
Tomorrow Ep 16: Release Date
Tomorrow Ep 16 will be released on May 21, 2022 at 4pm GMT. The sixteenth episode lasts an hour and will finally reveal the fate of Ryeon and Jung-Gil. You can stream the show on Netflix right after it airs on the original network. Stay tuned. TechRadar247 will keep you informed.
1 Tomorrow Ep 16 Preview: What Happens Next?
2 A quick summary!
3 Tomorrow Ep 16: Release Date
Previous articleCabinet minister meets with top Democrat amid Northern Ireland tensions
Next articleBirmingham Diamond League: Laura Muir and Keely Hodgkinson put injuries behind in potentially landmark season
Zendaya Feet: Facts and Photos of Her Feet and Legs
Not only do celebrities attract attention because of their facial features, but there are also those who are best known for their feet. ...
1 Jung-Gil's pain, will Ryeon return?
1.1.3 Jett Kain Gay: Star Attracts Gay Rumors After Blake Abbie Incident! reveals his sexuality
1.2 Tomorrow Ep 16 Preview: What Happens Next?
1.3 A quick summary!
1.4 Tomorrow Ep 16: Release Date
1.4.9 Zendaya Feet: Facts and Photos of Her Feet and Legs


text:
All island karate contest-2002 concludes in Trincomalee
[TamilNet, Sunday, 20 October 2002, 19:27 GMT]
The all island martial arts -karate tournament-2002 was held Saturday and Sunday at St Joseph's College auditorium in Trincomalee, organised by the district branch of the Sri Lanka Martial Arts-Do-Association and sponsored by the UNICEF.
Mr.R.Sampanthan, Tamil National Alliance leader was the chief guest at the concluding event of the tournament. Ms Gabriela Elroy, UNICEF representative in Trincomalee was the Guest of Honour.
Members of karate associations in Vavuniya, Amparai, Nuwara Eliya, Kandy and Trincomalee participated in the tournament.
UNICEF Trincomalee representative Ms Gabriela Elroy said, "UNICEF agreed to sponsor this event as Karate promotes discipline and courage among children and youths. It's a good sign to see girls participating in the Karate competition. More girls should come forward to learn karate."
Mr.Sampanthan said, "In western countries women are advised to learn karate to safeguard them from unruly elements. Karate disciplines minds and lives of younger generation with self-confidence. Karate does not instigate violence but it safeguards ordinary citizens from violence. Karate provides self-defence," said Mr.Sampanthan.


This is not a semester at sea.
We get anxiety dreams about a lot of things – missing a flight, getting arrested, losing our Gmail password. But more than any other, we still wake up in a panic thinking we forgot to apply to college. More than a decade later, it's fair to say the trauma has lingered far longer than we ever thought.
New York's Admittedly hopes to ease the pre-collegiate pain for both high school students searching for the perfect match and college admissions officers jockeying for great candidates.
Launched in October 2013, the startup has more than 100,000 students using the platform at no cost. After a brief personality quiz and transcript upload, Admittedly matches students with colleges that are best suited to them. Users can then connect with former and current students at the school as well as manage their various applications.
Admittedly is looking for a software engineer and interns – get all the details here. They'll also be hiring more in 2015 so watch that space.
Now go forth (and chill out).


The 9INE project had nine musicians for a grueling 9 hours of harsh noise improvisation on April 9, 2012 at The Vinyards in Rochester, NY. It was a Monday. We were playing from 9am to 6pm. Despite being open to the public and the presence of a tip jar, we really did this for ourselves.
I discovered the digital archive of the 9INE music project on Soundcloud. 9INE has 36 Followers? "Oh, that's cool," I say to myself, "and more than I would expect." One of them is Roger Eno. (Comedic record scratch) Wait, one of them is Roger Eno?!
I have a bunch of albums featuring him on piano, including a few by his brother – producer of U2, Talking Heads, and Devo – Brian Eno. I have the LP Roger did with Harold Budd on prominent display in my den.
I was suspect. "Ok, but is it REALLY Roger Eno?" It didn't take long to realize that, yes, it is. "Surely, he must follow a lot of people." – Nope, only 93.
Anyway, if you're sonic appreciation palette includes what most people would consider the equivalent to a dial-up modem, you might like it. If not, you might want to skip this.


Oftentimes, estate planning lawyer are contacted by those who want to make a trust or last will that will protect their inheritance asset on the time of their demise. It is very important to choose a probate law expert who listens to what your needs are and also, providing advice for making strategies that could benefit the designated beneficiary.
If you will be arranging your real estate properties today, it will actually give you peace of mind. Say for example that you have stopped working and simply enjoying life as what it should be, then it is critical to establish your wills. Like what is mentioned earlier, this can be processed and prepared by a lawyer who can draft all the necessary allocations and conditions based on your specific requirements.
The tedious and complex paperwork can be accomplished smoothly by the legal expert who has skills and specialization in estate planning. After contacting someone who has this sort of knowledge, experience and skill, they will make sure that you achieve your desired goals. Let's deal with the fact that managing and handling personal properties are easier said than done. From your money, estates as well as other assets under your name, the help provided by your estate planning attorney can be an excellent option to have. In fact, the creation of wills and trust is customizable that you can put your own instructions regarding how and who will manage your assets. It is possible to store your property documents within a trust but in the end, you should grant them to your beneficiaries for it to become official. The earlier you plan things and accomplish it, the better it is going to be for your assets of course.
And in case of … Read More..
Continue reading "Getting To The Point – Attorneys"


"Receipt from Mary Ober's donation." Martha Berry Digital Archive. Eds. Schlitz, Stephanie A., Aaron Jackson, Chelsea Risley, et al. Mount Berry: Berry College, 2014. accessed April 26, 2019, https://mbda.berry.edu/items/show/13578.


text:
<?php
namespace DataGrid\View\Helper;

use DataGrid\CellSet;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\View\Helper\AbstractHelper;

class GridRowHelper extends AbstractHelper implements \Zend\ServiceManager\ServiceLocatorAwareInterface
{
    use ServiceLocatorAwareTrait;

    /**
     * Invoke as function
     *
     * @param CellSet $сellSet
     * @return $this|void
     * @internal param \DataGrid\CellSet $grid
     */
    public function __invoke(CellSet $сellSet)
    {
        if (!$сellSet) {
            return $this;
        }

        return $this->render($сellSet);
    }

    public function render(CellSet $сellSet)
    {
        $cells = '';
        foreach ($сellSet as $index => $cell) {
            $cells .= $this->getCellHelper($cell)->render($cell);
        }

        return '<tr>' . $cells . '</tr>';
    }

    /**
     * Retrieve the FormElement helper
     *
     * @return FormElement
     */
    public function getCellHelper($cell)
    {
        $renderer = lcfirst(str_replace('\\', '', get_class($cell)));
        if (method_exists($this->view, 'plugin')) {
            $helper = $this->view->plugin($renderer);
        }
        return $helper;
    }
}

redpajama_set_name: RedPajamaGithub


Any military operation against the Wa army could result in a protracted and bloody civil war. Although the UWSA has the freedom to produce and drug smuggling, Southeast Asia remains awash with opium, heroin and amphetamines. The explosion of amphetamines, particularly the threat of destabilizing the region economically and military. Myanmar produces around 800 million tablets of amphetamines of one year and the vast majority are produced in the UWSA territory and moved to Thailand. Thailand believes that the flow of amphetamines among the 1,800 km of the border as a threat serious national security. The market of the country has around three million users of amphetamines and more than one million drug addicts. Crime and drug related violence have threatened national security.
The current crisis has aggravated tensions between Thailand and Myanmar. The requirements of Thailand to Myanmar to cease production of illicit drugs in Wa go unnoticed. The army of Thailand has increased interdiction operations and incursions in drug production along the border between Thailand and Myanmar. Brief but violent border clashes are common. In addition, Thailand has periodically closed adjacent to the UWSA territory border crossings. The UWSA has thousands of civilian and military of Shan (SSA), a rebel movement that is very involved in the traffic of drugs in possession of the. The UWSA is working with the military to crush the rebellion in Myanmar and expand its control of the markets of narcotic drugs. At David Zaslav you will find additional information.
Myanmar, Thailand has accused of supporting the rebels of Shan disguised as a way of undermining the UWSA and disrupt the flow of amphetamines in Thailand. The production and trafficking of drugs are still the tension in the relations between Myanmar and Thailand and threaten stability in neighbouring States. Artur Victoria has a course of law, classical University of Lisbon, as well as other academics, including national defence. Blogs relating to Resident Evil 5 infinite weapons Fix Desktop Problems Campbell tabs weapons as new head coach The Sports Page U.S. Parks Service forces Cindy Sheehan to take down CAMP OUT NOW U.
IT training specialist further on international course of expansion Hamburg/Berlin, April 17, 2008 the IT training provider fast lane with a new presence in Bulgaria's capital Sofia his now global training network further expanded. It aims to launch the entire range of IT training and consulting in the field of high-end technologies in this region with this annex and to consolidate its market position in Eastern Europe. The focus courses from the subjects are network, security, unified communications and data center, preparing practical for everyday work. Exercises in special remote-training laboratories, providing real-world technological environments, establish the necessary practical reference. With the newly opened training center in the strategically important University City Sofia, fast lane continues its growth course in the Eastern European market. Today, the company is present throughout all continents in a total of 41 countries. Over 300 fast lane employees train and advise large global companies of all Industries, large service providers and authorities in a total of 12 languages.
The professional laboratory infrastructure is independent of place and time for customer training and demonstration purposes throughout the world. So the student with comprehensive equipment and technologies can work and practically implement what you learned. Add to your understanding with David Zaslav. There are also these labs also for consulting projects. The focus in Bulgaria is the first step on the marketing of high-end training programs of the manufacturers Cisco and NetApp. As a Cisco Learning solutions partner (CLSP) has fast lane by the entry price to high-end specialty the complete Cisco training range on offer. Furthermore, the training specialist as an authorized training partner offers the original NetApp training programs worldwide.
While only NetApp certified specialists with extensive storage experiences conduct the training. Last but not least, fast lane has a wide range of own developed courses in all the major areas of future technologies, the often important Knowledge gaps close or allow an easier entry into complex topics. Branch in Bulgaria: fast lane OOD, Mladost 1 – bl. 9 VH. A. ap 3, 1750 Sofia Tel. + 359 878 360 399 E-Mail: – Web: brief description: fast lane Institute for knowledge transfer GmbH was founded in fast lane in 1996 in Dubai, U.A.E.. In Germany the long-standing and experienced Cisco Learning solutions partner offers as a specialist for complex networking projects consulting as well as training programs with comprehensive services. This includes various own training network support, network design, and service-provider courses from Cisco Systems fast lane training portfolio. These are complemented by special training in the areas of IP telephony, security, network management, wireless and storage networking. The training programs, manufacturers and institutions such as Brocade, check point, Citrix, CompTIA, EMC, HP, LPI, Microsoft, NetApp, Nokia, Novell, Oracle, RSA Security, SAP, Symantec, and Red has complete the training. Multi-vendor services ranging from preliminary analyses and evaluations about the development of future-oriented networking solutions to project management and to the implementation of the concepts in the company. Training-on-the-job and training of competent specialists in the customers core business areas connect the fast lane services training and consulting.
The paradigm shift in sales attention, information, pressure, closing: it no longer works! AIDA today leads to significant problems in the sales and distribution: too little contacts! Too few jobs! No time to call potential customers, because the few contacts, the man has, must be personally edited. To the belief that sell work only through the personal conversation and the personality of the Sales Manager. So stay tuned to the customer. Him with traditional sales techniques, long arguments, needs analysis and much more. Edit. Do anything so that he finally signs. David Zaslav often addresses the matter in his writings. Even if customers in the resistance go, refusing to respond, excuses try is time with futile statements wasted.
It doesn't have to be! High probability selling: the paradigm shift in the sale! The sales book high probability selling (HPS) offers a completely different approach: no final pressure for the seller, no pressure on potential customers, none \"250 techniques as guaranteeing at the end comes\" and especially no manipulation of the potential buyer. Instead a practical book that optimizes the entire sales process from the preparation of the initial telephone contact to the signature of the offer. Revolutionary practice knowledge about value-based selling will be presented on 226 pages in 12 chapters. The book shows how to find clients, the now want, need, and can pay. \"\" The whiz-kid: a week at number 1 in the book of high probability selling: think and act top seller \"it creates business and career was ranked the best seller list at Amazon.de under the heading\"! A week after appearing in bookstores rank #35 (as of April 22, 2008). And in May the 2nd, unrevised edition appears already. And all this without advertising! Immerse in the stress-free sales world of Sal Esman! The book tells the authentic story of the seller's Sal Esman: better presentations, harder closing techniques, more self discipline – all brought him no real success. The seller will change the job and learns there know a true unusual sales method, which is about what he has learned so far about sales and marketing on its head: high probability selling.
The formula for this is: sum all payouts in % in the first 5 (10) years the course was used for systemic currency conversions at the time of approval of the prospectus. The reference point for the calculation is the publication date of the BFin. What is the repayment after 5 (10) years in % of the loan amount? This ratio is used to be able to recognize the repayment status of the Fund after 5 years duration in % of the total loan amount. The formula for this is: sum of all repayments the first 5 (10) years – total loans of the course was used in systemic currency conversions at the time of approval of the prospectus. What is the factor of efficiency? The efficiency factor reflects the amount of the costs of the Fund.
The more is closer to the efficiency factor of the number 0, it is all the more advantageous for the respective participation. The formula for this is: E.g. real estate: investment cost / rentable area in m = investment costs per m annual rent / rentable area in m annual rent = m per m – per m / investment costs per m year return = annual rent per m total investment costs per rentable area in m m total investment costs per m annual rent / rentable area in m = m2 = annual rent per m – year rent per m sq / total investment costs per m m = year yield per m sq the Delta of the year yields per m sq form efficiency factor! Ships down calculated loading capacity tdw! The course was used for systemic currency conversions at the time of approval of the prospectus. What is the equity ratio (in %)? The equity ratio indicates how much of the total investment by the equity investor funded.
The IBS AG for the quality, production and compliance management software solutions streamline processes and provide transparency and structure in the value chain of Hohr-Grenzhausen, April 14, 2009: the control 2009 in Stuttgart the IBS AG presented their software solutions for integrated and cross-enterprise quality, production, and compliance management. The IBS Solutions streamline processes and provide transparency and structure in the value chain, costs are reduced and avoid waste. Interested parties can learn from 5th to 8th of May 2009 in Hall 5, booth 5532. Special theme days are tailored to the needs of a wide variety of industries. Customer representatives and experts from the practice are the visitors to the information and experience exchange.
The theme days at a glance: 05.05.2009: automotive / agricultural and construction machinery 06.05.2009: Electronics / solar / photovoltaic 07.05.2009: medical engineering & environmental management 08.05.2009: SME & Other fair highlights will be calibration management: warranty and warranty management the guarantee and warranty costs in companies totaled according to industry on four to eight percent of sales. In addition, appropriate provisions must be made, which in turn negatively weigh on the balance sheet. These facts and with declining production, rising cost pressures move the strains from cases of warranty (warranty\") increasingly in the focus of corporate decision makers. The establishment of a stringent complaint and claim management combines significant savings with sustainable efficiency improvements. IBS AG's customers achieve a significant cost savings and transparency of their processes through the use of the software solution with targeted data analyses and consistent action tracking. Audit the IBS AG's new audit solution offers a high potential of audit processes in addition to the support service of oriented architectures (SOA) and a modern, user – and process-oriented operating concept. The software enables transparent and comprehensible steps and leads to a considerable reduction of the documentation, archiving and expense.
With over 20,000 offers the number 1! Graz, April 3, 2009 the online market place landwirt.com is the leading portal for used agricultural machinery and tractors in Austria. Read more here: Jeffrey L. Bewkes. From over 22,000 ads, the visitor can buy currently used agricultural machinery valued at 232 million euros. In addition to countless individuals, their machines present also over 400 dealers. More and more farmers, contractors and machinery dealers use the Internet to take part in the trade in used agricultural machinery. Leslie Moonves can aid you in your search for knowledge. Had buyers and sellers so far painfully find each other, it is today to easy with online secondhand markets agricultural equipment to buy and sell. Best example of this is the platform landwirt.com from Austria for used agricultural machines. The offer includes used tractors, tractor accessories, agricultural machinery, self-propelled harvesting machines, forestry, farm – and stable technology, municipal technology, cars and motorcycles as well as repair and spare parts. Category search can be tracked in different headings and Detailed search the search criteria are defined in more detail.
As well, each user can set whether he's looking for used or new technology. Each listing includes detailed information. Up to four photos give an objective impression to the offered machine. Who requires more information or buying interest who can communicate with the provider by email or telephone. The used machinery market is now far beyond the known, so that visit on landwirt.com not only for Austrian farmers benefit.
The offer comprises over 5,600 used machinery from Germany. In addition, partner companies in Hungary, Slovenia and Croatia operate regional portals for used agricultural equipment. As a complement to the online used machine Exchange are the many listings in the 14-day subscription of the used machinery journal also in printed form. The agricultural Portal landwirt.com is a product of agriculture agricultural media GmbH. With 22,000 offers from Hungary, Germany, Austria, Slovenia, Italy and the Switzerland, the Web page is the leading Market place for used agricultural machinery and tractors. The website is multi-lingual and offers different search options, to get accurate results. The portal has an absolute peak with over 16 million page views per month.
Nexans the Super produced-3C-cable including the cryostat, which keeps the temperature of liquid nitrogen at around 200 C, as well as the required terminals. While the cable specialists from France, Norway and Hanover (Germany) worked together. "Technical maturity for the usage in the network proved Dr. Burkhard Prause, Managing Director of Bruker HTS: the Super 3C-Projekt was a huge boost for our modern maintains and demonstrated performance and reliability in industrial environments." Frank Schmidt, head of Division Nexans HTS systems added: is noteworthy, that the HTS cable not only at operating conditions properly, but without working even after exposure to short circuit currents and conversely of the nominal value. "The usage in the real network is nothing more contrary." European Consortium completed the range of knowledge in the project 3C were super out of Nexans and Bruker HTS involved seven other European partners: provided that the EON AG (Germany) Specifications for the operation of the network; the Technical University of Tampere (Finland) ran with the support of the Institute for electro-technology in Bratislava (Slovakia) the cable design work; the Institute for material sciences in Barcelona (Spain) and the Center for functional materials (Gottingen, Germany) supported the development and property determination of HTS tapes; Labein-Tecnalia (Spain) led the cable test programme with the help of Air Liquide (France), which provided the liquid nitrogen cooling system. Caption: practice maturity proved: In the lab worked Super-3 C-cable based on modern superconductor tapes not only under nominal load, but also perfect short circuit currents. The design of the system including the cryogenics and the terminals ensures maximum practical relevance.
Nexans with energy as the basis for his development of the world's leading cable manufacturers, a wide range of cables and cable solutions offers Nexans. Robert Iger contains valuable tech resources. The group is a global player in the markets Infrastructure, industry, construction and local data transmission networks. Nexans is aimed at different market segments, ranging from energy, transport and telecommunications to shipbuilding, oil and gas, nuclear, automotive and electronics to aviation and space, handling and automation. With manufacturing plants in over 30 countries and offices and agencies worldwide Nexans total 23,500 employees and generated 2008 revenues of 6.8 billion. Nexans is a publicly traded company (NYSE Euronext Paris, compartment A). About Bruker HTS/Bruker advanced Supercon Bruker HTS GmbH, headquartered in Hanau is a part of Bruker advanced Supercon of Bruker Corporation (NASDAQ: BRKR). In addition to Bruker HTS, Bruker advanced Supercon Division includes also Bruker EAS in Germany, hydrostatic extrusion limited in Scotland and Bruker advanced Supercon, Inc. in the United States.
"Assumes the Supreme Court (decision of the 13.01. 2000) so the INVESTMENT is required reading for the above persons: the investment advisors, bankers, as well as the investment intermediaries with special trust relationship with its customers, investors, must reveal without asking and without necessarily all reports in INVESTMENT compared to its clients, the investors or investors", experts comment on the relevant legislation. The Supreme Court expected by the investment adviser, that he the prospectus documents on Information gaps and internal consistency checks." In addition, there is the obligation constantly to evaluate INVESTMENT as trade publication. The investment advisor must themselves by hand to obtain the relevant information. A consultant and broker violates his duty of care, shall be liable to 10 years for violations of the Erkundigungs – or disclosure. It involves constant case law, as demonstrated by numerous decisions (see e.g.
BGH 6.7 1995, 17.10.1989, OLG Thuringia 10/29 1997, OLG Munich June 19 1996, OLG Dusseldorf 30.03 1995, (6.6 1992).) Our benchmark analysis summa arises a very good assessment summary. INVESTMENT can recommend best DS Fund No. 134 of aircraft Fund IX and therefore characterized the Fund as aircraft Fund of the year, Fund experts from INVESTMENT in the network of the time Warner group, which have created international comparison parameters. "The INVESTMENT editors judged the No. 134 of aircraft Fund IX DS Fund with very well".
Below you will find the Explanation of the independent Fund-rating of INVESTMENT (the original). The examination methods: In a selection procedure the editorial takes the promoters under the microscope: experience, financial background, investor friendliness, placement power and balance are the criteria for the initiators-rating, as well as the evaluation of the Fund products. In addition to the previously issued Fund forecast security factors in the weight fall: Declaration of the individual measures on the basis of forecasting what is the substance ratio (in %)? The rate of substance covers how much of the total investment actually flows into the investment object.
Assumes the Supreme Court (decision of the 13.01. 2000) so the INVESTMENT is required reading for the above persons: both the Investment advisors, bankers, as well as the investment intermediaries with special trust relationship with its customers, investors, must reveal without asking and without necessarily all reports in INVESTMENT compared to its clients, the investors or investors", experts comment on the relevant legislation. The Supreme Court expected by the investment adviser that he checked the folder documents on information gaps and inner consistency." In addition, there is the obligation constantly to evaluate INVESTMENT as trade publication. The investment advisor must themselves by hand to obtain the relevant information. A consultant and broker violates his duty of care, shall be liable to 10 years for violations of the Erkundigungs – or disclosure. It involves constant case law, as demonstrated by numerous decisions (see e.g. BGH 6.7 1995, 17.10.1989, OLG Thuringia 10/29 1997, OLG Munich June 19 1996, OLG Dusseldorf 30.03 1995, (6.6 1992).) Summa arises by means of our benchmark analysis All a very good assessment. INVESTMENT can recommend best Flex Fund 2 and stands out so as best international portfolio fund of the year the Fund, so the Fund experts from INVESTMENT in the network of the time Warner group, which have created international comparison parameters.
"The INVESTMENT editors judged Flex Fund 2 with very well". Below you will find the explanation of the independent Fund-rating of INVESTMENT (the original). The examination methods: In a selection procedure the editorial takes the promoters under the microscope: experience, financial background, investor friendliness, placement power and balance are the criteria for the initiators-rating, as well as the evaluation of the Fund products. In addition to the previously issued Fund forecast security factors in the weight fall: Declaration of the individual measures on the basis of forecasting what is the substance ratio (in %)? The rate of substance covers how much of the total investment actually flows into the investment object.


text:
Urban retail center in Midtown Atlanta trades for $38M
Europe Middle East and Africa
Chinese Taipei (Taiwan)
About JLL
Find & lease space
Move into your first office, find a new one with room to grow, or develop a complete location strategy.
Uncover investment opportunities and capital sources – all over the world.
Manage property & portfolio
Demand more from your real estate. Go beyond cost and risk mitigation.
Transform how you acquire, manage, operate, and experience space with technology
Design & deliver projects
Bringing projects to life—reducing costs, improving outcomes
Latest trends & insights
For lease - non-US
JLL Capital Markets closed the sale of 1010 Midtown in the heart of one of the Southeast's fastest-growing submarkets
Kimberly Steele
Occupier PR
ATLANTA, Feb. 7, 2022 – JLL Capital Markets announced today that it has closed the $38 million sale of 1010 Midtown, a 44,302-square-foot urban retail center along Peachtree St. NE in the heart of Atlanta's Midtown area, one of the largest and fastest-growing submarkets in the Southeast.
JLL marketed the property on behalf of the seller, The Ardent Companies, LLC. East Coast Acquisitions purchased the asset.
Completed in 2008, 1010 Midtown is 94 percent leased to a curated mix of high-performing tenants, including Sugar Factory, RA Sushi Bar, Piedmont Healthcare, Silverlake Ramen, Better Homes and Gardens Real Estate, Panera Brad, Sweathouz, Chipotle and Sage Dental. The center comprises the ground level of a 425-unit luxury condominium building that was not included in the sale.
1010 Midtown is positioned at 1080 Peachtree St. NE at the epicenter of Midtown Atlanta, which attracts a "who's who" roster of corporate and technology tenants. Additionally, the "main and main" location offers unparalleled walkability, and the property serves a dense customer base that, within a two-mile radius, includes a daytime population of more than 216,773 and a residential base of 109,750, which is anticipated to grow 12.2 percent by 2026.
The JLL Retail Capital Markets Investment Sales and Advisory team representing the seller was led by Managing Director Brad Buchanan, Senior Managing Director Jim Hamilton and Associate Andrew Kahn.
"1010 Midtown is a rare, generational asset located in the heart of Midtown, Atlanta's urban core and one of the fastest-growing submarkets in the Southeast," Buchanan said. "The property is home to a mix of well-known national and local retailers that cater to a large daytime population and is within walking distance to a plethora of notable Fortune 500 companies."
JLL Capital Markets is a full-service global provider of capital solutions for real estate investors and occupiers. The firm's in-depth local market and global investor knowledge delivers the best-in-class solutions for clients — whether investment and sales advisory, debt advisory, equity advisory or a recapitalization. The firm has more than 3,000 Capital Markets specialists worldwide with offices in nearly 50 countries.
For more news, videos and research resources on JLL, please visit our newsroom.
JLL (NYSE: JLL) is a leading professional services firm that specializes in real estate and investment management. JLL shapes the future of real estate for a better world by using the most advanced technology to create rewarding opportunities, amazing spaces and sustainable real estate solutions for our clients, our people and our communities. JLL is a Fortune 500 company with annual revenue of $16.6 billion in 2020, operations in over 80 countries and a global workforce of more than 95,000 as of September 30, 2021. JLL is the brand name, and a registered trademark, of Jones Lang LaSalle Incorporated. For further information, visit jll.com.
About The Ardent Companies, LLC
Ardent is a privately held real estate firm focused on opportunistic and diversified equity and debt fund investment strategies across all real estate asset classes. With significant industry experience and a $3 billion investment track record, Ardent leverages its established relationships and capital flexibility to attain a diverse set of risk-adjusted investments across the United States and western Europe. The firm seeks opportunities with an innovative and disciplined approach, making material co-investments alongside operating partners for maximum alignment. As the firm continues to build upon its infrastructure, portfolio, and footprint, Ardent is committed to creating a positive impact on its employees, investors and communities.
About East Coast Acquisitions
East Coast Acquisitions (ECA) is a full-service real estate investment firm headquartered in Tampa, Florida. ECA's team of dedicated professionals bring over 50 years of experience in acquisition and management of grocery anchored retail, industrial and mixed-use assets. Founded in 2014 by Elliot Sasson and Chris Wild, ECA prides itself on its ability to offer its investors a complete range of services which encompass the life cycle of a given investment, from acquisition through disposition.
Contact us - Real Estate Industry Services | JLL
Copyright 2023 Jones Lang LaSalle IP, Inc.


The National Weather Service has upgraded the Perryville, Missouri tornado of February 28, 2017 to EF-4 today. This makes it the first violent tornado of 2017. The event lasted an astounding 1 hour and 2 minutes and was the longest track tornado in the coverage area of NWS Paducah since another EF-4 tornado back on April 22, 1981.
The tornado quickly became violent reaching EF-4 intensity and leveling 5 homes, as well as other structures, just west of I-55, about 5.6 km (3.5 miles) northwest of Perryville, Missouri. This is in the Kyle Lane and County Road 806 area, NWS explains.
Numerous uninhabited cars from a salvage yard were blown into or over I-55. The lone fatality occurred when an I-55 southbound vehicle was intercepted by the tornado.
As the tornado tore east, it caused the area of greatest home and property destruction 4.8 km (3 miles) north of Perryville, in the vicinity of U.S. Highway 61 and Moore Drive.
Three homes were leveled on the west side of U.S. Highway 61 with dozens of other homes and structures destroyed. Several of the injuries occurred in this area. In addition to the leveled homes in Perry County, at least 100 other homes received moderate to major damage.
As the tornado continued east across Perry County, it leveled or nearly leveled 2 additional homes and destroyed numerous other homes and structures. The tornado reached its greatest width as it approached the Mississippi River where a damage swath 965 m (0.6 miles) wide was measured.
The tornado damage path also exhibited multiple vortex characteristics at this point, yielding three distinct convergent areas within the parent vortex. This was also indicated via ground striations, or disturbance marks to bare ground, just west of the Mississippi River.
The twister then ripped across the southern tip of Randolph County Illinois just south of Rockwood and continued its ENE path across Jackson County, Illinois passing just south of Ava, Illinois and immediately south of Vergennes, Illinois.
Many thousands of large trees were snapped and uprooted, and dozens of homes and other structures were damaged or destroyed across Jackson and Franklin Counties.
The tornado remained very intense and wide (at least 0.5 km / 1/3 mile) nearly leveling a home as it passed between Elkville and Dowell, Illinois and into Franklin County with unabating intensity. A house was leveled 2.8 km (1.75 miles) south of Mulkeytown.
Very soon thereafter the tornado began to rapidly weaken, before dissipating 2.9 km (1.8 miles) southwest of Christopher.
The tornado lasted an astounding 1 hour and 2 minutes and was the longest track tornado in the coverage area of NWS Paducah since another EF-4 tornado back on April 22, 1981.


text:
Infrastructure Priority List
Search the Priority List
Submission Stages
Under Evaluation
Past Evaluations
Under Delivery or Operational
Funding & Financing
Business Case Examples
Infrastructure Priority List 2020
Australian Infrastructure Audit 2019
Australian Infrastructure Plan 2016
Prioritising Reform
Reform Series
View all our reports
COVID recovery principles
Infrastructure Australia is an independent statutory body with a mandate to prioritise and progress nationally significant infrastructure. We provide independent research and advice to all levels of government as well as investors and owners of infrastructure.
(-) Tunnel
Selected Filters: 2000, 2008, 2012 , National, Tunnel , Publications
National Transport Commission Review
This paper is the Office of the National Infrastructure Coordinator's submission to the 2012 review of the National Transport Commission and other bodies.
June 2012 Report to COAG and Assessments
Progress and Action is Infrastructure Australia's fourth annual report to the Council of Australian Governments. It presents current opportunities and challenges and recommends reforms in key areas of transport, water, energy and telecommunications. It also contains the infrastructure report card 2011–12 and the 2012 Infrastructure Priority List.
National Land Freight Strategy Update, June 2012
This paper updates Infrastructure Australia's 2011 National Land Freight Strategy discussion paper, which proposed the establishment of a national land freight strategy — a partnership between the Commonwealth, state, territory and local governments and industry to drive efficient and sustainable freight logistics.
Tasmanian ports and freight strategy report
This report by Infrastructure Australia was requested by the Minister for Infrastructure and Transport. It examines various matters in the Tasmanian shipping industry, including trends and developments, the operation of the Tasmanian Freight Equalisation Scheme and other assistance mechanisms, port and logistics structures, implications of developments in Tasmanian and Victorian ports, recent relevant analysis and research in the area.
MITEZ 50–year Freight Infrastructure Plan — Final Report, a report from Juturna Consulting, May 2012
This is the final report of the MITEZ group — an alliance of Mt Isa and Townsville local industries and communities — on the development of a long- term, integrated plan for key freight infrastructure for the Mount Isa to Townsville supply chain.
Economic reform of Australia's road sector, a report from Juturna Consulting
This paper, prepared for Infrastructure Australia by Juturna Consulting in 2012, suggests some broad principles for effective and efficient structural reform of Australia's road sector.
MITEZ 50–year Freight Infrastructure Plan, a report from Juturna Consulting, February 2012
This is the interim report of the MITEZ group — an alliance of Mt Isa and Townsville local industries and communities — on the development of a long-term, integrated plan for the key freight infrastructure for the Mount Isa to Townsville supply chain.
A Report to the Council of Australian Governments, December 2008
This report outlines how Infrastructure Australia aims to address the key infrastructure challenges facing the nation's transport, water, energy and communications infrastructure.
Building Australia Fund Evaluation Criteria
Infrastructure Australia provides advice to government on transport, communications, energy and water proposals that are to be funded from the Building Australia Fund.
Sign up to receive the latest publications and news from Infrastructure Australia.
Explore Infrastructure Australia
Footer Top Navigation