text:
"""Support for mocking the cluster configuration"""

import random
import time
import uuid as uuid_module

from ganeti import config
from ganeti import constants
from ganeti import errors
from ganeti.network import AddressPool
from ganeti import objects
from ganeti import utils

import mocks

RESERVE_ACTION = "reserve"
RELEASE_ACTION = "release"

def _StubGetEntResolver():
  return mocks.FakeGetentResolver()

def _UpdateIvNames(base_idx, disks):
  """Update the C{iv_name} attribute of disks.

  @type disks: list of L{objects.Disk}

  """
  for (idx, disk) in enumerate(disks):
    disk.iv_name = "disk/%s" % (base_idx + idx)

# pylint: disable=R0904
class ConfigMock(config.ConfigWriter):
  """A mocked cluster configuration with added methods for easy customization.

  """

  def __init__(self, cfg_file="/dev/null"):
    self._cur_group_id = 1
    self._cur_node_id = 1
    self._cur_inst_id = 1
    self._cur_disk_id = 1
    self._cur_os_id = 1
    self._cur_nic_id = 1
    self._cur_net_id = 1
    self._default_os = None
    self._mocked_config_store = None

    self._temporary_macs = config.TemporaryReservationManager()
    self._temporary_secrets = config.TemporaryReservationManager()
    self._temporary_lvs = config.TemporaryReservationManager()
    self._temporary_ips = config.TemporaryReservationManager()

    super(ConfigMock, self).__init__(cfg_file=cfg_file,
                                     _getents=_StubGetEntResolver(),
                                     offline=True)

    with self.GetConfigManager():
      self._CreateConfig()

  def _GetUuid(self):
    return str(uuid_module.uuid4())

  def _GetObjUuid(self, obj):
    if obj is None:
      return None
    elif isinstance(obj, objects.ConfigObject):
      return obj.uuid
    else:
      return obj

  def AddNewNodeGroup(self,
                      uuid=None,
                      name=None,
                      ndparams=None,
                      diskparams=None,
                      ipolicy=None,
                      hv_state_static=None,
                      disk_state_static=None,
                      alloc_policy=None,
                      networks=None):
    """Add a new L{objects.NodeGroup} to the cluster configuration

    See L{objects.NodeGroup} for parameter documentation.

    @rtype: L{objects.NodeGroup}
    @return: the newly added node group

    """
    group_id = self._cur_group_id
    self._cur_group_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_group_%d" % group_id
    if networks is None:
      networks = {}

    group = objects.NodeGroup(uuid=uuid,
                              name=name,
                              ndparams=ndparams,
                              diskparams=diskparams,
                              ipolicy=ipolicy,
                              hv_state_static=hv_state_static,
                              disk_state_static=disk_state_static,
                              alloc_policy=alloc_policy,
                              networks=networks,
                              members=[])

    self._UnlockedAddNodeGroup(group, None, True)
    return group

  # pylint: disable=R0913
  def AddNewNode(self,
                 uuid=None,
                 name=None,
                 primary_ip=None,
                 secondary_ip=None,
                 master_candidate=True,
                 offline=False,
                 drained=False,
                 group=None,
                 master_capable=True,
                 vm_capable=True,
                 ndparams=None,
                 powered=True,
                 hv_state=None,
                 hv_state_static=None,
                 disk_state=None,
                 disk_state_static=None):
    """Add a new L{objects.Node} to the cluster configuration

    See L{objects.Node} for parameter documentation.

    @rtype: L{objects.Node}
    @return: the newly added node

    """
    node_id = self._cur_node_id
    self._cur_node_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_node_%d.example.com" % node_id
    if primary_ip is None:
      primary_ip = "192.0.2.%d" % node_id
    if secondary_ip is None:
      secondary_ip = "203.0.113.%d" % node_id
    if group is None:
      group = self._default_group.uuid
    group = self._GetObjUuid(group)
    if ndparams is None:
      ndparams = {}

    node = objects.Node(uuid=uuid,
                        name=name,
                        primary_ip=primary_ip,
                        secondary_ip=secondary_ip,
                        master_candidate=master_candidate,
                        offline=offline,
                        drained=drained,
                        group=group,
                        master_capable=master_capable,
                        vm_capable=vm_capable,
                        ndparams=ndparams,
                        powered=powered,
                        hv_state=hv_state,
                        hv_state_static=hv_state_static,
                        disk_state=disk_state,
                        disk_state_static=disk_state_static)

    self._UnlockedAddNode(node, None)
    return node

  def AddNewInstance(self,
                     uuid=None,
                     name=None,
                     primary_node=None,
                     os=None,
                     hypervisor=None,
                     hvparams=None,
                     beparams=None,
                     osparams=None,
                     osparams_private=None,
                     admin_state=None,
                     admin_state_source=None,
                     nics=None,
                     disks=None,
                     disk_template=None,
                     disks_active=None,
                     network_port=None,
                     secondary_node=None):
    """Add a new L{objects.Instance} to the cluster configuration

    See L{objects.Instance} for parameter documentation.

    @rtype: L{objects.Instance}
    @return: the newly added instance

    """
    inst_id = self._cur_inst_id
    self._cur_inst_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_inst_%d.example.com" % inst_id
    if primary_node is None:
      primary_node = self._master_node.uuid
    primary_node = self._GetObjUuid(primary_node)
    if os is None:
      os = self.GetDefaultOs().name + objects.OS.VARIANT_DELIM +\
           self.GetDefaultOs().supported_variants[0]
    if hypervisor is None:
      hypervisor = self.GetClusterInfo().enabled_hypervisors[0]
    if hvparams is None:
      hvparams = {}
    if beparams is None:
      beparams = {}
    if osparams is None:
      osparams = {}
    if osparams_private is None:
      osparams_private = {}
    if admin_state is None:
      admin_state = constants.ADMINST_DOWN
    if admin_state_source is None:
      admin_state_source = constants.ADMIN_SOURCE
    if nics is None:
      nics = [self.CreateNic()]
    if disk_template is None:
      if disks is None:
        # user chose nothing, so create a plain disk for him
        disk_template = constants.DT_PLAIN
      elif len(disks) == 0:
        disk_template = constants.DT_DISKLESS
      else:
        disk_template = disks[0].dev_type
    if disks is None:
      if disk_template == constants.DT_DISKLESS:
        disks = []
      elif disk_template == constants.DT_EXT:
        provider = "mock_provider"
        disks = [self.CreateDisk(dev_type=disk_template,
                                 primary_node=primary_node,
                                 secondary_node=secondary_node,
                                 params={constants.IDISK_PROVIDER: provider})]
      else:
        disks = [self.CreateDisk(dev_type=disk_template,
                                 primary_node=primary_node,
                                 secondary_node=secondary_node)]
    if disks_active is None:
      disks_active = admin_state == constants.ADMINST_UP

    inst = objects.Instance(uuid=uuid,
                            name=name,
                            primary_node=primary_node,
                            os=os,
                            hypervisor=hypervisor,
                            hvparams=hvparams,
                            beparams=beparams,
                            osparams=osparams,
                            osparams_private=osparams_private,
                            admin_state=admin_state,
                            admin_state_source=admin_state_source,
                            nics=nics,
                            disks=[],
                            disks_active=disks_active,
                            network_port=network_port)
    self.AddInstance(inst, None)
    for disk in disks:
      self.AddInstanceDisk(inst.uuid, disk)
    return inst

  def AddNewNetwork(self,
                    uuid=None,
                    name=None,
                    mac_prefix=None,
                    network=None,
                    network6=None,
                    gateway=None,
                    gateway6=None,
                    reservations=None,
                    ext_reservations=None):
    """Add a new L{objects.Network} to the cluster configuration

    See L{objects.Network} for parameter documentation.

    @rtype: L{objects.Network}
    @return: the newly added network

    """
    net_id = self._cur_net_id
    self._cur_net_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_net_%d" % net_id
    if network is None:
      network = "198.51.100.0/24"
    if gateway is None:
      if network[-3:] == "/24":
        gateway = network[:-4] + "1"
      else:
        gateway = "198.51.100.1"
    if network[-3:] == "/24" and gateway == network[:-4] + "1":
      if reservations is None:
        reservations = "0" * 256
      if ext_reservations:
        ext_reservations = "11" + ("0" * 253) + "1"
    elif reservations is None or ext_reservations is None:
      raise AssertionError("You have to specify 'reservations' and"
                           " 'ext_reservations'!")

    net = objects.Network(uuid=uuid,
                          name=name,
                          mac_prefix=mac_prefix,
                          network=network,
                          network6=network6,
                          gateway=gateway,
                          gateway6=gateway6,
                          reservations=reservations,
                          ext_reservations=ext_reservations)
    self.AddNetwork(net, None)
    return net

  def AddOrphanDisk(self, **params):
    disk = self.CreateDisk(**params)
    self._UnlockedAddDisk(disk)

  def ConnectNetworkToGroup(self, net, group, netparams=None):
    """Connect the given network to the group.

    @type net: string or L{objects.Network}
    @param net: network object or UUID
    @type group: string of L{objects.NodeGroup}
    @param group: node group object of UUID
    @type netparams: dict
    @param netparams: network parameters for this connection

    """
    net_obj = None
    if isinstance(net, objects.Network):
      net_obj = net
    else:
      net_obj = self.GetNetwork(net)

    group_obj = None
    if isinstance(group, objects.NodeGroup):
      group_obj = group
    else:
      group_obj = self.GetNodeGroup(group)

    if net_obj is None or group_obj is None:
      raise AssertionError("Failed to get network or node group")

    if netparams is None:
      netparams = {
        constants.NIC_MODE: constants.NIC_MODE_BRIDGED,
        constants.NIC_LINK: "br_mock"
      }

    group_obj.networks[net_obj.uuid] = netparams

  def CreateDisk(self,
                 uuid=None,
                 name=None,
                 dev_type=constants.DT_PLAIN,
                 logical_id=None,
                 children=None,
                 nodes=None,
                 iv_name=None,
                 size=1024,
                 mode=constants.DISK_RDWR,
                 params=None,
                 spindles=None,
                 primary_node=None,
                 secondary_node=None,
                 create_nodes=False,
                 instance_disk_index=0):
    """Create a new L{objecs.Disk} object

    @rtype: L{objects.Disk}
    @return: the newly create disk object

    """
    disk_id = self._cur_disk_id
    self._cur_disk_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_disk_%d" % disk_id
    if params is None:
      params = {}

    if dev_type == constants.DT_DRBD8:
      pnode_uuid = self._GetObjUuid(primary_node)
      snode_uuid = self._GetObjUuid(secondary_node)
      if logical_id is not None:
        pnode_uuid = logical_id[0]
        snode_uuid = logical_id[1]

      if pnode_uuid is None and create_nodes:
        pnode_uuid = self.AddNewNode().uuid
      if snode_uuid is None and create_nodes:
        snode_uuid = self.AddNewNode().uuid

      if pnode_uuid is None or snode_uuid is None:
        raise AssertionError("Trying to create DRBD disk without nodes!")

      if logical_id is None:
        logical_id = (pnode_uuid, snode_uuid,
                      constants.FIRST_DRBD_PORT + disk_id,
                      disk_id, disk_id, "mock_secret")
      if children is None:
        data_child = self.CreateDisk(dev_type=constants.DT_PLAIN,
                                     size=size)
        meta_child = self.CreateDisk(dev_type=constants.DT_PLAIN,
                                     size=constants.DRBD_META_SIZE)
        children = [data_child, meta_child]

      if nodes is None:
        nodes = [pnode_uuid, snode_uuid]
    elif dev_type == constants.DT_PLAIN:
      if logical_id is None:
        logical_id = ("mockvg", "mock_disk_%d" % disk_id)
      if nodes is None and primary_node is not None:
        nodes = [primary_node]
    elif dev_type in constants.DTS_FILEBASED:
      if logical_id is None:
        logical_id = (constants.FD_LOOP, "/file/storage/disk%d" % disk_id)
      if (nodes is None and primary_node is not None and
          dev_type == constants.DT_FILE):
        nodes = [primary_node]
    elif dev_type == constants.DT_BLOCK:
      if logical_id is None:
        logical_id = (constants.BLOCKDEV_DRIVER_MANUAL,
                      "/dev/disk/disk%d" % disk_id)
    elif dev_type == constants.DT_EXT:
      if logical_id is None:
        provider = params.get(constants.IDISK_PROVIDER, None)
        if provider is None:
          raise AssertionError("You must specify a 'provider' for 'ext' disks")
        logical_id = (provider, "mock_disk_%d" % disk_id)
    elif logical_id is None:
      raise NotImplementedError
    if children is None:
      children = []
    if nodes is None:
      nodes = []
    if iv_name is None:
      iv_name = "disk/%d" % instance_disk_index

    return objects.Disk(uuid=uuid,
                        name=name,
                        dev_type=dev_type,
                        logical_id=logical_id,
                        children=children,
                        nodes=nodes,
                        iv_name=iv_name,
                        size=size,
                        mode=mode,
                        params=params,
                        spindles=spindles)

  def GetDefaultOs(self):
    if self._default_os is None:
      self._default_os = self.CreateOs(name="mocked_os")
    return self._default_os

  def CreateOs(self,
               name=None,
               path=None,
               api_versions=None,
               create_script=None,
               export_script=None,
               import_script=None,
               rename_script=None,
               verify_script=None,
               supported_variants=None,
               supported_parameters=None):
    """Create a new L{objects.OS} object

    @rtype: L{object.OS}
    @return: the newly create OS objects

    """
    os_id = self._cur_os_id
    self._cur_os_id += 1

    if name is None:
      name = "mock_os_%d" % os_id
    if path is None:
      path = "/mocked/path/%d" % os_id
    if api_versions is None:
      api_versions = [constants.OS_API_V20]
    if create_script is None:
      create_script = "mock_create.sh"
    if export_script is None:
      export_script = "mock_export.sh"
    if import_script is None:
      import_script = "mock_import.sh"
    if rename_script is None:
      rename_script = "mock_rename.sh"
    if verify_script is None:
      verify_script = "mock_verify.sh"
    if supported_variants is None:
      supported_variants = ["default"]
    if supported_parameters is None:
      supported_parameters = ["mock_param"]

    return objects.OS(name=name,
                      path=path,
                      api_versions=api_versions,
                      create_script=create_script,
                      export_script=export_script,
                      import_script=import_script,
                      rename_script=rename_script,
                      verify_script=verify_script,
                      supported_variants=supported_variants,
                      supported_parameters=supported_parameters)

  def CreateNic(self,
                uuid=None,
                name=None,
                mac=None,
                ip=None,
                network=None,
                nicparams=None,
                netinfo=None):
    """Create a new L{objecs.NIC} object

    @rtype: L{objects.NIC}
    @return: the newly create NIC object

    """
    nic_id = self._cur_nic_id
    self._cur_nic_id += 1

    if uuid is None:
      uuid = self._GetUuid()
    if name is None:
      name = "mock_nic_%d" % nic_id
    if mac is None:
      mac = "aa:00:00:aa:%02x:%02x" % (nic_id / 0xff, nic_id % 0xff)
    if isinstance(network, objects.Network):
      if ip:
        pool = AddressPool(network)
        pool.Reserve(ip)
      network = network.uuid
    if nicparams is None:
      nicparams = {}

    return objects.NIC(uuid=uuid,
                       name=name,
                       mac=mac,
                       ip=ip,
                       network=network,
                       nicparams=nicparams,
                       netinfo=netinfo)

  def SetEnabledDiskTemplates(self, enabled_disk_templates):
    """Set the enabled disk templates in the cluster.

    This also takes care of required IPolicy updates.

    @type enabled_disk_templates: list of string
    @param enabled_disk_templates: list of disk templates to enable

    """
    cluster = self.GetClusterInfo()
    cluster.enabled_disk_templates = list(enabled_disk_templates)
    cluster.ipolicy[constants.IPOLICY_DTS] = list(enabled_disk_templates)

  def ComputeDRBDMap(self):
    return dict((node_uuid, {}) for node_uuid in self._ConfigData().nodes)

  def AllocateDRBDMinor(self, node_uuids, disk_uuid):
    return [0] * len(node_uuids)

  def ReleaseDRBDMinors(self, disk_uuid):
    pass

  def SetIPolicyField(self, category, field, value):
    """Set a value of a desired ipolicy field.

    @type category: one of L{constants.ISPECS_MAX}, L{constants.ISPECS_MIN},
      L{constants.ISPECS_STD}
    @param category: Whether to change the default value, or the upper or lower
      bound.
    @type field: string
    @param field: The field to change.
    @type value: any
    @param value: The value to assign.

    """
    if category not in [constants.ISPECS_MAX, constants.ISPECS_MIN,
                        constants.ISPECS_STD]:
      raise ValueError("Invalid ipolicy category %s" % category)

    ipolicy_dict = self.GetClusterInfo().ipolicy[constants.ISPECS_MINMAX][0]
    ipolicy_dict[category][field] = value

  def _CreateConfig(self):
    self._config_data = objects.ConfigData(
      version=constants.CONFIG_VERSION,
      cluster=None,
      nodegroups={},
      nodes={},
      instances={},
      networks={},
      disks={})

    master_node_uuid = self._GetUuid()

    self._cluster = objects.Cluster(
      serial_no=1,
      rsahostkeypub="",
      highest_used_port=(constants.FIRST_DRBD_PORT - 1),
      tcpudp_port_pool=set(),
      mac_prefix="aa:00:00",
      volume_group_name="xenvg",
      reserved_lvs=None,
      drbd_usermode_helper="/bin/true",
      master_node=master_node_uuid,
      master_ip="192.0.2.254",
      master_netdev=constants.DEFAULT_BRIDGE,
      master_netmask=None,
      use_external_mip_script=None,
      cluster_name="cluster.example.com",
      file_storage_dir="/tmp",
      shared_file_storage_dir=None,
      enabled_hypervisors=[constants.HT_XEN_HVM, constants.HT_XEN_PVM,
                           constants.HT_KVM],
      hvparams=constants.HVC_DEFAULTS.copy(),
      ipolicy=None,
      os_hvp={self.GetDefaultOs().name: constants.HVC_DEFAULTS.copy()},
      beparams=None,
      osparams=None,
      osparams_private_cluster=None,
      nicparams={constants.PP_DEFAULT: constants.NICC_DEFAULTS},
      ndparams=None,
      diskparams=None,
      candidate_pool_size=3,
      modify_etc_hosts=False,
      modify_ssh_setup=False,
      maintain_node_health=False,
      uid_pool=None,
      default_iallocator="mock_iallocator",
      hidden_os=None,
      blacklisted_os=None,
      primary_ip_family=None,
      prealloc_wipe_disks=None,
      enabled_disk_templates=list(constants.DISK_TEMPLATE_PREFERENCE),
      )
    self._cluster.ctime = self._cluster.mtime = time.time()
    self._cluster.UpgradeConfig()
    self._ConfigData().cluster = self._cluster

    self._default_group = self.AddNewNodeGroup(name="default")
    self._master_node = self.AddNewNode(uuid=master_node_uuid)

  def _OpenConfig(self, _accept_foreign, force=False):
    self._config_data = self._mocked_config_store

  def _WriteConfig(self, destination=None, releaselock=False):
    self._mocked_config_store = self._ConfigData()

  def _GetRpc(self, _address_list):
    raise AssertionError("This should not be used during tests!")

  def _UnlockedGetNetworkMACPrefix(self, net_uuid):
    """Return the network mac prefix if it exists or the cluster level default.

    """
    prefix = None
    if net_uuid:
      nobj = self._UnlockedGetNetwork(net_uuid)
      if nobj.mac_prefix:
        prefix = nobj.mac_prefix

    return prefix

  def _GenerateOneMAC(self, prefix=None):
    """Return a function that randomly generates a MAC suffic
       and appends it to the given prefix. If prefix is not given get
       the cluster level default.

    """
    if not prefix:
      prefix = self._ConfigData().cluster.mac_prefix

    def GenMac():
      byte1 = random.randrange(0, 256)
      byte2 = random.randrange(0, 256)
      byte3 = random.randrange(0, 256)
      mac = "%s:%02x:%02x:%02x" % (prefix, byte1, byte2, byte3)
      return mac

    return GenMac

  def GenerateMAC(self, net_uuid, ec_id):
    """Generate a MAC for an instance.

    This should check the current instances for duplicates.

    """
    existing = self._AllMACs()
    prefix = self._UnlockedGetNetworkMACPrefix(net_uuid)
    gen_mac = self._GenerateOneMAC(prefix)
    return self._temporary_macs.Generate(existing, gen_mac, ec_id)

  def ReserveMAC(self, mac, ec_id):
    """Reserve a MAC for an instance.

    This only checks instances managed by this cluster, it does not
    check for potential collisions elsewhere.

    """
    all_macs = self._AllMACs()
    if mac in all_macs:
      raise errors.ReservationError("mac already in use")
    else:
      self._temporary_macs.Reserve(ec_id, mac)

  def GenerateDRBDSecret(self, ec_id):
    """Generate a DRBD secret.

    This checks the current disks for duplicates.

    """
    return self._temporary_secrets.Generate(self._AllDRBDSecrets(),
                                            utils.GenerateSecret,
                                            ec_id)

  def ReserveLV(self, lv_name, ec_id):
    """Reserve an VG/LV pair for an instance.

    @type lv_name: string
    @param lv_name: the logical volume name to reserve

    """
    all_lvs = self._AllLVs()
    if lv_name in all_lvs:
      raise errors.ReservationError("LV already in use")
    else:
      self._temporary_lvs.Reserve(ec_id, lv_name)

  def _UnlockedCommitTemporaryIps(self, ec_id):
    """Commit all reserved IP address to their respective pools

    """
    for action, address, net_uuid in self._temporary_ips.GetECReserved(ec_id):
      self._UnlockedCommitIp(action, net_uuid, address)

  def _UnlockedCommitIp(self, action, net_uuid, address):
    """Commit a reserved IP address to an IP pool.

    The IP address is taken from the network's IP pool and marked as reserved.

    """
    nobj = self._UnlockedGetNetwork(net_uuid)
    pool = AddressPool(nobj)
    if action == RESERVE_ACTION:
      pool.Reserve(address)
    elif action == RELEASE_ACTION:
      pool.Release(address)

  def _UnlockedReleaseIp(self, net_uuid, address, ec_id):
    """Give a specific IP address back to an IP pool.

    The IP address is returned to the IP pool designated by pool_id and marked
    as reserved.

    """
    self._temporary_ips.Reserve(ec_id,
                                (RELEASE_ACTION, address, net_uuid))

  def ReleaseIp(self, net_uuid, address, ec_id):
    """Give a specified IP address back to an IP pool.

    This is just a wrapper around _UnlockedReleaseIp.

    """
    if net_uuid:
      self._UnlockedReleaseIp(net_uuid, address, ec_id)

  def GenerateIp(self, net_uuid, ec_id):
    """Find a free IPv4 address for an instance.

    """
    nobj = self._UnlockedGetNetwork(net_uuid)
    pool = AddressPool(nobj)

    def gen_one():
      try:
        ip = pool.GenerateFree()
      except errors.AddressPoolError:
        raise errors.ReservationError("Cannot generate IP. Network is full")
      return (RESERVE_ACTION, ip, net_uuid)

    _, address, _ = self._temporary_ips.Generate([], gen_one, ec_id)
    return address

  def _UnlockedReserveIp(self, net_uuid, address, ec_id, check=True):
    """Reserve a given IPv4 address for use by an instance.

    """
    nobj = self._UnlockedGetNetwork(net_uuid)
    pool = AddressPool(nobj)
    try:
      isreserved = pool.IsReserved(address)
      isextreserved = pool.IsReserved(address, external=True)
    except errors.AddressPoolError:
      raise errors.ReservationError("IP address not in network")
    if isreserved:
      raise errors.ReservationError("IP address already in use")
    if check and isextreserved:
      raise errors.ReservationError("IP is externally reserved")
    return self._temporary_ips.Reserve(ec_id,
                                       (RESERVE_ACTION,
                                        address, net_uuid))

  def ReserveIp(self, net_uuid, address, ec_id, check=True):
    """Reserve a given IPv4 address for use by an instance.

    """
    if net_uuid:
      return self._UnlockedReserveIp(net_uuid, address, ec_id, check)

  def AddInstance(self, instance, ec_id, replace=False):
    """Add an instance to the config.

    """
    instance.serial_no = 1
    instance.ctime = instance.mtime = time.time()
    self._ConfigData().instances[instance.uuid] = instance
    self._ConfigData().cluster.serial_no += 1 # pylint: disable=E1103
    self.ReleaseDRBDMinors(instance.uuid)
    self._UnlockedCommitTemporaryIps(ec_id)

  def _UnlockedAddDisk(self, disk):
    disk.UpgradeConfig()
    self._ConfigData().disks[disk.uuid] = disk
    self._ConfigData().cluster.serial_no += 1 # pylint: disable=E1103
    self.ReleaseDRBDMinors(disk.uuid)

  def _UnlockedAttachInstanceDisk(self, inst_uuid, disk_uuid, idx=None):
    instance = self._UnlockedGetInstanceInfo(inst_uuid)
    if idx is None:
      idx = len(instance.disks)
    instance.disks.insert(idx, disk_uuid)
    instance_disks = self._UnlockedGetInstanceDisks(inst_uuid)
    for (disk_idx, disk) in enumerate(instance_disks[idx:]):
      disk.iv_name = "disk/%s" % (idx + disk_idx)
    instance.serial_no += 1
    instance.mtime = time.time()

  def AddInstanceDisk(self, inst_uuid, disk, idx=None, replace=False):
    self._UnlockedAddDisk(disk)
    self._UnlockedAttachInstanceDisk(inst_uuid, disk.uuid, idx)

  def AttachInstanceDisk(self, inst_uuid, disk_uuid, idx=None):
    self._UnlockedAttachInstanceDisk(inst_uuid, disk_uuid, idx)

  def GetDisk(self, disk_uuid):
    """Retrieves a disk object if present.

    """
    return self._ConfigData().disks[disk_uuid]

  def AllocatePort(self):
    return 1

  def Update(self, target, feedback_fn, ec_id=None):
    def replace_in(target, tdict):
      tdict[target.uuid] = target

    update_serial = False
    if isinstance(target, objects.Cluster):
      self._ConfigData().cluster = target
    elif isinstance(target, objects.Node):
      replace_in(target, self._ConfigData().nodes)
      update_serial = True
    elif isinstance(target, objects.Instance):
      replace_in(target, self._ConfigData().instances)
    elif isinstance(target, objects.NodeGroup):
      replace_in(target, self._ConfigData().nodegroups)
    elif isinstance(target, objects.Network):
      replace_in(target, self._ConfigData().networks)
    elif isinstance(target, objects.Disk):
      replace_in(target, self._ConfigData().disks)

    target.serial_no += 1
    target.mtime = now = time.time()

    if update_serial:
      self._ConfigData().cluster.serial_no += 1 # pylint: disable=E1103
      self._ConfigData().cluster.mtime = now

  def SetInstancePrimaryNode(self, inst_uuid, target_node_uuid):
    self._UnlockedGetInstanceInfo(inst_uuid).primary_node = target_node_uuid

  def _SetInstanceStatus(self, inst_uuid, status,
                         disks_active, admin_state_source):
    if inst_uuid not in self._ConfigData().instances:
      raise errors.ConfigurationError("Unknown instance '%s'" %
                                      inst_uuid)
    instance = self._ConfigData().instances[inst_uuid]

    if status is None:
      status = instance.admin_state
    if disks_active is None:
      disks_active = instance.disks_active
    if admin_state_source is None:
      admin_state_source = instance.admin_state_source

    assert status in constants.ADMINST_ALL, \
           "Invalid status '%s' passed to SetInstanceStatus" % (status,)

    if instance.admin_state != status or \
       instance.disks_active != disks_active or \
       instance.admin_state_source != admin_state_source:
      instance.admin_state = status
      instance.disks_active = disks_active
      instance.admin_state_source = admin_state_source
      instance.serial_no += 1
      instance.mtime = time.time()
    return instance

  def _UnlockedDetachInstanceDisk(self, inst_uuid, disk_uuid):
    """Detach a disk from an instance.

    @type inst_uuid: string
    @param inst_uuid: The UUID of the instance object
    @type disk_uuid: string
    @param disk_uuid: The UUID of the disk object

    """
    instance = self._UnlockedGetInstanceInfo(inst_uuid)
    if instance is None:
      raise errors.ConfigurationError("Instance %s doesn't exist"
                                      % inst_uuid)
    if disk_uuid not in self._ConfigData().disks:
      raise errors.ConfigurationError("Disk %s doesn't exist" % disk_uuid)

    # Check if disk is attached to the instance
    if disk_uuid not in instance.disks:
      raise errors.ProgrammerError("Disk %s is not attached to an instance"
                                   % disk_uuid)

    idx = instance.disks.index(disk_uuid)
    instance.disks.remove(disk_uuid)
    instance_disks = self._UnlockedGetInstanceDisks(inst_uuid)
    _UpdateIvNames(idx, instance_disks[idx:])
    instance.serial_no += 1
    instance.mtime = time.time()

  def DetachInstanceDisk(self, inst_uuid, disk_uuid):
    self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)

  def RemoveInstanceDisk(self, inst_uuid, disk_uuid):
    self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)
    self._UnlockedRemoveDisk(disk_uuid)

  def RemoveInstance(self, inst_uuid):
    del self._ConfigData().instances[inst_uuid]

  def AddTcpUdpPort(self, port):
    self._ConfigData().cluster.tcpudp_port_pool.add(port)


