anchor.diff:  		//check that the player has the necessary item(s)
   		bool hasAtLeastOne = action.itemRequirements.any.length == 0;
   		await Future.forEach(action.itemRequirements.any, (String itemType) async {
  -			if(!hasAtLeastOne) {
  +			if (!hasAtLeastOne) {
   				if (includeBroken) {
   					hasAtLeastOne = await InventoryV2.hasItem(email, itemType, 1);
   				} else {
  
positive.code: 	StreetEntity persist() {
  		Map streetDataMap = MapData.getStreetByName(streetName);
  		if (streetDataMap == null) {
  			Log.warning('Cannot persist entity <type=$type> <id=$id> because streetDataMap'
  						' was null for this entity (type=$type) <streetName=$streetName>');
  			return null;
  		}
  
  		String tsid = streetDataMap['tsid'];
  		if (tsid == null) {
  			Log.warning('Cannot persist entity <type=$type> <id=$id> because tsid is null'
  							'for <streetName=$streetName>');
  			return null;
  		}
  
  		return new StreetEntity.create(id: id, type: type, tsid: tsid, x: x, y: y, z: z, rotation: rotation, h_flip: h_flip,
  															metadata_json: JSON.encode(getPersistMetadata()));
  	}
  
  	Map<String, dynamic> getMap() {
  
negative.code: 		message = (message ?? '').trim();
  
  		DateTime now = new DateTime.now();
  		if (sayTimeout == null || sayTimeout.compareTo(now) < 0) {
  			bubbleText = message;
  			int timeToLive = message.length * 30 + 3000; // 0.3 sec per character plus 3 seconds minimum
  			timeToLive = min(timeToLive, 10000); // Cap at 10 seconds
  
  			Duration messageDuration = new Duration(milliseconds: timeToLive);
  			sayTimeout = now.add(messageDuration);
  			new Timer(messageDuration, () {
  				bubbleText = null;
  