text:
Q: Google+ Sign-in for Android - Google Permissions Activity Result Codes I've found out a small issue when working with Google+ Sign for Android and after searching the web (and SO obviously) I'm asking my question out loud to see if anyone has noticed the same.
I'm enabling server-side API access for my app as described
here.
Let me be detailed about what's going on. Take this fragment:
Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
          "<APP-ACTIVITY1> <APP-ACTIVITY2>");
String scopes = "oauth2:server:client_id:<SERVER-CLIENT-ID>:api_scope:<SCOPE1> <SCOPE2>";
String code = null;
try {
  code = GoogleAuthUtil.getToken(
      this,                                              // Context context
      Plus.AccountApi.getAccountName(mGoogleApiClient),  // String accountName
      scopes,                                            // String scope
      appActivities                                      // Bundle bundle
  );

} catch (IOException transientEx) {
  // network or server error, the call is expected to succeed if you try again later.
  // Don't attempt to call again immediately - the request is likely to
  // fail, you'll hit quotas or back-off.
  ...
  return;
} catch (UserRecoverableAuthException e) {
  // Requesting an authorization code will always throw
  // UserRecoverableAuthException on the first call to GoogleAuthUtil.getToken
  // because the user must consent to offline access to their data.  After
  // consent is granted control is returned to your activity in onActivityResult
  // and the second call to GoogleAuthUtil.getToken will succeed.
  startActivityForResult(e.getIntent(), AUTH_CODE_REQUEST_CODE);
  return;
} catch (GoogleAuthException authEx) {
  // Failure. The call is not expected to ever succeed so it should not be
  // retried.
  ...
  return;
} catch (Exception e) {
  throw new RuntimeException(e);
}

See the UserRecoverableAuthException and it's comment? Well, that is what I want to talk you about. In that case as you can see, another activity is started and it begins a flow where you have to accept the permissions the app is requesting. As you can see the startActivityForResult method is being used. What I observed is that Activity.RESULT_OK is being returned when the users accepts to give the permissions but Activity.RESULT_CANCELED is returned both when an error/crash occurs or when the user simply refuses to give permission and cancels the flow.
So here is (YEAH, FINALLY!) my question... How can I difference one case (error/crash) from the other (possible user flow)?

A: Well, after fighting a while with this I think I found a solution. I don't know if it's the right way to do it, but I thought I should share it, so here it goes.
we have the onActivityresult method that the activity doing the login/sign in should implement.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     (...)
}

What I thought (after a thinking a while, and later confirmed) was that the Intent data parameter should have some kind of clue or info about what kind of error or result is being returned. After inspecting it little bit I found that in the case of the user denying the permissions for the app, this intent had an Extra String with key Error and value UserCancel. So that's what I ended up using to distinguish one case from the other. Hope it helps!
   data.getExtraString("Error"); // This should have the value "UserCancel" when the user
                                 // refused to give the permissions required by the app.

Please note that the data intent may not always offer this ExtraString, and in fact may be null for some calls of onActityResult, so you should check if (data != null) before using this.

redpajama_set_name: RedPajamaStackExchange


Kanye West released his much awaited interview with Charlamagne Tha God earlier today where they discussed Trump, real estate, issues wit Jay-Z, new music, hospitalization, Kim Kardashian getting robbed in Paris and much more.
Following that, he made a stop at TMZ along with his new friend Candace Owens to take part in their live segment and just as expected, it was all fireworks.
Kanye stirred up the place with his controversial comments about slavery. 'Ye argued that 400 years of slavery sounded like it continued for so long out of choice. "When you hear about slavery for 400 years. For 400 years? That sounds like a choice. You was there for 400 years, and it is all of y'all?" questioned Kanye, leaving a lot of people in the newsroom shocked.
TMZ's Van Lathan got up from his seat and fired back at Kanye, "Frankly, I'm disappointed, I'm appalled, and brother I'm unbelievably hurt." Watch it below. Before that, Kanye also explained why he loves Donald Trump so much.


This role is within the European Project management group's simulation team. The group is responsible for PC based navigation, communication, engine and cargo training simulators from small classrooms through to full simulator complexes which utilise multiscreen or projector display solutions and interface to real equipment or controls via IP 1/0 devices and require the installation of equipment into consoles, cabinet, racks and 'bridge' structures.
Working within the Project Management team, the Project Engineer is primarily responsible for the design, cost estimation, risk analysis, preparation and installation of these simulators.
During the installation phase you may be required to manage other engineering resources and sub-contractors. The Project Engineer is responsible to maintain a safe working site and to identify and mitigate all safety hazards.
* Ability to cope with allocated work and travelling.


text:
Why just speaking English isn't going to cut it anymore.
Britain is facing an uncertain future and an uneasy relationship with Europe after Brexit and the latest general election. Among other things, a key determiner of the success of Brexit will be the UK's ability to conduct negotiations without language barriers. But the country's woeful inability to learn languages, and the decline in foreign language learning among school and university students across Britain, does not bode well. Abigail Parrish, Associate Lecturer in Languages and Ursula Lanvers, Lecturer in Language Learning and Teaching from the University of York write in The Conversation.
Of course, Welsh, Gaelic, Irish and Cornish are already spoken in some parts of the UK. And while it's great to see many of these minority languages experiencing something of a revival over recent years, when it comes to life after Brexit it's languages from further afield that will likely be most useful to Brits.
Many people in the UK may well ask "why we need languages" when "everyone in Europe speaks English anyway". Indeed, all Brexit negotiations will be conducted in English. But given that the UK's lack of foreign language skill is estimated to cost the nation up to £48 billion a year, this isn't something that can just be ignored. Especially considering this figure is unlikely to decrease in post-Brexit Britain.
Then there is the fact that 30% of the UK's language teachers are from Europe, so Brexit might actually deepen the current language teacher recruitment crisis – currently, half of modern foreign language teacher training posts remain unfilled.
It has also been estimated that 3,500 more teachers are needed if the government really wants to stick to its aim of 90% of students achieving the English Baccalaureate by 2025.
A look at the issue
Recent studies have blamed the UK's language problem on the current teaching methods and materials used – indicating poor performance is a consequence of the system rather than the students. But there's a lot more to it than that.
One of the main issues is that at GCSE level, schools often employ a policy of entering only higher attaining students, who are expected to pass with a good grade. This divides students into two groups: those likely and those not likely to get a good language GCSE. And this is detrimental to overall motivation and creates a two-tier system.
Such grouping also inevitably coincides with the different socioeconomic backgrounds of students – with students from more advantaged backgrounds more likely to be entered for languages.
Research has also shown that the higher the proportion of students eligible for free school meals, the more likely a school is to withdraw certain groups of students from language lessons. So while 84% of students in selective schools are entered for a language GCSE, only 48% of their peers in comprehensive schools are.
A lot of this may well come down to the fact that at exam level, language subjects have been shown to be marked much more harshly than other subjects. So not only are schools choosing not to enter "less able" students, but also pupils aiming for the best results and a place at a top university are also more likely to shun languages. This is because they don't want to risk reducing their chances of getting high grades.
Making languages great again
This is a sad state of affairs, given that evidence suggests that students are generally curious about languages – including ones not offered at school.
Recent research also shows that students are more driven to take a language at GCSE when they perceive a personal relevance. And engaging students' sense of personal importance may also mean thinking outside the box, or rather the entrenched languages of French, Spanish and German.
The 2013 Languages for the Future report highlights ten languages – Spanish, Arabic, French, Mandarin Chinese, German, Portuguese, Italian, Russian, Turkish and Japanese – which are of most use to the UK. And although it is not yet clear what impact Brexit may have on the nation's language needs, this provides a good basis for creative thinking.
But language teachers can only work within the framework set by the exam boards, so it may be that the shifting of power and loyalties that Brexit brings will provide a perfect opportunity to rethink language provision for all.
More than one choice
It cannot be denied that Europe is busier than ever learning English, and that English is used widely as a medium of discussion across Europe. English will of course continue to be an important EU working language post-Brexit, not because of the need to trade with Britain, but because many Europeans find it a convenient lingua franca.
But let's remember that multilingual Europe has a choice of language – as recently demonstrated by European Commission president Jean-Claude Juncker – unlike monolingual Britain.
The use of English by the UK's trading and political partners depends largely on their choice and preference. And while other nations are busying themselves to become more and more bilingually functional, monolingual Britain risks increasing isolation.
Read more Why just speaking English isn't going to cut it anymore.
Languages are taught in many ways today. Do schools have to change the way a new language is taught to encourage more pupils to learn and put more emphasis on its importance? Please tell us your thoughts in comments or via Twitter ~ Tamsin
Don't forget you can sign up to receive our daily email bulletin (around 7am) with all the latest schools news stories. Your details will never be given to anyone else and you can unsubscribe at any stage. Just follow this link
We now have a Facebook page - pls click to like!
More recent posts...
Teacher Pay
'Broken' school funding system condemned by MPs
Heads call on Ofsted to publish inspector training
Special needs education breaking our budgets, warn councils
Oxford's admission problem is because state schools fail to push their brightest pupils, vice chancellor suggests
Guest Post: The Big Hair Assembly: Five Reasons You Should be There
Secret Teacher: now I'm a parent, my school can't see me as a leader.
Sex crimes in schools up by 255 per cent in four years
Categories: Learning, Primary, Secondary and Teaching.
Tags: Brexit, European Union and modern foreign languages.
Philippe Salmon (@SalmonPhilippe)	 June 17, 2017 at 5:57 pm
As linguists at The French Translation Company, we are worried about this, which is why we sponsored a "Young French Learner of the Year" competition.
If the world is to be our oyster post – Brexit, we need to shift our thinking from "Everyone speaks English" to "What does our customer want to hear?"
Lord Sugar, master entrepreneur, in his autobiography described how embarrassed he felt at a meeting of European peers when he observed colleagues from other countries fluently speaking at least one other language, when he couldn't…
Parent Governor	 June 19, 2017 at 8:30 am
Should students ignore the evidence that higher grades are disproportionately awarded to natural language speakers, those who live within multi-lingual families? On top of which many students feel they are forced in modern languages so schools can score in the EBacc and succeed in yet more Government set targets.
Can we really criticise students for wanting to avoid subjects where they can't even enter on a level playing field? More needs to be done to fix the system.
Let us know what you think...	Cancel reply
Do you feel your school has sufficient Mental Health support for students?
Free Daily News Bulletin!
Enter your email for a daily update of the latest schools news and ideas. No spam and you can unsubscribe at any time.
Over on Twitter…
Tweets by SchoolsImprove

redpajama_set_name: RedPajamaCommonCrawl


Fruitscape | About Apple Pollination.
Most fruit trees in the UK are not self fertile and require cross pollination in order to produce fruit. Some apples and pears are described as being self fertile, but when cross pollination occurs, a better set occurs.
Apples are only pollenated with pollen from other apple trees; pears are only pollenated with pollen from other pear trees etc. Pear trees do not pollinate apple trees and apple trees do not pollinate pear trees.
People are put off by what appears to be a complicated system. Generally fruit trees are happily pollinated in a garden setting because neighbours have fruit trees too. However if problems are being encoutered consider the following.
Apples, typically, are in blossom for 7 around days during which they come into flower, reach their peak and then tail off. Through studying the flowering habit of the trees, dates have been identified as to when the tree is at full bloom and thus at optimal pollination. For successful pollination to occur, cultivars should be grown that are in blossom some 4 days before or 3 three days after full bloom. For amateur gardeners this can appear confusing so the RHS adopted a grouping system similar to that outlined below. Some texts use letters to destinguish the groups, others numbers; either way they refer to the same thing. Whilst the timings may be slightly out in the North of the country, the general pattern applies.
The weather has an impact on as to when the trees come into blossom and the above timings may be earlier or later according to the season.
Cultivars may be pollinated by other cultivars in the same group or those in adjacent groups, so St Edmunds Pippin may be pollinated by other cultivars in group 3 and those in groups 1 and 3. The reason for this is that flowering times overlap and not by just the day indicated above. To confuse, some texts and nurseries do assign different pollination groups to cultivars, so it can be worth a little research.


You have an STPay account but now you wish to place funds into your STPay account using your Visa, MasterCard or Maestro Card.
This blog post will provide you with the steps on how to Add your card and then you can view our other blog post on how to have this newly added card Verified.
To begin, login to your STPay account. Then go to the heading My Banks & Cards then select Add New Debit or Credit Card.
On the next page that will appear you will enter your card information.
Name on the card should be your name as you are the card holder. If this card is in the name of your spouse, partner, mother, etc. you will not be able to use their card on your STPay account.
You skip the next section unless you are adding one of our STPay Debit cards, such as our STPay INTL PaySpark MasterCard, that you have purchases from us.
You should now be redirected to your account page where you will see this message "Your card has been added successfully. It is ready to use." and you will also get an email regarding that your card is added. Please note that the email might state that your card is verified on your account. This isn't exactly true. Your card is added and you may attempt a deposit with the card but it doesn't become fully Verified and Active on your STPay account until you make a first successful deposit.
Now if you go to the My Banks & Cards heading again and View Credit & Debit Cards you will see that your card is listed as Not Verified and some instructions on how to verify the card using the Micro Verify process.


text:
India's children reap the bitter harvest of endosulfan
In some Keralan villages half the families have a severely disabled child: the legacy, locals say, of pesticide spraying
Chandika Rai and her son Kaushiq. Photograph: Jason Burke/Guardian
Jason Burke in Kattuka
The villagers see the dust rising from the track and know that Dr Mohammed Asheel is on his way.
In a small house set back from a main road surrounded by cashew nut plantations, Chandika Rai picks up her 11-year-old son, Kaushiq, and carries him into their front room.
For 30 minutes while the doctor, a nurse and a physiotherapist are there, their life is a little easier. Then the medical team is gone – on to a neighbouring house where another seriously disabled child is waiting – and Chandika is left alone again.
Asheel is in great demand in Kattuka, a huddle of cement-and-wood homes on a hillside of red earth and lush green trees in the far north of the Indian state of Kerala. In 50% of homes in the village, there is a child or an adult with severe disabilities.
The 29-year-old doctor, an official in the public health department, and the locals blame endosulfan, a pesticide developed in the 1950s and sprayed over the nearby cashew plantations in the 80s and 90s.
Campaigners say the plight of thousands of people such as Chandika and Kaushiq means endosulfan poisoning in southern India is one of the most serious such disasters in the world – and one of the least known.
In September, the Indian supreme court continued a ban on the use of endosulfan it had imposed earlier this year. Rejecting the arguments of dozens of producers, who say there is no link between the pesticide and the disabilities seen in Kerala and neighbouring Karnataka state, the judges maintained the moratorium on the use of the chemical in India.
They did, however, allow Indian companies to sell existing stocks overseas in the rare places where the product is still legal. The decision did little to allay the growing anger of people in places such as Kattuka.
"I was very happy when I heard about the ban," said Rai, 35, as she nursed her son. "We have suffered so much and I don't want anyone to suffer in the future like this. But why did it take so long? And why is no one punished?"
For 20 years, helicopters were a frequent sight in the sky over the districts of Kasagod in Kerala and Dakshina Kannada in Karnataka.
Two or three times a year, they swept low to spray chemicals over the cashew trees planted on recently deforested farmland. Most of the locals had never seen a helicopter before and had no idea what they were doing.
There were 60 communities around the cashew plantations, which grow nuts for the Indian market or for export, and after a few years the villagers got used to the spraying.
Then, towards the end of the 1980s, visiting doctors began to notice a variety of health problems, particularly among children, and began to suspect endosulfan was to blame.
Subsequent studies – contested by the industry – linked endosulfan to damage to the central nervous system and hormonal changes in mothers and babies.
When researchers compared children and teenagers from villages where endosulfan had been sprayed with populations from those where the chemical had not been used recently, they found the former suffering much higher levels of skin complaints, epilepsy and cerebral palsy.
Dr Ravindranath Shanbhag, 61, a pharmacologist who was one of the first to start seeing the problem and to demand an endosulfan ban, told the Guardian about 6,000 people have been affected in northern Kerala and southern Karnataka.
"The manufacturers say the health concerns are propaganda put about by western companies who want developing-world nations to switch to newer, more expensive products for which they still have the patent," said Shanbhag. "But I know the truth. I've been seeing it with my own eyes for many years."
There is much anecdotal evidence, too. Rai, like many other women, said she was exposed to heavy aerial spraying of endosulfan throughout her pregnancy with Kaushiq.
"I saw the helicopters, and we live almost in the plantation. But I never thought they could harm my baby," she said.
Tests last year found high levels of endosulfan still in the soil and Shanbhag worries that tens of thousands of unborn children may be harmed, and that more problems will come with future generations.
"There are hundreds of thousands of people now reaching adulthood who may have been exposed," he said. "What is going to happen to the children they plan to have? We simply don't know."
The financial burden the victims place on their families is significant. Many of the families are already poor, often manual labourers earning under £5 a day, when there is work.
Ramesh Kartagea, 28, is severely disabled and is cared for by his two sisters and mother. His father works in the fields; the women work as seamstresses. They were forced to sell their small home to pay medical bills.
Since earlier this year, they have received benefits from the Kerala state government worth about £25 a month. This has helped a little. They welcomed the ban – in part.
"It's a good thing but there are a lot of people already suffering," Shalini Kartagea, 30, said.
Asheel said the supreme court decision had countered a powerful lobbying effort by senior politicians with links to the pesticide industry.
One result has been investment in a series of new rehabilitation centres in Kasagod district. Though rudimentary, they are "better than nothing", the doctor said.
In one such centre, in the village of Perla Enkanakaje, the names of 27 patients are listed on a blackboard. "We identified 70 locals who need help," said Asheel. "Almost all were born between 1980 and 2002, the years of peak spraying in the district. We cannot cater to all of them but do what we can."
The physiotherapy Kaushiq Rai now receives helps at least "a little", his mother said. "He likes travelling. We take him to temples and he is happy," she said. "I think about all the suffering but, though I am angry, I am helpless."


text:
The Magic Lives
Stunning as ever
Classics are difficult to update. There's no way to ensure how well a new version of a famous story or character will do until the moment of truth. Regardless, this hasn't dismayed the house of mouse from putting out more live-action adaptations of their signature animated classics during the "golden age" of animation of Walt's time. In my opinion, 2010's Alice in Wonderland and last year's Maleficent, failed to recapture any of the nostalgic magic the earlier animated versions had or even try to elevate the stories to different lengths. At first, I didn't have high hopes for this new version of Cinderella; I wasn't even planning on seeing the film until I was goaded to go (don't ask). I sat in my seat anticipating disappointment but instead the movie did something else: surprise me. If you're familiar with the story, then you should know this version remains more or less the same as the animated classic. For those who don't or have never seen any version of Cinderella, I'll just give a brief synopsis: from childhood, Ella (played by the enchantingly beautiful Lily James) had been
taught by her mother to believe in the existence of magic as well as the virtue of being kind to others. After losing her mother to an unknown illness, her father remarries to widow Lady Tremaine (Cate Blanchett) and brings her to live with them in their home along with her daughters Drisella (Sophie MsShera) and Anastasia (Holliday Grainger). The three don't warm up to Ella, worried more about their financial wealth and vanity than anything. Soon after, her father passes away as well, and Lady Tremaine's greedy and callous nature is revealed as she fires the servants of the household; making Ella do all the work at which
Have courage and be kind
point she inherits the nickname "Cinder" Ella. From here, Ella's belief of being tact with others is tested, and here is where the moral and theme lays the foundation of the film, making this the best Cinderella ever. What really stood out for me was how it stayed faithful to the animated classic, capturing that magic which previous adaptations failed to do so. Cinderella is truly an enchanted achievement thanks to its great direction, casting and its moral about the importance of forgiveness and the courage of always being gracious.
-Reviewed by Razor (3/29/15)


text:
Miranda Yaver, PhD
Questions For Brett Kavanaugh
On July 9, 2018, the 150th anniversary of the ratification of the Fourteenth Amendment, President Trump announced his nominee for Associate Justice of the Supreme Court, filling the vacancy left by Justice Anthony Kennedy, who had been the swing vote on the Supreme Court. This leaves Supreme Court nominee Brett Kavanaugh (DC Circuit) in a potential position to reshape law in areas ranging from reproductive rights and health care to LGBT rights to voting to presidential powers to administrative law and discretion to agencies' interpretations. The Senate Democrats, though in a week political position, must be poised to press Judge Kavanaugh on a number of areas of law that will be troubling to a number of Americans across the nation.
In light of post-Bork Supreme Court nominees' general reticence about their views on precedent, their personal and political beliefs, and hypothetical cases, senators asking Judge Kavanaugh questions about his agreement with precedent will likely be relatively fruitless (though they should note that despite invocations of the "Ginsburg rule," then-Judge Ginsburg was quite candid about her views on abortion politics, thus limiting nominees' ability to rely on it to deflect). While we can make conjectures about his views on Roe v. Wade and Planned Parenthood v. Casey based on his being on the Federalist Society list, asking him about Roe might not be that illuminative. However, in a number of cases, the Supreme Court has laid out quite vague standards that would allow judges to reach quite different interpretations of their proper application. Thus, I have proposed below the following questions for members of the Senate to ask Judge Kavanaugh, which seek to highlight his interpretation of the scope of existing precedents, how he reached prior decisions, the authorities that he consults in reaching decisions and the balancing of competing rights, and seeking clarification on controversial remarks that he has made:
1) While Roe v. Wade is the central abortion law holding on which many focus, Planned Parenthood v. Casey is the holding according to which we now judge the constitutionality of states' restrictions on abortion access. What is your understanding of what constitutes an undue burden or a substantial obstacle within the meaning of Casey? How do you feel that Casey compels justices to identify whether abortion restrictions are motivated by health and safety or by efforts to dissuade abortions? How do you interpret this Supreme Court precedent as clarifying how the state balances its interest in life and potential life?
2) While the Burwell v. Hobby Lobby holding was technically in regards to closely-held corporations' ability to exercise religious freedom in their decisions regarding health coverage for employees under the ACA, it affirmed notions of corporate personhood as also laid out in Citizens United, and expanded the 1st Amendment protections afforded at least some corporations. Indeed, Justice Ginsburg, in her dissent in Hobby Lobby, wrote that there as "little doubt that RFRA claims will proliferate, for the Court's expansive notion of corporate personhood -- combined with its other errors in construing RFRA -- invites for-profit entities to seek religion-based exemptions from regulations they deem offensive to their faith." How limited in scope do you see this holding as extending? That is, to what extend do you view it as laying the groundwork for more corporations to claim religious exemptions, and how (if at all) as a judge would you ascertain the sincerity of religious beliefs espoused by those in corporations?
3) In a speech at the American Enterprise Institute, you appealed to Justice Rehnquist's dissent in Roe v. Wade, and in doing so criticized the majority's creation of unenumerated rights. You said, "Rehnquist's dissenting opinion did not suggest that the Constitution protected no rights other than those enumerated in the text of the Bill of Rights. But he stated that under the court's precedents, any such unenumerated right had to be rooted in the traditions and conscience of our people," and that while Justice Rehnquist's view was in the dissent rather than the majority, "he was successful in stemming the general tide of free-wheeling judicial creation of unenumerated rights that were not rooted in the nation's history and tradition." Given the precedents of Griswold and Roe, as well as the broader notions of privacy that have been upheld by the Court, how would you define the proper extent of unenumerated rights, and on what authorities would you rely in ascertaining whether a right is consistent with enumerated rights, and what falls outside the scope of judicial power to assert?
4) In the context of privacy decisions under the 4th Amendment, under what conditions do you interpret the Supreme Court as calling for a "reasonable suspicion" as opposed to a "probable cause" threshold for a search, and how according to cases such as Pottawatomie v. Earls, would you identify what exactly would be grounds for "reasonable suspicion"?
5) It is not uncommon for the interest of privacy and liberty more generally to be weighed against the interest of public safety and national security. How do you view these competing interests, and how do you interpret the Supreme Court precedent as balancing these when they're in tension? What evidence of a security threat do you see as sufficient to justify intrusions on individual liberty, and to what sources would you turn to identify this?
6) You dissented in National Federation of Federal Employees v. Vilsack, a case on whether the Fourth Amendment permitted random drug testing for Forest Service Job Corps Center employees, and whether the non-law-enforcement public-safety interest in a drug-free environment outweighed the interest in guarding against privacy invasions of a random drug test. The majority found that the program was impermissible under the Fourth Amendment because there hadn't been evidence of drug problems among the staff, suggesting that it was "a solution in search of a problem," and that the program was overly broad in its application. I have two questions about your view on this case:
a) In your dissent, you viewed the drug testing program as being clearly reasonable and constitutionally permissible, holding that it "would seem negligent not to test" employees for drugs given the history of drug use among the at-risk students participating in the program. How do you assess a compelling state interest in combatting drug use when there is no evidence that this is a problem among the staff? When you consider compelling state interest, is it based on evidence of an existing problem, or is a more theoretical issue that the government has an interest in avoiding enabling?
b) You also viewed the drug test as being nonintrusive since it was only the provision of a urine sample. Are there more invasive oversight measures (such as blood tests or the submission of medical histories) that you would not have viewed as permissible even in light of the government's interest in a drug-free environment?
7) In Klayman v. Obama, you decided on the National Security Agency's Section 215 call-records program, which in your concurrence you found to be "entirely consistent with the Fourth Amendment." How do you view this opinion now in light of the June 2018 decision of Carpenter v. United States?
8) You have been critical of Thomas Jefferson's arguments about a strict wall of separation between church and state. How high do you view the proper separation of church and state, and how do you understand the Supreme Court precedents and history as shaping determinations as to what is a breach of this separation?
9) In the context of the Establishment Clause and the Lemon Test from Lemon v. Kurtzman (1971), the Court has held that laws are in violation of the Establishment Clause unless they 1) have a primary secular purpose, 2) have a primary secular effect, and 3) do not cause undue government entanglement in religion. You have said that application of the Lemon Test "can sometimes be counterproductive or even harmful." Please discuss what your specific concerns are about it, and what your preferred approach to Establishment Clause cases would be.
10) Setting aside your view of the merits of keeping in place the Lemon Test and focusing instead on your understanding of its proper application, how do you understand the Court as having defined "undue government" entanglement in religious beliefs? To what sources do you believe it is legitimate to look in order to ascertain the secular vs. non-secular purpose of a policy? Do you look to facial neutrality, do you look at sources beyond the text, etc? How much evidence of someone's personal history and comments do you feel would satisfy the qualification of being religiously-motivated?
* This is especially important in light of Justice Roberts's opinion in Trump v. Hawaii, which held that a facially neutral executive order could be treated as not constituting a non-secular purpose in large part because the religiously-motivated statements were from sources such as tweets, campaign statements, rallies, etc., as opposed to official government documents. So, if there is a policy with several statements indicating an underlying motivation of bias, should such statements enter into consideration by the Court, or should a more textual reading be applied?
11) You served as co-chairman of the Federalist Society's "School Choice Practice Group," and you worked on school choice litigation in Florida. One of the concerns about vouchers is that while promoting flexibility in allowing children to have more education options, they allow tax dollars to go to schools that may be non-secular, with the vouchers more likely to be used for religious schooling, which is less expensive. While the Supreme Court upheld their constitutionality in Zelman v. Simmons-Harris (2002), it was a contentious 5-4 decision and this remains a highly salient issue. Can you please discuss the evidence that you saw for their legitimacy taking into account both the state's compelling interest in education quality, as well as the empirical fact that the vast majority participating in these program choose religious schools. When you look at data such as the differences in tuition for secular and non-secular schools and the rates of using vouchers for secular and non-secular schools, how do you evaluate the extent to which there is a true private choice?
12) A number of Supreme Court decisions have upheld the constitutionality of affirmative action, conditional upon those policies not being administered through the use of quotas, but rather as part of a broader acknowledgement that race is one of many factors contributing to education diversity, and for which there is a compelling state interest (Grutter v. Bollinger, Fisher v. UT Austin). How should the Supreme Court balance affirmative action precedents that have been reaffirmed, against the (elected) executive branch rescission of affirmative action guidance?
13) You predicted decades ago that the Supreme Court would embrace a color-blind view of the constitution, an approach that would undue much settled precedent regarding the consideration of race in admissions. You have also said, "This case is one more step along the way in what I see as an inevitable conclusion within the next 10 to 20 years when the court says we are all one race in the eyes of the government." Please elaborate on your remark about enforcing a color-blind constitution, and to what extent (if at all) you consider the extent to which racial diversity would likely decline in the event of these programs' termination.
14) In 2013 in Shelby County v. Holder, the Supreme Court controversially struck down a portion of the Voting Rights Act that required preclearance. In the immediate aftermath of the holding, several states enacted restrictions on voting laws, such as onerous voter ID requirements and limits on early voting. In his majority Chief Justice Roberts cited the limited evidence of ongoing intrusions into voting rights in the affected parts of the country, though in her dissent, Justice Ginsburg compared the decision to throwing away one's umbrella in a rainstorm because one is getting wet. One tension that we have in this country is a recognition of certain fundamental rights on which the government can only in very rare cases infringe, as well as a system of federalism according to which states often have some measure of autonomy in implementation. How would you evaluate whether legislation that imposes requirements on states is still required to be in full effect in order to safeguard rights, especially fundamental rights such as voting?
15) You wrote an opinion that upheld South Carolina's strict voter ID law. You argued in your holding that the South Carolina law did not have a "discriminatory and retrogressive effect," and that the purpose was not discriminatory. You additionally cited a precedent that legislators' knowledge of the law's potential disproportionate impact does not alone equate to a discriminatory purpose. How, in your view, are judges meant to interpret whether a law is impermissibly aimed at discrimination, and from what sources do you feel it appropriate to render such an assessment? And to follow up, to what extent do you view this application of precedent deciphering in this case the motive behind voter ID laws extend to issues of disparate impact more broadly?
16) While there has been ample controversy concerning potential racial bias in redistricting and gerrymandering, in a recent case before the Supreme Court (Abbott v. Perez) it was assessed that the district lines may have been drawn out of political bias, which in some parts of the country overlap considerably with racial demographics. Given that we treat racial discrimination with strict scrutiny, how do you view the Court precedent as informing how you would disentangle politically-motivated from racially-motivated drawing of district lines?
17) You have been highly critical of the decision Chevron v. NRDC and the Court's declaration that there should be deference to agency interpretations of their authority unless Congress had been clear about its intention. What would be a more reasonable approach to administrative law doctrine? How would one balance the Supreme Court precedent and the agency's policy expertise against concerns about the scope of government intervention?
18) Your rulings on congressional deference to agencies have been inconsistent. In the context of congressional deference to the Environmental Protection Agency, you are critical of broad agency interpretations of their prerogatives. However, in PHH Corporation et al v. Consumer Financial Protection Bureau (2016), you characterized congressional creation of independent executive agencies as a "headless fourth branch of government," and held that the CFPB's leadership structure was unconstitutional. Under what conditions do you view it as appropriate and constitutionally permissible for Congress to create such agencies, and what do you view as the proper role of courts in checking the reach of this executive branch authority?
19) You said of the unanimous decision United States v. Nixon (1974), which compelled President Nixon to comply with the subpoena and to produce the tapes and documents pertaining to Watergate, "Maybe Nixon was wrongly decided – heresy though it is to say so. Maybe the tension of the time led to an erroneous decision." You also said of United States v. Nixon, "Nixon took away the power of the president to control information in the executive branch by holding that the courts had power and jurisdiction to order the president to disclose information in response to a subpoena sought by a subordinate executive branch official." Please elaborate on what you view as erroneous about this decision, and what you view as a more appropriate remedy than the one given. In times of executive branch corruption and an effort to promote transparency and accountability, what do you view as the proper role of the Supreme Court, if any, in guarding against excessive invocation of executive privilege? What do you believe that history, precedent, and practicality suggest should be the threshold requirements for claiming executive privilege?
20) In 2016, you said you wanted to "put the final nail" in the 1988 Supreme Court ruling of Morrison v. Olson, which by a vote of 7-1 upheld the constitutionality of provisions that created an independent counsel under the Ethics in Government Act. You additionally said, "It makes no sense at all to have an independent counsel looking at the conduct of the president." While the law expired in 1999, being replaced by a Justice Department regulation that governs special counsels, views on the legitimacy of independent counsels and special counsels are of obvious concern right now. Please elaborate on your rationale for opposing this holding, to what extent you view Justice Scalia's dissenting opinion as being the proper approach to adopt, and the conditions under which you view certain types of investigations of the executive branch as legitimate or inappropriate. If you view this authority as residing solely in Congress, do you view congressional inaction (potentially a result of unified government) as effectively leaving no oversight capacity over the president until the next presidential election?
21) Regarding the possibility of indicting a sitting president, you said, "Having seen first-hand how complex and difficult that job is, I believe it is vital that the President be able to focus on his never-ending tasks with as few distractions as possible. The country wants the President to be 'one of us' who bears the same responsibilities of citizenship that all share. But I believe that the President should be excused from some of the burdens of ordinary citizenship while serving in office." What do you view – and what do you believe that prior cases justify – as being the proper way to balance ensuring that there is rule of law and transparency amid potential issues of corruption, and promoting efficiency in the executive branch? Are there executive branch behaviors or allegations to which you would not apply that broad view of promoting flexibility and efficiency for the president, and if so, what are they?
22) The notion that there would be limits on the ability for an independent counsel, or in this case a special counsel, to investigate the President of the United States, while instead relying on the political process for impeachment, seems to be problematic in that it is difficult to obtain evidence of wrongdoing to the point of impeachment absent an investigation. How do you reconcile your reluctance to support investigatory processes into the president's conduct and a reliance on Congress, which might be looking to findings otherwise identified through that investigatory process?
23) Several political questions are currently arising that have so far been untested in the Supreme Court, particularly with respect to Article II powers. To what sources do you consult in evaluating new issues for which there is not Supreme Court precedent or is little precedent? Some of President Trump's defenders have pointed to Article II not laying out particular limits on the pardon power, and have cited this as evidence that it is unlimited, though the Constitution does not explicate limits on many rights that the Court has addressed and on which the Court has imposed bounds. In the case of issues such as the pardon power (in which specific limits are not laid out but for which immense rule of law implications can arise), to what extent do you feel that it falls within the Supreme Court's duty to interpret limits on the scope of the presidential power given broad Article II language, versus letting the issue be resolved by the democratically-elected Congress?
24) With United States v. Lopez and United States v. Morrison, the Supreme Court signaled considerable narrowing of its interpretation of the reach of Congress's power to regulate interstate commerce, instead calling upon Congress to provide greater evidence to support its claim of aggregate impact on the interstate economy. With Gonzales v. Raich, the Supreme Court broadened its interpretation, viewing the Controlled Substances Act as being within Congress's power to regulate, though in National Federation of Independent Business v. Sebelius, Chief Justice Roberts signaled another limit on what the Court viewed as a proper use of Congress's enumerated Commerce Clause authority. What do you feel is the proper test for what falls under Commerce Clause authority -- looking to whether there must be a direct impact on the interstate economy, whether the effect can be indirect, whether it has an aggregate effect on the interstate economy, whether the activity itself must be economic -- and when multiple rules have been adopted by the Court over the years (even in recent years), how would you adjudicate among them to decipher the proper scope of Congress's Article I power?
25) In United States Telecom Association v. Federal Communications Commission, you wrote a dissent in which you held that the net neutrality rule was "one of the most consequential regulations ever issued," but you ultimately claimed that it was "unlawful and must be vacated" because Congress had not explicitly authorized the FCC this rule, despite the ample record of legislative debate about the subject of net neutrality, and because restricting internet service providers' actions intruded on their editorial discretion, which you viewed as in conflict with the First Amendment. How substantial a legislative record do you view as necessary to demonstrate a legislative intent in delegating to administrative agencies, and can you please discuss where you viewed the majority on your panel as having gotten things wrong? Moreover, how do you view it as your role as a judge to balance speech rights of consumers versus the speech rights of internet providers?
Judicial Decisionmaking (general)
26) Please walk through a couple of judicial decisions that you have written in which the law led you to reach a decision that was in conflict with your personal/political beliefs, and how you reconciled that.
27) According to what criteria would you view a precedent as having been wrongly decided? How do you weigh factors such as the extent to which it has been reaffirmed, new evidence of the impact of the holding, how popular the holding is, how recent the holding was, etc?
28) Textualists tend to seek to restrict analysis to the text, giving full meaning to the words of the text, unless doing so would produce an absurd outcome. How would you define an absurd outcome, and how would you reach that conclusion?
29) One of the consequences of lifetime appointments with longer life spans is that people are on the Supreme Court for several decades, and can in some cases be quite out of step politically with public preferences (for example, approximately 2/3 of Americans favor the upholding of Roe). To what extent, if at all, do you feel it appropriate for Supreme Court justices to consider public preferences in their judicial decisionmaking?
Miranda Yaver is a political scientist, health policy researcher, and comedian in Los Angeles. She received her PhD in Political Science at Columbia University in 2015. She has taught courses on American politics, public policy, law, and quantitative methodology at Washington University in St. Louis, Yale University, Columbia University, and Tufts University.


text:
Read this excellent article by EFT Master Pat Carrington, PhD. No telling what you might manifest.
Smiles, Gary
By Patricia Carrington PhD, EFT Master
I've often been asked whether EFT can be used to bring about desirable changes in the world outside of oneself – to "manifest, as this activity is frequently referred to. My answer to this is both a "Yes" and a "No."
EFT can at times bring about dramatic changes in outside circumstances (see reports of successful surrogate tapping on Gary's site) but it will not work under some circumstances and these are important to know. I have seen EFT used to remarkable effect to bring about something that a person is fully ready to allow into their life and I will give you an example of this in a moment. At other times, however, someone may be unable to manifest something they claim to want because within the EFT statement is hidden what Gary Craig refers to as a "tail ender ". I will say more about these important blockages in a moment.
First, let me give you an example of one of the most effective uses of EFT to manifest something in the outside world that I have ever known. "Pete" is an experienced EFT'er who uses EFT in an interesting manner. He is well acquainted with the EFT Choices Method and essentially employs it, but instead of saying the words, "I choose" to introduce his positive portion of the EFT statement, he says instead, "I thank the Universe for…" and follows this with a detailed description of his desired outcome. Here's how that works for him.
Pete's car had seen better days. In fact, it was about to break down any minute. He wanted a new car but did not see how he could possibly afford the kind he wanted. He had been searching the internet for several months, going up to such sites as autotrader.com every day -- but to no avail. The car he wanted wasn't there.
Pete's taste was very definite and I suggest you notice the specific manner in which he refers to what he wants, in the positive "Choices" portion of his EFT statement Gary Craig has repeatedly emphasized the importance of specificity in the negative portion of the EFT statement. Specificity in the positive portion is, I believe, equally important. You will see how Pete formulated his EFT choices with regard to the car he sought. His EFT statement went as follows:
"Even though I don't know how this can happen, I thank the Universe for giving me a light blue Model 240 Volvo Station Wagon made in the years '91 to '93."
You can't be much more specific than that, and Pete diligently tapped on this EFT statement for a couple of weeks at the end of which time an interesting thing happened. The car he wanted suddenly appeared in an online listing of automobiles for sale. The ad up there offered for sale a light blue Model 240 Volvo Station Wagon manufactured in 1992. It had all the amenities Pete wanted and the crowning touch was that it was only a two hours drive from his house.
There only remained the question of how to pay for the car since no insurance company would finance such an old car. However, Pete had been managing a property for a bank manager who was very pleased with the way he had worked for him and when Pete asked him about a car loan he arranged for his bank to finance the car at the lowest possible interest rate, for two years -- something that was entirely affordable for Pete. He took advantage of this opportunity and at this moment is enjoying his new car greatly.
This wasn't the only external manifestation that Pete brought about through his precise EFT statements, however. His old lawnmower then broke down and it would have been difficult for him to afford a new one. So he began using EFT for a lawnmower, using the following statement:
"Even though I don't have a lawnmower now, I thank the Universe for giving me one that just fits my purpose and works excellently."
Within a week of starting to tap daily for a lawnmower, he was driving past a neighbor's house when he saw a lawnmower in their garbage by the curb. It looked in surprisingly good shape. He picked it up, brought it home, inserted a part that he estimated was needed to generate sparks, and found that this did the trick. He had a new lawnmower virtually for free.
He hoped it would continue to work as well in the future but in the back of his mind he thought that it wouldn't be a bad idea to have another lawnmower just as a backup. Later, when this lawnmower showed some carburetor troubles, he was again driving around in his neighborhood when he saw a man who was cleaning out his shop, apparently in preparation for moving, and not one but three lawnmowers had been discarded onto the curb. Pete managed to get all three back to his house and one of them started out right away, excellently. He is still using it.
However Pete's story does not end here. A year later he became concerned about a pending career change which would involve a lifestyle change about which he had some hesitancy. He wanted to tap for an excellent job offer but he had conflicting feelings about this –– what Gary Craig has so aptly termed "tail enders" " were involved here (for a detailed summary of Gary Craig's important theory of tail enders and the way he recommends handling them, as well as the way in which they can be incorporated into your EFT Choices thereby handling them ahead of time, see chapter 7 of my Choices Manual.)
This time Pete had difficulty formulating his EFT statement and no positive results were forthcoming in terms of a suitable job opportunity. Instead, he discovered that he needed to work on this issue in therapy. He realized that his wish, while certainly true for one part of him, was not as simple (not as "congruent") as had been his wish for the Volvo Station Wagon or the lawnmower. It had contradictions within it that needed to be worked out first and he is presently using EFT to do that. This is an excellent example of Gary Craig's suggestion that we locate the tail enders in any affirmation we plan to use, and then use EFT to clear them out.
To sum up my answer to the question posed in this article, I would say that there is evidence that EFT can help a person create exactly what they want in life provided they have a clear unequivocal desire for that thing, with no contradictions or reservations present –– as apparently there were none for Pete when he used EFT to create the car and lawnmower in his life. I would guess, however, that in the majority of cases where someone sets out to use EFT to bring a good thing or event into their lives, that they probably have reservations and conflicts around the receiving of that good and that they should address these first by using EFT on them. However, once having cleared the blocks, who knows to what degree EFT can be used for the actual manifesting? I would guess that the potential here is very high.
What is the mechanism behind EFT manifesting when it does occur? An explanation that can apply at least to some of the cases noted (but not usually to surrogate tapping and the like) is that doing EFT for a personal goal has focused the person's attention on the goal that they want so sharply that they now become acutely aware of anything that comes into their life that may help them realize that goal –– and as a result have many more opportunities to get what they want.
Another explanation is based on a concept that has been researched and written about by a number of scientists familiar with quantum physics and field theory, among them William Tiller, a major engineering physicist and researcher (see "William Tiller" on the EFT site). Tiller theorizes that our intentions are an active creative force in the external as well as internal universe and thus can bring about striking changes in outside circumstances.
Whichever explanation you prefer, or perhaps another, the phenomenon is factually documented and can be used to excellent advantage when you are doing EFT –– provided of course that you look seriously within to be sure that there is no "little voice" in the back of your mind expressing a reservation about having it. If there is though -- don't worry; just use your objections as the objects of your next EFT tapping session!
Pat Carrington


text:
800 Brookmeade Ct
-- Beds, 2 Baths, 1,286 sqft
800 Brookmeade Ct is a single family residence located in Salisbury, MD 21804. Built in 1990, this property features 2 bathrooms, 0.53 acres lot, and 1,286 sq ft of living space. The estimated market value for 800 Brookmeade Ct is $184,000.
For the surrounding community of Salisbury, MD 21804, the average sale price for similar homes to 800 Brookmeade Ct is $109,355. The nearby schools are average and include Beaver Run School, East Salisbury Elementary and Wicomico High. The overall crime risk for this area is slightly high with 2 criminal and sex offenders residing within 1 mile. The natural disaster risk for this area includes very low earthquake risk, low tornado risk, and minimal flood risk.
Property Details: 800 Brookmeade Ct
Parcel Number: 05103142
County: Wicomico
Subdivision: KING WILLIAMS COURT SEC 01
Zoning: R20
Heating Type: HEAT PUMP
Cooling Type: YES
ALUMINUM Garage
Composition Shingle Roof
Architecture: CONVENTIONAL
8/8/2003 Sold $101,000 $79 Public Records
2017 $1,401 (+1.09%) $0 $0 $127,533
2016 $1,411 (+1.11%) $29,700 $97,400 $127,100
2012 $1,208 $0 $0 $133,800
609 Sherwood Cir, Salisbury, MD 21804
804 Brookmeade Ct, Salisbury, MD 21804
801 Lyndhurst Ln, Salisbury, MD 21804
2 loans found for this home view hide sample
The average sales price of homes similar to 800 Brookmeade Ct is $109,355 ($83/sq.ft.)
6799 Coleman Ave $170,000 06/18/2019 $128 1,326 sq.ft. -- Bed, 1 Bath 1.1 mi away
30526 Bennett Rd $58,000 06/18/2019 $48 1,199 sq.ft. -- Bed, 1 Bath 0.9 mi away
123 Carolyn Ave $74,025 06/17/2019 $56 1,318 sq.ft. -- Bed, 1 Bath 1.7 mi away
30393 Zion Rd $99,900 06/13/2019 $71 1,404 sq.ft. -- Bed, 2 Bath 0.9 mi away
2001 Whispering Ponds Ct # 20011 $106,000 06/07/2019 $75 1,419 sq.ft. -- Bed, 2 Bath 1.2 mi away
507 Woodcrest Ave $65,000 06/06/2019 $47 1,378 sq.ft. -- Bed, 1 Bath 0.7 mi away
516 Stockbridge Ct $134,000 06/04/2019 $105 1,274 sq.ft. -- Bed, 2 Bath 1.3 mi away
1014 Meadow View Dr $130,000 05/29/2019 $102 1,280 sq.ft. -- Bed, 2 Bath 1.2 mi away
318 Brookdale Dr $76,500 05/09/2019 $60 1,276 sq.ft. -- Bed, 2 Bath 1.4 mi away
608 Bowman Dr $176,000 05/07/2019 $141 1,248 sq.ft. -- Bed, 2 Bath 0.2 mi away
1014 Limestone Ct
4696 Straw Ridge Ln
233 Mildale Dr
101 Hall Dr
229 Canal Park Dr
800 Brookmeade Ct, Salisbury, MD 21804 is a Single Family Residence located in Wicomico County, Maryland. 800 Brookmeade Ct was built in 1990 and sits on a 23,003 square foot lot
During the month of 05/2019, a total of 3 properties had foreclosure filings in the 21804 zip code surrounding 800 Brookmeade Ct, with one in every 5,640 housing units receiving a foreclosure filing. In Wicomico County, where 800 Brookmeade Ct, Salisbury, MD 21804 is located, there were 16 properties with foreclosure filings documented during the month of 05/2019, a foreclosure rate of one in every 2,634 housing units. In Maryland, one in every 1,127 housing units had a foreclosure filing in 05/2019, while one in every 2,411 housing units had a foreclosure filing nationwide.
During the month of 05/2019 in the 21804 zip code surrounding this home at 800 Brookmeade Ct.