text:
package org.multibit.file;

import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Collection;
import java.util.Iterator;

import junit.framework.TestCase;

import org.junit.Before;
import org.junit.Test;
import org.multibit.Constants;
import org.multibit.Localiser;
import org.multibit.controller.MultiBitController;
import org.multibit.model.MultiBitModel;
import org.multibit.model.PerWalletModelData;
import org.multibit.model.WalletInfo;
import org.multibit.store.MultiBitWalletVersion;
import org.multibit.store.WalletVersionException;

import com.google.bitcoin.core.ECKey;
import com.google.bitcoin.core.NetworkParameters;
import com.google.bitcoin.core.Utils;
import com.google.bitcoin.core.Wallet;
import com.google.bitcoin.crypto.KeyCrypter;
import com.google.bitcoin.crypto.KeyCrypterScrypt;
import com.google.protobuf.ByteString;

import org.bitcoinj.wallet.Protos;
import org.bitcoinj.wallet.Protos.ScryptParameters;
import org.bitcoinj.wallet.Protos.Wallet.EncryptionType;

public class FileHandlerTest extends TestCase {
    private final String WALLET_TESTDATA_DIRECTORY = "wallets";

    private final String WALLET_PROTOBUF1 = "protobuf1.wallet";

    private static final String WALLET_FUTURE = "future.wallet";

    private final String WALLET_SERIALISED1 = "serialised1.wallet";

    private final String WALLET_SERIALISED2 = "serialised2.wallet";

    private final String TEST_CREATE_SERIALISED_PREFIX = "testCreateSerialised";

    private final String TEST_CREATE_UNENCRYPTED_PROTOBUF_PREFIX = "testCreateUnencryptedProtobuf";

    private final String TEST_CREATE_ENCRYPTED_PROTOBUF_PREFIX = "testCreateEncryptedProtobuf";

    private static final String TEST_CREATE_PROTOBUF_PREFIX = "testCreateProtobuf";

    private static final String TEST_WALLET_VERSION_PREFIX = "testCannotFutureWalletVersions";

    private static final String TEST_WALLET_VERSION_2_PREFIX = "testWalletVersion";

    private static final String TEST_SCRYPT_PARAMETERS = "testScryptParameters";

    private final CharSequence WALLET_PASSWORD = "horatio nelson 123";

    private SecureRandom secureRandom;

    private MultiBitController controller;
    private FileHandler fileHandler;

    private KeyCrypter keyCrypter;

    @Before
    @Override
    public void setUp() throws Exception {
        secureRandom = new SecureRandom();

        byte[] salt = new byte[KeyCrypterScrypt.SALT_LENGTH];
        secureRandom.nextBytes(salt);
        Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt(ByteString.copyFrom(salt));
        ScryptParameters scryptParameters = scryptParametersBuilder.build();
        keyCrypter = new KeyCrypterScrypt(scryptParameters);

        controller = new MultiBitController();
        Localiser localiser = new Localiser();
        MultiBitModel model = new MultiBitModel(controller);
        controller.setLocaliser(localiser);
        controller.setModel(model);
        fileHandler = new FileHandler(controller);
    }

//    @Test
//    public void testLoadSerialised1() throws IOException {
//        File directory = new File(".");
//        String currentPath = directory.getAbsolutePath();
//
//        String walletName = currentPath + File.separator + Constants.TESTDATA_DIRECTORY + File.separator
//                + WALLET_TESTDATA_DIRECTORY + File.separator + WALLET_SERIALISED1;
//
//        File walletFile = new File(walletName);
//        walletFile.createNewFile();
//
//        assertTrue(walletFile.exists());
//        PerWalletModelData perWalletModelData = fileHandler.loadFromFile(walletFile);
//
//        assertNotNull(perWalletModelData);
//
//        // Check wallet type.
//        assertTrue("Wallet type is WalletType.ENCRYPTED but it should not be", perWalletModelData.getWallet().getEncryptionType() == EncryptionType.UNENCRYPTED);
//    }

//    @Test
//    public void testLoadSerialised2() throws IOException {
//        File directory = new File(".");
//        String currentPath = directory.getAbsolutePath();
//
//        String walletName = currentPath + File.separator + Constants.TESTDATA_DIRECTORY + File.separator
//                + WALLET_TESTDATA_DIRECTORY + File.separator + WALLET_SERIALISED2;
//
//        File walletFile = new File(walletName);
//
//        walletFile.createNewFile();
//
//        assertTrue(walletFile.exists());
//        PerWalletModelData perWalletModelData = fileHandler.loadFromFile(walletFile);
//
//        assertNotNull(perWalletModelData);
//
//        // Check wallet type.
//        assertTrue("Wallet type is WalletType.ENCRYPTED but it should not be", perWalletModelData.getWallet().getEncryptionType() == EncryptionType.UNENCRYPTED);
//    }

//    @Test
//    public void testCreateSerialisedWallet() throws IOException {
//        File temporaryWallet = File.createTempFile(TEST_CREATE_SERIALISED_PREFIX, ".wallet");
//        temporaryWallet.deleteOnExit();
//
//        String newWalletFilename = temporaryWallet.getAbsolutePath();
//
//        // Create a new serialised wallet.
//        Wallet newWallet = new Wallet(NetworkParameters.prodNet());
//        ECKey newKey = new ECKey();
//        newWallet.keychain.add(newKey);
//        newKey = new ECKey();
//        newWallet.keychain.add(newKey);
//        PerWalletModelData perWalletModelData = new PerWalletModelData();
//        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.SERIALIZED);
//
//        perWalletModelData.setWalletInfo(walletInfo);
//
//        perWalletModelData.setWallet(newWallet);
//        perWalletModelData.setWalletFilename(newWalletFilename);
//        perWalletModelData.setWalletDescription(TEST_CREATE_SERIALISED_PREFIX);
//        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);
//
//        // Check the wallet and wallet info file exists.
//        File newWalletFile = new File(newWalletFilename);
//        assertTrue(newWalletFile.exists());
//
//        String walletInfoFileAsString = WalletInfo.createWalletInfoFilename(newWalletFilename);
//
//        File walletInfoFile = new File(walletInfoFileAsString);
//        assertTrue(walletInfoFile.exists());
//
//        // Check wallet can be loaded and is still serialised.
//        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(newWalletFile);
//        assertNotNull(perWalletModelDataReborn);
//        assertEquals(BigInteger.ZERO, perWalletModelDataReborn.getWallet().getBalance());
//        assertEquals(TEST_CREATE_SERIALISED_PREFIX, perWalletModelDataReborn.getWalletDescription());
//        assertEquals(2, perWalletModelDataReborn.getWallet().keychain.size());
//
//        assertEquals(MultiBitWalletVersion.SERIALIZED, perWalletModelDataReborn.getWalletInfo().getWalletVersion());
//
//        deleteWalletAndCheckDeleted(perWalletModelDataReborn, newWalletFile, walletInfoFile);
//    }

    @Test
    public void testCreateProtobufUnencryptedWallet() throws IOException {
        File temporaryWallet = File.createTempFile(TEST_CREATE_UNENCRYPTED_PROTOBUF_PREFIX, ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        // Create a new unencrypted (vanilla) protobuf wallet.
        Wallet newWallet = new Wallet(NetworkParameters.prodNet());
        ECKey newKey = new ECKey();
        newWallet.keychain.add(newKey);
        newKey = new ECKey();
        newWallet.keychain.add(newKey);
        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.PROTOBUF_ENCRYPTED);

        perWalletModelData.setWalletInfo(walletInfo);
        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_CREATE_UNENCRYPTED_PROTOBUF_PREFIX);

        // Check the wallet status before it is written out and reborn.
        assertEquals(MultiBitWalletVersion.PROTOBUF_ENCRYPTED, perWalletModelData.getWalletInfo().getWalletVersion());
        assertTrue("Wallet is not UNENCRYPTED when it should be", perWalletModelData.getWallet().getEncryptionType() == EncryptionType.UNENCRYPTED);

        // Save the wallet and then read it back in.
        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);

        // Check the wallet and wallet info file exists.
        File newWalletFile = new File(newWalletFilename);
        assertTrue(newWalletFile.exists());

        String walletInfoFileAsString = WalletInfo.createWalletInfoFilename(newWalletFilename);

        File walletInfoFile = new File(walletInfoFileAsString);
        assertTrue(walletInfoFile.exists());

        // Check wallet can be loaded and is still protobuf and unencrypted.
        // Note - when reborn it is reborn as an EncryptableWallet.
        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(newWalletFile);
        assertNotNull(perWalletModelDataReborn);
        assertEquals(BigInteger.ZERO, perWalletModelDataReborn.getWallet().getBalance());
        assertEquals(TEST_CREATE_UNENCRYPTED_PROTOBUF_PREFIX, perWalletModelDataReborn.getWalletDescription());
        assertEquals(2, perWalletModelDataReborn.getWallet().keychain.size());

        assertEquals(MultiBitWalletVersion.PROTOBUF_ENCRYPTED, perWalletModelDataReborn.getWalletInfo().getWalletVersion());
        assertTrue("Wallet is not UNENCRYPTED when it should be", perWalletModelDataReborn.getWallet().getEncryptionType() == EncryptionType.UNENCRYPTED);

        deleteWalletAndCheckDeleted(perWalletModelDataReborn, newWalletFile, walletInfoFile);
    }

    @Test
    public void testCreateProtobufEncryptedWallet() throws Exception {
        // Create an encrypted wallet.
        File temporaryWallet = File.createTempFile(TEST_CREATE_ENCRYPTED_PROTOBUF_PREFIX, ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        KeyCrypterScrypt initialKeyCrypter = new KeyCrypterScrypt();
        System.out.println("InitialKeyCrypter = " + initialKeyCrypter);
        Wallet newWallet = new Wallet(NetworkParameters.prodNet(), initialKeyCrypter);

        ECKey newKey = new ECKey();

        // Copy the private key bytes for checking later.
        byte[] originalPrivateKeyBytes1 = new byte[32];
        System.arraycopy(newKey.getPrivKeyBytes(), 0, originalPrivateKeyBytes1, 0, 32);
        System.out.println("EncryptableECKeyTest - Original private key 1 = " + Utils.bytesToHexString(originalPrivateKeyBytes1));

        newKey = newKey.encrypt(newWallet.getKeyCrypter(), newWallet.getKeyCrypter().deriveKey(WALLET_PASSWORD));
        newWallet.addKey(newKey);

        newKey = new ECKey();

        byte[] originalPrivateKeyBytes2 = new byte[32];
        System.arraycopy(newKey.getPrivKeyBytes(), 0, originalPrivateKeyBytes2, 0, 32);
        System.out.println("EncryptableECKeyTest - Original private key 2 = " + Utils.bytesToHexString(originalPrivateKeyBytes2));

        newKey = newKey.encrypt(newWallet.getKeyCrypter(), newWallet.getKeyCrypter().deriveKey(WALLET_PASSWORD));
        newWallet.addKey(newKey);

        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.PROTOBUF_ENCRYPTED);

        perWalletModelData.setWalletInfo(walletInfo);
        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_CREATE_ENCRYPTED_PROTOBUF_PREFIX);

        // Check the wallet status before it is written out and reborn.
        assertEquals(MultiBitWalletVersion.PROTOBUF_ENCRYPTED, perWalletModelData.getWalletInfo().getWalletVersion());
        assertTrue("Wallet is not ENCRYPTED when it should be", perWalletModelData.getWallet().getEncryptionType() == EncryptionType.ENCRYPTED_SCRYPT_AES);

        // Get the keys of the wallet and check that all the keys are encrypted.
        Collection<ECKey> keys = newWallet.getKeychain();
        for (ECKey key : keys) {
            assertTrue("Key is not encrypted when it should be", key.isEncrypted());
        }

        // Save the wallet and read it back in again.
        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);

        // Check the wallet and wallet info file exists.
        File newWalletFile = new File(newWalletFilename);
        assertTrue(newWalletFile.exists());

        String walletInfoFileAsString = WalletInfo.createWalletInfoFilename(newWalletFilename);

        File walletInfoFile = new File(walletInfoFileAsString);
        assertTrue(walletInfoFile.exists());

        // Check wallet can be loaded and is still protobuf and encrypted.
        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(newWalletFile);
        assertNotNull(perWalletModelDataReborn);
        assertEquals(BigInteger.ZERO, perWalletModelDataReborn.getWallet().getBalance());
        assertEquals(TEST_CREATE_ENCRYPTED_PROTOBUF_PREFIX, perWalletModelDataReborn.getWalletDescription());
        assertEquals(2, perWalletModelDataReborn.getWallet().keychain.size());

        assertEquals(MultiBitWalletVersion.PROTOBUF_ENCRYPTED, perWalletModelDataReborn.getWalletInfo().getWalletVersion());
        assertTrue("Wallet is not of type ENCRYPTED when it should be", perWalletModelDataReborn.getWallet().getEncryptionType() == EncryptionType.ENCRYPTED_SCRYPT_AES);

        // Get the keys out the reborn wallet and check that all the keys are encrypted.
        Collection<ECKey> rebornEncryptedKeys = perWalletModelDataReborn.getWallet().getKeychain();
        for (ECKey key : rebornEncryptedKeys) {
            assertTrue("Key is not encrypted when it should be", key.isEncrypted());
        }

        System.out.println("Reborn KeyCrypter = " + perWalletModelDataReborn.getWallet().getKeyCrypter());

        // Decrypt the reborn wallet.
        perWalletModelDataReborn.getWallet().decrypt(perWalletModelDataReborn.getWallet().getKeyCrypter().deriveKey(WALLET_PASSWORD));

        // Get the keys out the reborn wallet and check that all the keys match.
        Collection<ECKey> rebornKeys = perWalletModelDataReborn.getWallet().getKeychain();

        assertEquals("Wrong number of keys in reborn wallet", 2, rebornKeys.size());

        Iterator<ECKey> iterator = rebornKeys.iterator();
        ECKey firstRebornKey = iterator.next();
        assertTrue("firstRebornKey should now de decrypted but is not", !firstRebornKey.isEncrypted());
        // The reborn unencrypted private key bytes should match the original private key.
        byte[] firstRebornPrivateKeyBytes = firstRebornKey.getPrivKeyBytes();
        System.out.println("FileHandlerTest - Reborn decrypted first private key = " + Utils.bytesToHexString(firstRebornPrivateKeyBytes));

        for (int i = 0; i < firstRebornPrivateKeyBytes.length; i++) {
            assertEquals("Byte " + i + " of the reborn first private key did not match the original", originalPrivateKeyBytes1[i], firstRebornPrivateKeyBytes[i]);
        }

        ECKey secondRebornKey = iterator.next();
        assertTrue("secondRebornKey should now de decrypted but is not", !secondRebornKey.isEncrypted());
        // The reborn unencrypted private key bytes should match the original private key.
        byte[] secondRebornPrivateKeyBytes = secondRebornKey.getPrivKeyBytes();
        System.out.println("FileHandlerTest - Reborn decrypted second private key = " + Utils.bytesToHexString(secondRebornPrivateKeyBytes));

        for (int i = 0; i < secondRebornPrivateKeyBytes.length; i++) {
            assertEquals("Byte " + i + " of the reborn second private key did not match the original", originalPrivateKeyBytes2[i], secondRebornPrivateKeyBytes[i]);
        }

        deleteWalletAndCheckDeleted(perWalletModelDataReborn, newWalletFile, walletInfoFile);
    }

    @Test
    public void testDefaultScryptParameters() throws Exception {
        // Create an encrypted wallet with default scrypt parameters.
        File temporaryWallet = File.createTempFile(TEST_SCRYPT_PARAMETERS + "1", ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        KeyCrypter testKeyCrypter = new KeyCrypterScrypt();

        Wallet newWallet = new Wallet(NetworkParameters.prodNet(), testKeyCrypter);
        ECKey newKey = new ECKey();
        newKey = newKey.encrypt(newWallet.getKeyCrypter(), newWallet.getKeyCrypter().deriveKey(WALLET_PASSWORD));
        newWallet.addKey(newKey);

        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.PROTOBUF_ENCRYPTED);

        perWalletModelData.setWalletInfo(walletInfo);
        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_SCRYPT_PARAMETERS);

        // Save the wallet and read it back in again.
        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);

        // Check the wallet and wallet info file exists.
        File newWalletFile = new File(newWalletFilename);
        String walletInfoFileAsString = WalletInfo.createWalletInfoFilename(newWalletFilename);
        File walletInfoFile = new File(walletInfoFileAsString);

        // Load the wallet and check the default scrypt parameters
        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(newWalletFile);
        assertNotNull(perWalletModelDataReborn);

        KeyCrypter rebornEncrypterDecrypter = perWalletModelDataReborn.getWallet().getKeyCrypter();
        assertNotNull("There was no encrypterDecrypter after round trip", rebornEncrypterDecrypter);

        assertTrue("EncrypterDecrypter was not an EncrypterDecrypterScrypt", rebornEncrypterDecrypter instanceof KeyCrypterScrypt);

        KeyCrypterScrypt rebornEncrypterDecrypterScrypt = (KeyCrypterScrypt)rebornEncrypterDecrypter;
        assertEquals("Wrong N parameter", 16384, rebornEncrypterDecrypterScrypt.getScryptParameters().getN());
        assertEquals("Wrong R parameter", 8, rebornEncrypterDecrypterScrypt.getScryptParameters().getR());
        assertEquals("Wrong P parameter", 1, rebornEncrypterDecrypterScrypt.getScryptParameters().getP());

        deleteWalletAndCheckDeleted(perWalletModelDataReborn, newWalletFile, walletInfoFile);
    }

    @Test
    public void testNonDefaultScryptParameters() throws Exception {
        // Non default scrypt parameters.
        int n = 32768;
        int r = 8;
        int p = 3;

        byte[] salt = new byte[KeyCrypterScrypt.SALT_LENGTH];
        secureRandom.nextBytes(salt);
        Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder()
        .setSalt(ByteString.copyFrom(salt)).setN(n).setR(r).setP(p);
        ScryptParameters scryptParameters = scryptParametersBuilder.build();

        KeyCrypter testKeyCrypter = new KeyCrypterScrypt(scryptParameters);

        // Create an encrypted wallet with nondefault scrypt parameters.
        File temporaryWallet = File.createTempFile(TEST_SCRYPT_PARAMETERS + "2", ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        Wallet newWallet = new Wallet(NetworkParameters.prodNet(), testKeyCrypter);
        ECKey newKey = new ECKey();
        newKey = newKey.encrypt(newWallet.getKeyCrypter(), newWallet.getKeyCrypter().deriveKey(WALLET_PASSWORD));
        newWallet.addKey(newKey);

        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.PROTOBUF_ENCRYPTED);

        perWalletModelData.setWalletInfo(walletInfo);
        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_SCRYPT_PARAMETERS + "2");

        // Save the wallet and read it back in again.
        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);

        // Check the wallet and wallet info file exists.
        File newWalletFile = new File(newWalletFilename);
        String walletInfoFileAsString = WalletInfo.createWalletInfoFilename(newWalletFilename);
        File walletInfoFile = new File(walletInfoFileAsString);

        // Load the wallet and check the default scrypt parameters
        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(newWalletFile);
        assertNotNull(perWalletModelDataReborn);

        KeyCrypter rebornKeyCrypter = perWalletModelDataReborn.getWallet().getKeyCrypter();
        assertNotNull("There was no keyCrypter after round trip", rebornKeyCrypter);

        assertTrue("EncrypterDecrypter was not an KeyCrypterScrypt", rebornKeyCrypter instanceof KeyCrypterScrypt);

        KeyCrypterScrypt rebornKeyCrypterScrypt = (KeyCrypterScrypt)rebornKeyCrypter;
        assertEquals("Wrong N parameter", n, rebornKeyCrypterScrypt.getScryptParameters().getN());
        assertEquals("Wrong R parameter", r, rebornKeyCrypterScrypt.getScryptParameters().getR());
        assertEquals("Wrong P parameter", p, rebornKeyCrypterScrypt.getScryptParameters().getP());

        deleteWalletAndCheckDeleted(perWalletModelDataReborn, newWalletFile, walletInfoFile);
    }

    private void deleteWalletAndCheckDeleted(PerWalletModelData perWalletModelData, File walletFile, File walletInfoFile) {
        // Delete wallet and check it is deleted.
        fileHandler.deleteWalletAndWalletInfo(perWalletModelData);
        assertTrue(!walletFile.exists());
        assertTrue(!walletInfoFile.exists());
    }

    public void testIsSerialisdWallet() throws Exception {
        MultiBitController controller = new MultiBitController();
        Localiser localiser = new Localiser();
        MultiBitModel model = new MultiBitModel(controller);

        controller.setLocaliser(localiser);
        controller.setModel(model);

        File directory = new File(".");
        String currentPath = directory.getAbsolutePath();

        String serialisedWalletName = currentPath + File.separator + Constants.TESTDATA_DIRECTORY + File.separator
        + WALLET_TESTDATA_DIRECTORY + File.separator + WALLET_SERIALISED1;

        File serialisedWalletFile = new File(serialisedWalletName);;

        FileHandler fileHandler = new FileHandler(controller);
        assertTrue(fileHandler.isWalletSerialised(serialisedWalletFile));

        String protobufWalletName = currentPath + File.separator + Constants.TESTDATA_DIRECTORY + File.separator
        + WALLET_TESTDATA_DIRECTORY + File.separator + WALLET_PROTOBUF1;

        File protobufWalletFile = new File(protobufWalletName);;
        assertTrue(!fileHandler.isWalletSerialised(protobufWalletFile));
    }

    @Test
    public void testCannotLoadOrSaveFutureWalletVersions() throws IOException {
        MultiBitController controller = new MultiBitController();
        @SuppressWarnings("unused")
        MultiBitModel model = new MultiBitModel(controller);
        FileHandler fileHandler = new FileHandler(controller);

        File temporaryWallet = File.createTempFile(TEST_WALLET_VERSION_PREFIX, ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        // Create a new protobuf wallet with a future wallet version
        Wallet newWallet = new Wallet(NetworkParameters.prodNet());
        ECKey newKey = new ECKey();
        newWallet.keychain.add(newKey);
        newKey = new ECKey();
        newWallet.keychain.add(newKey);
        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.FUTURE);

        perWalletModelData.setWalletInfo(walletInfo);

        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_CREATE_PROTOBUF_PREFIX);

        // Should not be able to save a wallet version from the future.
        try {
            controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);
            fail("Could save a wallet version from the future but should not be able to");
        } catch (WalletVersionException wve) {
            // Expected result.
        }

        // Check a wallet from the future cannot be loaded.
        File directory = new File(".");
        String currentPath = directory.getAbsolutePath();

        String futureWalletName = currentPath + File.separator + Constants.TESTDATA_DIRECTORY + File.separator
                + WALLET_TESTDATA_DIRECTORY + File.separator + WALLET_FUTURE;

        try {
            File futureWalletFile = new File(futureWalletName);
            fileHandler.loadFromFile(futureWalletFile);
            fail("Could load a wallet version from the future but should not be able to");
        } catch (WalletVersionException wve) {
            // Expected result.
        }
    }

    @Test
    public void testWalletVersion2() throws IOException {
        MultiBitController controller = new MultiBitController();
        @SuppressWarnings("unused")
        MultiBitModel model = new MultiBitModel(controller);
        FileHandler fileHandler = new FileHandler(controller);

        File temporaryWallet = File.createTempFile(TEST_WALLET_VERSION_2_PREFIX, ".wallet");
        temporaryWallet.deleteOnExit();

        String newWalletFilename = temporaryWallet.getAbsolutePath();

        // Create a new protobuf wallet.
        Wallet newWallet = new Wallet(NetworkParameters.prodNet());
        ECKey newKey = new ECKey();
        newWallet.keychain.add(newKey);
        newKey = new ECKey();
        newWallet.keychain.add(newKey);
        PerWalletModelData perWalletModelData = new PerWalletModelData();
        WalletInfo walletInfo = new WalletInfo(newWalletFilename, MultiBitWalletVersion.PROTOBUF_ENCRYPTED);

        perWalletModelData.setWalletInfo(walletInfo);

        perWalletModelData.setWallet(newWallet);
        perWalletModelData.setWalletFilename(newWalletFilename);
        perWalletModelData.setWalletDescription(TEST_WALLET_VERSION_2_PREFIX);

        // Save the wallet
        controller.getFileHandler().savePerWalletModelData(perWalletModelData, true);

        // Check the version gets round tripped.
        PerWalletModelData perWalletModelDataReborn = fileHandler.loadFromFile(new File(newWalletFilename));
        assertNotNull(perWalletModelDataReborn);

        WalletInfo rebornWalletInfo = perWalletModelDataReborn.getWalletInfo();
        assertEquals("Wallet version was not roundtripped", MultiBitWalletVersion.PROTOBUF_ENCRYPTED, rebornWalletInfo.getWalletVersion());;
    }
}


text:
Site access provided by:
Sign in to an additional subscriber account
This account has no valid subscription for this site.
1. History.
2. Legal and ethical consideration.
3. Antiques.
4. Nazi-looted art.
5. Colonialism.
6. Practice.
Subscriber: null; date: 17 January 2020
Noémie Goldman
and Kim Oosterlinck
https://doi.org/10.1093/gao/9781884446054.article.T2277663
The history of plundering and art imperialism may be traced back to ancient times. Looting has been documented in many instances from the sack by the Romans of the Etruscan city of Veii in 396 BC to the Crusades and Napoleon's Italian campaign in late 18th century. In 1907, as part of the agreements obtained in the Second Hague conference, pillage and the confiscation of private property in occupied territories were condemned by international law (Hague Convention art. 46 and 47). Therefore, in contrast to Napoleon's looting, the Nazi despoliation of cultural objects was illegal. As a result, the politics of art plunder by the Third Reich represented a milestone because of its large scale and systemic organization but also because it breached international law.
The first restitution campaign started in 1943, when 18 states signed the Inter-Allied Declaration against Acts of Dispossession committed by the Germans in the occupied territories. Their objective was to recover after the war the artworks looted or acquired through illicit purchases. A second campaign of restitution was initiated following the fall of the Iron Curtain. This new effort culminated with the organization in 1998 of the Washington Conference on Nazi-confiscated art. The 44 countries that participated in the Conference committed themselves to a set of guidelines for dealing with art acquired by the Nazis. Many of these governments organized research panels to study the provenance of national collections and they also made available State archives. The principles agreed upon in Washington were followed in 1999 by the Council of Europe Resolution 1205 on the restitution of looted cultural property in Europe, and by the Terezin Declaration of 2009. The accumulation of intelligence gathered increased the number of restitutions, and since the beginning of the 21st century the trend has accelerated.
The discovery in 2014 of a collection of a thousand Nazi-looted artworks in the Munich apartment of Cornelius Gurlitt, the son of a Nazi-era art dealer, magnified public interest on the restitution issue and opened a new era.
The first legal definition of restitution occurred in the framework of the 1954 Hague Convention. For the first time, restitution was defined in public international law in the context of armed conflicts. After World War II, countries in western Europe established various decrees, for instance the 'Raubgutbeschluss' in Switzerland, to suspend normal national laws in order to promote restitution. These modifications of the national legal framework were not open ended, especially since victims had limited amounts of time to make their claims. These limits, combined with the fact that most of the victims were deceased or in exile, explain why more than 70 years after the war many claims were still pending. In 1996 victims used the American judicial system to bring to justice Swiss banks and recover Nazi-looted gold. Since then, numerous victims have relied on American laws to claim artworks and other reparation payments.
Restitution is difficult to achieve through judicial procedure because of two basic principles existing in most legal systems: the non-retroactivity of law and the existence of statutes of limitations. As a result, alternative routes are often taken: diplomatic agreements, financial settlement, or the sale of the object followed by a division of the proceeds amongst the parties. Ownership disputes are rendered even more complex depending on whether purchasers acted in bad or good faith. Restitution claims usually distinguish between the two, even though proof of good or bad faith is hard to establish. A good example occurred in France, when in 1989 a New York–based art dealer bought a portrait by Frans Hals. A few years later, the heirs of the famous French collector Adolphe Schloss (1842–1910) claimed and established that the painting had been looted during the war. The dealer was summoned to return the painting to the heirs, and was condemned to eight months in prison for being a purchaser in bad faith. The court decided that as an art professional, and a renowned specialist, the dealer was negligent because of the failure to check the provenance of the work. The increase in claims regarding looted art has had an impact on insurance and art loans, and thus on cultural exchange. Many art professionals defend the idea that restitution problems should not be the dependant of the judiciary system, and should not be regarded as a legal issue but as an ethical one. The ownership of artworks raises complex questions. Indeed, while cultural objects can be seen as private propriety, they may also be perceived as belonging to the general heritage of the humanity. This explains why organizations such as UNESCO contribute actively to restitution debates and prefer to position the discussion outside the judicial courts. Even if countries and museums have signed international conventions, like the Washington protocol in 1994, no control mechanism has ever been established. Governments and institutions are only morally bound to return property to their rightful owners.
The Elgin Marbles is the most famous example of problems in restitution of antique works. This case raises the question of the protection of national cultural heritage and the restitution or repatriation of antiques taken from their country of origin during periods of colonization or war. In the 19th century Lord Elgin, a British ambassador, brought back to England marble sculptures and architectural fragments from the Parthenon of Athens, with the authorization of the local authorities. After being sold by Lord Elgin to the British Parliament, the marbles became property of the British Museum in London. Since 1924 Greece has made several attempts to recover the fragments. In the 21st century Greece succeeded in repatriating parts of the Acropolis from Germany, Italy, and the Vatican, but failed to recover the objects held by the British Museum. Since the objects were removed from the country legally and legally purchased by the museum, the Greek government has in effect no legal power to enforce restitution. Directors from the British Museum argue that the Parthenon marbles are part of the universal cultural heritage and that conservation of the objects for future generations ought to be the priority.
Other examples illustrate that if the provenance of antiques is illicit, restitution is easier to achieve. This was the case of the Euphronios Krater, a red-figure Greek vase dating from the 6th century BC, bought in 1972 by the Metropolitan Museum of Art, New York. Research on the vase's provenance undertaken by Italy demonstrated that the object was stolen from an archaeological site and subsequently smuggled to the USA. In 2006 the Metropolitan Museum and the Italian government reached an agreement: the vase and other antiques were repatriated to Italy in exchange for long-term loans from Italy to the Museum. Chinese antiques, especially the objects looted at the Old Summer Palace, Beijing, by Anglo-French armies during the Second Opium War, have become the focus of a very popular and patriotic campaign encouraged by the Chinese government. In the 21st century these cultural objects have mainly been repurchased by the China Cultural Relics Recovery Fund, the Poly Art Museums, and Chinese private collectors. In 2009 the battle in a French Court to prevent the sale of Imperial bronzes during the highly publicized Pierre Bergé/Yves Saint Laurent Christie's sale exposed the problems of Chinese antiques restitution to the Western public.
During the Third Reich the looting of art became a highly organized phenomenon. The operation was mostly managed by a Nazi official and ideologue Alfred Rosenberg, who was in charge of a 'Special Task force' (Einsatzstab Reichsleiter Rosenberg). In Germany and in occupied countries, art dealers also contributed to the pillaging during the war. The interest Nazi leaders had for the art world helps to explain the large scale of the looting operations. The Nazi dignitaries constructed a cultural propaganda that condemned 'degenerate art' ( Entartete Kunst ), and confiscated masterpieces all throughout Europe for their personal benefits. When the artworks were not brought directly to these collections, the Germans stored them in various places in Germany, France, and Austria. The most famous ones were the Musée du Jeu de Paume in Paris, and the salt mine of Altaussee in Austria. After the end of the war, when the Allies discovered these secret storages, they centralized the looted objects at different collecting points. A special American intelligence unit dealing with looted art was created to research artworks and identify the protagonists responsible for the plundering. The identified artworks were transferred from the collecting points to the countries they had been looted from. Each country dealt with the recovered artworks in different ways, depending on its own political, social, and economic context. During the first phase of restitution, directly after the war, different elements slowed down the process: private property was forbidden in countries under communist law, and in western Europe most of the former owners were not alive any more or had left the continent. The second movement for restitution came after the collapse of the Communist regimes in the countries of eastern Europe. At the same time, the World Jewish Restitution Organization was established to pursue and intensify the restitution of Jewish property around the world. Important collections were partially recovered. This was the case for collections belonging to famous collectors and art dealers, such as the French art dealer Paul Rosenberg, the Dutch collector Jacques Goudstikker, and the French collector Alphonse Kahn. Since the 1990s there have been several very long-running Nazi-looted art cases. A famous example is the 'Portrait of Wally case': in 1997 the painting Portrait of Wally by Egon Schiele was loaned by Dr Rudolf Leopold for an exhibition in New York when the American authorities seized the portrait to investigate its status as a possible Nazi-looted art. Even though Dr Leopold claimed that he did not know the illicit provenance of the work, it was proven that a Nazi art dealer had owned the portrait after the 'aryanization' of a Jewish art dealership owned by Lea Bondi Jaray. A week before the trial in 2010, the US government, the Estate of Lea Bondi Jaray, and the Leopold Museum of Vienna settled and agreed that the Leopold Foundation would pay the Jaray estate to keep the painting and permanently display signage next to the painting detailing the painting's Nazi-looted history.
States transferred a considerable number of cultural objects from their colonies. Several operations contributed to the displacement of these objects: the looting during military operations, the exportation of artefacts for scientific curiosity, or the confiscation of art collections from museums in former colonies. Since decolonization, the international community has mainly focused on ways to prevent illicit exports and transfer of cultural objects across borders. In 1970 UNESCO organized an important conference on cultural property to raise awareness in the way museums acquire property. Subsequently, in 1980, a movement emerged in Africa to demand restitution of their national cultural heritage. However, these claims were not very effective and no international framework for the regulation of cultural objects' displacement was ever reached. At the end of the 20th century, many governments recognized their colonial past and their collective guilt and started negotiating settlements with former colonies. Without any international legal tools, restitutions were mainly decided during diplomatic discussions concluded by bilateral agreements. For example, Japan agreed to the repatriation of about a thousand objects to Korea in the treaty both countries signed in 1965. Denmark and its former colonies, Iceland and Greenland, decided to declare the displaced objects as co-propriety. In some cases, diplomatic negotiations were incompatible with local legislation on restitution. In 2010 the French government agreed during negotiations with South Korea to return the Uigwe manuscripts, taken by force in 1866. The royal manuscripts were part of the collection of the Bibliothèque Nationale de France, and there was no national or international law authorizing their restitution to Korea. The return of the manuscripts was, in fact, in contradiction of the principle of the inalienability of French public collections. The restitution, the result of a political and diplomatic act, was effectively illegal. A famous example of an ownership dispute in a post-colonial context is the Benin Bronzes, looted from the Royal Palace of Edo by the British army in 1897. After the massacre of English emissaries, the British forces lead a punitive operation and confiscated thousands of objects from the Palace. Some of the objects were given to the British Museum and the remainder were sold to reimburse the state for the military costs incurred and to compensate the families of English soldiers killed during the massacre. At the time, the military operation and confiscation of objects respected international law. As of today, many bronzes remain in the British Museum. In the post-colonial era, the restitution of human remains has received considerable attention. France returned the Hottentot Venus to South Africa, England had signed the Human Tissue Act of 2004 promoting the return of human remains, and in Australia and the USA a similar type of restitution was achieved regarding the remains of the indigenous population.
Museum professionals and specialists from the art market are progressively contributing to raise the awareness about the provenance of artworks. The main auction houses, such as Sotheby's and Christie's, have created Restitution departments in which researchers verify the ownership history of the objects before putting them on sale. Museums, especially in Germany, Israel, and the USA, have developed Provenance Research Programmes to analyse the ownership history of artworks in their collection. Following the code of ethics established by the International Council of Museums (ICOM), museums have also contributed to raising awareness about restitution problems by organizing exhibitions and publishing studies on the matter. Private cultural organizations, such as auction houses or famous museums, also try to avoid damage to their reputations in case artworks associated with the institution should be publicly identified as looted. However, the majority of art dealers and cultural institutions still underestimate the importance of conducting provenance research of the objects they are selling or purchasing. Because of the failure of many governments and international authorities to globally manage restitution problems, commercial restitution firms in the private sector have emerged. This has led to many controversies, as some art restitution specialists have gained substantial amounts of money following successful restitutions. The secrecy and the commercial aspect of the field influence the manner in which research is conducted and oriented. Consequently, the research community is now defending the concept of independent provenance research that would not be bound by legal, commercial, and political pressures.
T. C. Howe: Salt Mines and Castles: The Discovery and Restitution of Looted European Art (Indianapolis, 1946)
C. Friemuth: Die geraubt Kunst: Der dramatische Wettlauf um die Rettung der Kulturschätze nach dem Zweiten Weltkrieg (Brunswick, 1989)
L. H. Nicholas: The Rape of Europa: The Fate of Europe's Treasures in the Third Reich and the Second World War (New York, 1995)
H. Feliciano: The Lost Museum: The Nazi Conspiracy to Steal the World's Greatest Works of Art (New York, 1997)
R. Fohr and G. de La Broise, eds: Pillages et restitutions: Le destin des œuvres d'art sorties de France pendant la Seconde Guerre mondiale (Paris, 1997)
R. Valland: Le Front de l'art 1939–1945 (Paris, 1997)
T. Barringer and T. Flynn, eds: Colonialism and the Object: Empire, Material Culture and the Museum (London and New York, 1998)
M. Hamon-Jugnet: Collection Schloss, œuvres spoliées pendant la Deuxième Guerre mondiale non restituées (1943–1998) (Paris, 1998)
W. Kowalski: Art Treasures and War: A Study on the Restitution of Looted Cultural Property, Pursuant to Public International Law (London, 1998)
C. Lorentz: La France et les restitutions allemandes au lendemain de la seconde guerre mondiale (1943–1954) (Paris, 1998)
T. Brückler, ed.: Kunstraub, Kunstbergung und Restitution in Österreich 1938 bis heute (Vienna, Cologne and Weimar, 1999)
Ideologie e patrimonio storico-culturale nell'età rivoluzionaria e napoleonica: A proposito del trattato di Tolentino (Rome, 2000)
N. Brodie, J. Doole, and P. Watson, eds: Stealing History: The Illicit Trade in Cultural Material (Cambridge, 2000)
H. H. Kunze: Restitution 'Entarteter Kunst': Sachenrecht und internationales Privatrecht (Berlin, 2000)
J. A. Legget: Restitution and Repatriation: Guidelines for Good Practice (London, 2000)
N. Palmer: Museums and the Holocaust (Leicester, 2000)
E. Barkan: The Guilt of Nations: Restitution and Negotiating Historical Injustices (Baltimore and London, 2001)
N. Brodie, J. Doole, and C. Renfrew, eds: Trade in Illicit Antiquities, the Destruction of the World's Archaeological Heritage (Cambridge, 2001)
C. Horel: La restitution des biens juifs et le renouveau juif en Europe centrale: Hongrie, Slovaquie, République Tchèque (Frankfurt am Main, 2002)
M. J. Bazyler: Holocaust Justice: The Battle for Restitution in America's Courts (New York and London, 2003)
C. F forde, J. Hubert, and P. Turnbull, eds: The Dead and Their Possessions: Repatriation in Principles, Policy and Practice (London and New York, 2003)
S. Lillie: Was einmal war: Handbuch der enteigneten Kunstsammlungen Wiens (Vienna, 2003)
M. Spiegler: 'The Devil and the Art Detective', Art and Auction (July 2003), pp. 98–105
G. Czubek and P. Kosiewski, eds: Displaced Cultural Assets: The Case of Western Europe and the Problems of Central and Eastern European Countries in the 20th Century (Warsaw, 2004)
M.-A. Renold and P. Gabus, eds: Claims for the Restitution of Looted Art (Zurich and Basle, 2004)
Intergovernmental Committee for Promoting the Return of Cultural Property to Its Countries of Origin or Its Restitution in Case of Illicit Appropriation, UNESCO report (Paris, 2005)
E. T. Francini: Liechtenstein und der internationale Kunstmarkt 1933–1945: Sammlungen und ihre Provenienzen im Spannungsfeld von Flucht, Raub und Restitution (Vaduz, 2005)
D. Gillman: The Idea of Cultural Heritage (Leicester, 2006)
B. T. Hoffman, ed.: Art and Cultural Heritage: Law, Policy and Practice (New York, 2006)
J. H. Merryman, ed.: Imperialism, Art and Restitution (New York, 2006)
A. F. Vrdoljak: International Law, Museums and the Return of Cultural Objects (New York, 2006)
C. Goschler, P. Ther, and C. Andrieu, eds: Spoliations et restitutions des biens juifs en Europe (Paris, 2007)
J. Greenfield: The Return of Cultural Treasures (Cambridge, 2007)
P. K. Grimsted, F. J. Hoogewoud, and E. Ketelaar, eds: Returned from Russia: Nazi Archival Plunder in Western Europe and Recent Restitution Issues (Builth Wells, 2007)
I. Bertz and M. Dorrmann, eds: Raub und Restitution: Kulturgut aus jüdischem Besitz von 1933 bis heute (Göttingen, 2008)
J. Cuno: Who Owns Antiquity? Museums and the Battle over our Ancient Heritage (Princeton and Oxford, 2008)
I. Le Masne de Chermont and L. Sigal-Klagsbald: Looking for Owners: French Policy for Provenance Research, Restitution and Custody of Art Stolen in France during World War Two (Paris, 2008)
A. Reininghaus, ed.: Recollecting: Raub und Restitution (Vienna, 2009)
B. Schönenberger: The Restitution of Cultural Assets: Causes of Action—Obstacles to Restitution—Developments (Berne, 2009)
C. Hershkovitch and D. Rykner: La restitution des œuvres d'art. Solutions et impasses (Paris, 2011)
L. La Follette, ed.: Negotiating Culture (Amherst and Boston, 2013)

redpajama_set_name: RedPajamaCommonCrawl


You will find Schindler moving walks in some of the world's busiest airports, exhibition halls, subway systems and shopping complexes. Schindler 9500® moving walks combine comfort with safe, rapid, horizontal and inclined transportation and are ideal for use wherever the elimination of long walks is desired.
The Schindler 9500 moving walk series offers a full range of optional design features for easy integration into your building including glass and opaque balustrades in a variety of finishes, innovative color options for handrails, decking, skirt panels, etc., multiple lighting and floor cover options.
Schindler 9500 moving walks require minimum pit space and are available in horizontal and inclined configurations. All renowned Schindler safety features are included, as well as a unique pallet/belt and skirt arangement which eliminates horizontal skirt gap. They can be installed on finished floors, are extremely quiet and easy to service.


The stone has landed! Perfect timing on the delivery...you obviously have a quality operation all around...your man on the road really helped our crew out with some fancy placement of the pallets between (2) trees and close to the patio dig site! The stone looks awesome, can't wait to send you the pictures...thanks again!!!


text:
@Echo OFF

REM ===============================================================
	REM ORGANISATIONS CREDENTIALS

	REM ORGx= Org name for display and selection purpose
	REM USRx= Username for connection
	REM PWDx= Password/Token ~ Avoid ! for first character in passwords
	REM URLx= The usual Prod vs. Sandbox ~ login vs. test
REM ===============================================================

REM ===============================================================
	Set ORG1=Production
	Set USR1=admin@customer.com
	Set PWD1=Password123!10G8ux1YbYloLJE9yLu2ZiePq
	Set URL1=https://login.salesforce.com

	Set ORG2=Sandbox
	Set USR2=admin@customer.com.test
	Set PWD2=Password123!1YbYc9G8uxloLJE9yLiePqu2Z
	Set URL2=https://test.salesforce.com

	Set ORG3=Dev Org
	Set USR3=me@my.playground.com
	Set PWD3=Password456!4568123bYloLJEwerty2ZiaBc
	Set URL3=https://login.salesforce.com

	Set ORG4=
	Set USR4=
	Set PWD4=
	Set URL4=

	Set ORG5=
	Set USR5=
	Set PWD5=
	Set URL5=

	Set ORG6=
	Set USR6=
	Set PWD6=
	Set URL6=
REM ===============================================================

redpajama_set_name: RedPajamaGithub


Tricia Guild's passion and commitment are in giving the opportunity to create a complete lifestyle - with fabrics, wallpapers, paint, contemporary furniture, bedlinen and accessories.
Acting as chairman, founder and creative director Guild has transformed the production of her first textile collections that started in the 70s into a very successful multi-million pound international company.
Her inspiration for design evolved from a love of nature and a passion for travel, developing contemporary interpretations of great cultural movements. Guild was one of the first to design ranges of fully co-ordinated fabrics and wall coverings with a very distinctive style.
Currently the collections stand at over 2500 fabrics and 700 wallpapers including printed floral and geometric fabrics; plains, checks and stripes, jacquards, silks, velvets, trimmings and children's collections.
As a supporter of young artists and designers, Tricia Guild contributes a major award at New Designers, the annual showcase of Graduate Designers in London. She has sat on the Crafts Council, and tutors postgraduate ceramics students at the Royal College of Art in London.
Designer Guild products are available in the UK and she has showrooms in Paris, Munich and most recently in Chicago, USA, as well as representation in 50 countries worldwide including the United States, Japan, and Australasia.
Extensive investment is made each year in new product. The studio, headed by Guild, has produced designs from such diverse inspiration as Eastern decorative art, Italian architecture and classical documents. The studio also works with outside artists and successful associations include Kaffe Fassett, Janice Tchalenko, Howard Hodgkin and Michael Heindorff.
Tricia Guild has written ten inspirational books on the subject of colour and design, from soft furnishings to flowers, gardens and city living. In 1989 Tricia Guild was awarded the Textile Institute's Gold Medal for Design Contribution. In 1994 Designers Guild was a winner of the European Community Design Prize and has won three export awards including two Queen's Awards for Export Achievement.


text:
Home > Blog > MAPFRE Insurance Featured in IMPACT Magazine
MAPFRE Insurance Featured in IMPACT Magazine
The Insurance Information Institute's latest issue of IMPACT magazine is hot off the press. The magazine captures the insurance industry's many contributions to the community. MAPFRE Insurance is featured on pages 6-7. Give it a look!
Here For Our Communities
At MAPFRE Insurance, the focus is on building lifelong relationships, one at a time. MAPFRE's business is defined by the people it serves; its policyholders, their agents and the communities where the company lives and works. Giving support and giving back is an important part of what makes MAPFRE and its employees special.
Community involvement is very important to the company, which is why it is devoted to partnering with the Pan-Mass Challenge (PMC), supporting school programs around the country by providing children essential school supplies, and the opportunity to develop important life skills at Courageous Sailing.
For the second consecutive year, MAPFRE Insurance was proud to be the Official Auto Insurance Provider of the Pan-Mass Challenge, an annual two-day 192-mile bike-a-thon that runs through 46 towns across Massachusetts. More than 6,300 cyclists rode in this year's PMC to support cancer care and research. Since 1980, the PMC has raised $547 million for the Jimmy Fund, which supports adult and pediatric patient care and cancer research at the Dana-Farber Cancer Institute (DFCI)—100 percent of every rider-raised dollar goes directly to DFCI.
"We are thrilled to have MAPFRE as the official auto insurance provider of the PMC again this year," said Billy Starr, PMC founder and executive director. In addition to supporting the PMC as a corporate sponsor, MAPFRE employees embraced the PMC's mission by riding and volunteering on PMC weekend.
The PMC—one of the largest single athletic fundraising events in the United States—is "one of the most respected and important charity events in Massachusetts and we are proud to stand with them as a partner in fighting cancer," said John Kelly, senior vice president at MAPFRE Insurance. "We believe in living our credo of 'people who take care of people' and we think this is a perfect example."
Every year, more than 4,000 people volunteer to make sure the PMC weekend is safe, comfortable and fun for all. Michael Lombardi, actuarial manager at MAPFRE Insurance, explains why he rides. "I have participated in eight of the last ten Pan-Mass Challenge rides. Watching my mother fight cancer made me feel helpless—riding in the PMC made me feel less so."
To date, MAPFRE Insurance has helped to raise more than $100,000 via its MAPFRE Insurance Rider page for PMC donations, which go directly to the Dana-Farber Cancer Institute. The company is proud to stand with the PMC as a partner in fighting cancer.
In addition to partnering with the PMC, MAPFRE Insurance strongly believes in providing children in need essential back to school supplies. MAPFRE has partnered with two companies to provide more than 1,800 children necessary back to school supplies; Worcester Community Action Council, Inc. (WCAC) and Dixon Ticonderoga.
WCAC is the federally designated anti-poverty agency for Central Massachusetts, serving the City of Worcester and 45 neighboring communities. WCAC manages a Head Start program that serves approximately 220 low-income preschoolers providing developmentally appropriate curricula, health and nutrition services, breakfast, lunch and snack, special education opportunities and family services. Each year about half of the students 'graduate' and go on to enroll in area public kindergarten programs. As a special send off and to ensure the children enter school with the tools they need to succeed, MAPFRE conducted a school supply drive which provided 220 children backpacks filled with school supplies—items which many families would not be able to a afford on their own. Thanks to employees' generous donations, preschoolers were provided with the school supplies necessary to be a successful kindergartner.
Since 1795, Dixon Ticonderoga has been a leading manufacturer of writing instruments, art supplies, and other tools used for self-expression. MAPFRE is proud to have partnered with Dixon Ticonderoga and their K-5 Classroom Essentials Backpack program. Over 1,500 backpacks were donated to schools in: New York, Pennsylvania, Florida, Ohio, Massachusetts and California.
MAPFRE looks forward to continuing its relationship with both of these organizations in the future and providing kids vital school supplies.
Another important value to MAPFRE Insurance is teaching children important life skills, which is why it partners with Courageous Sailing, a nationally recognized year-round educational center for community sailing and youth development in Boston, Massachusetts. Courageous teaches sailing and more to over 1,000 kids each year and is dedicated to helping reduce the opportunity gap for disadvantaged kids. MAPFRE Insurance supported the Courageous summer youth program, providing 140 kids the opportunity to learn the importance of protecting our invaluable ocean resources; the possibility of careers in maritime, scientific and educational fields; and their ability to learn from and enjoy Boston's natural beauty to the fullest extent. The sailboats act as a unique and powerful "classroom" that inspires the imagination, encourages personal growth, bestows positive life skills and provides a social network from which students may draw energy and support for the rest of their lives.
In addition, MAPFRE Insurance branded eight Rhodes 19 boats and participated in the Courageous Corporate Challenge Regatta. The Corporate Challenge consisted of five evenings of fast-paced sailboat racing around Boston Harbor against 15 other companies. MAPFRE Insurance employees and Independent Agents all participated in the Corporate Challenge on behalf of MAPFRE Insurance's team. Thanks to MAPFRE employees and independent agents who helped raise $70,000 for Courageous kids, making it possible for 140 kids to sail, and do so much more, this past summer.
Click here to visit IMPACT magazine


text:
Kim Katzberg's "Penetrating the Space" at Hot! Festival
By Traven Rice
Traven Ricehttps://lo-down.mystagingwebsite.com
We spoke briefly with actress Kim Katzberg last April when she was debuting her show (a work-in-progress), Penetrating the Space, at Dixon Place. The piece is described as "a tragicomic send-up of a one-woman show in which a kooky bisexual performance artist and incest survivor mistakenly believes that theatricalizing her psychological fragmentation and integration in front of an audience will lead to mainstream acceptance in the acting industry and a big-time agent." Katzberg is performing her latest version of the show tomorrow night, for one night only, as part of the Hot! Festival. I asked her how the piece has evolved over the last few months. She reported back:
After the show in April, I wanted to take Penetrating the Space to the next level and delve deeper. I wanted to get more vulnerable, create new material, deepen the story and the characters. In the newest installment of "Penetrating the Space" there are some new characters. There's Terry, a stripper in her thirties with a mud-flapish white-trash rock and roll frosted on the edges hair-do. She dances to a smooth jazz mix as she works the late night shift at a suicide prevention hotline. She wears a velveteen tight leopard one-piece outfit and has long-ass fake nails and says she is newly sober but is high as a kite on some kind of sedatives…
Directed by John Harlacher With original animation by Maia Cruz Palileo. Tickets are $10 (advance sale), $15 (at door) // Saturday, July 31 // 9:30p // 161A Chrystie Street
The Sunshine Midnight Movie: An All About Evil Extravaganza
Rep. Maloney Makes Campaign Stop at Hester Street Fair


text:
Do you think your kid is a PRO?
The next Pelé will not be white, expatriate and resident in Singapore.
Did we disappoint you?
If you want a winning child, timing is key
Get real.
If some Singapore academy had ever formed an outstanding footballer who played for a Champions League team we would say that the way is to create "elite" teams focused on competition between children.
But this is definitely NOT the way.
Children need fundamentals, experimentation, focus, team bonding and to have fun.
Over training and competitions all weekend will not turn your child into a professional athlete. Neither this lifestyle will do good for your family's social life.
That's why we partnered with a real CHAMPION, one of the greatest athletes in the country's history: Mighty May.
Olympic swimmer, martial arts champion, scholar at an elite university, doctor.
And our partner on the journey to envision a sustainable future for children.
Want to be a pro? Get real.
From representing Singapore in the 1992 Olympics to completing a medical degree, May Ooi has lived many lives. Did we mention she's also a successful mixed martial arts fighter who's helping to grow Singaporean sports culture? Your son or daughter needs someone who has a past and a glimpse of a future. Marketing formulas do not prepare athletes.


text:
Q: D3.js axis tick label rotation based on width of label and bar I've encountered an issue with the length of axis tick labels. For example I would like to rotate my x-axis tick labels when the label is wider than the bar which it represents. I am using different data sets so would like this behavior as the number of bars and label widths will change.
Is there a way to find the length of a string in D3 in order to compare with the width of bar?
I did see a general suggestion of finding string sizes using the span tag however I dont think that this is an option for D3.
The code snippet below shows what I would like to do on a very basic level.
Please NOTE: the code in the snippet is not mine, its is code I found online in order to get a quick example for the issue representation.

// https://insights.stackoverflow.com/survey/2018/#technology-most-loved-dreaded-and-wanted-languages
    const sample = [
      {
        language: 'This text should be rotated',
        value: 78.9,
        color: '#000000'
      },
      {
        language: 'Python',
        value: 68.0,
        color: '#fbcb39'
      },
      {
        language: 'Go',
        value: 65.6,
        color: '#65cedb'
      },
      {
        language: 'JavaScript',
        value: 61.9,
        color: '#f9de3f'
      },
    ];

    const svg = d3.select('svg');
    const svgContainer = d3.select('#container');

    const margin = 80;
    const width = 1000 - 2 * margin;
    const height = 600 - 2 * margin;

    const chart = svg.append('g')
      .attr('transform', `translate(${margin}, ${margin})`);

    const xScale = d3.scaleBand()
      .range([0, width])
      .domain(sample.map((s) => s.language))
      .padding(0.4)

    const yScale = d3.scaleLinear()
      .range([height, 0])
      .domain([0, 100]);

    // vertical grid lines
    // const makeXLines = () => d3.axisBottom()
    //   .scale(xScale)

    const makeYLines = () => d3.axisLeft()
      .scale(yScale)

    chart.append('g')
      .attr('transform', `translate(0, ${height})`)
      .call(d3.axisBottom(xScale));

    chart.append('g')
      .call(d3.axisLeft(yScale));

    // vertical grid lines
    // chart.append('g')
    //   .attr('class', 'grid')
    //   .attr('transform', `translate(0, ${height})`)
    //   .call(makeXLines()
    //     .tickSize(-height, 0, 0)
    //     .tickFormat('')
    //   )

    chart.append('g')
      .attr('class', 'grid')
      .call(makeYLines()
        .tickSize(-width, 0, 0)
        .tickFormat('')
      )

    const barGroups = chart.selectAll()
      .data(sample)
      .enter()
      .append('g')

    barGroups
      .append('rect')
      .attr('class', 'bar')
      .attr('x', (g) => xScale(g.language))
      .attr('y', (g) => yScale(g.value))
      .attr('height', (g) => height - yScale(g.value))
      .attr('width', xScale.bandwidth())
      .on('mouseenter', function (actual, i) {
        d3.selectAll('.value')
          .attr('opacity', 0)

        d3.select(this)
          .transition()
          .duration(300)
          .attr('opacity', 0.6)
          .attr('x', (a) => xScale(a.language) - 5)
          .attr('width', xScale.bandwidth() + 10)

        const y = yScale(actual.value)

        line = chart.append('line')
          .attr('id', 'limit')
          .attr('x1', 0)
          .attr('y1', y)
          .attr('x2', width)
          .attr('y2', y)

        barGroups.append('text')
          .attr('class', 'divergence')
          .attr('x', (a) => xScale(a.language) + xScale.bandwidth() / 2)
          .attr('y', (a) => yScale(a.value) + 30)
          .attr('fill', 'white')
          .attr('text-anchor', 'middle')
          .text((a, idx) => {
            const divergence = (a.value - actual.value).toFixed(1)

            let text = ''
            if (divergence > 0) text += '+'
            text += `${divergence}%`

            return idx !== i ? text : '';
          })

      })
      .on('mouseleave', function () {
        d3.selectAll('.value')
          .attr('opacity', 1)

        d3.select(this)
          .transition()
          .duration(300)
          .attr('opacity', 1)
          .attr('x', (a) => xScale(a.language))
          .attr('width', xScale.bandwidth())

        chart.selectAll('#limit').remove()
        chart.selectAll('.divergence').remove()
      })

    barGroups
      .append('text')
      .attr('class', 'value')
      .attr('x', (a) => xScale(a.language) + xScale.bandwidth() / 2)
      .attr('y', (a) => yScale(a.value) + 30)
      .attr('text-anchor', 'middle')
      .text((a) => `${a.value}%`)

    svg
      .append('text')
      .attr('class', 'label')
      .attr('x', -(height / 2) - margin)
      .attr('y', margin / 2.4)
      .attr('transform', 'rotate(-90)')
      .attr('text-anchor', 'middle')
      .text('Love meter (%)')

    svg.append('text')
      .attr('class', 'label')
      .attr('x', width / 2 + margin)
      .attr('y', height + margin * 1.7)
      .attr('text-anchor', 'middle')
      .text('Languages')

    svg.append('text')
      .attr('class', 'title')
      .attr('x', width / 2 + margin)
      .attr('y', 40)
      .attr('text-anchor', 'middle')
      .text('Example')

    svg.append('text')
      .attr('class', 'source')
      .attr('x', width - margin / 2)
      .attr('y', height + margin * 1.7)
      .attr('text-anchor', 'start')
      .text('')

body {
  font-family: 'Open Sans', sans-serif;
}

div#layout {
  text-align: center;
}

div#container {
  width: 1000px;
  height: 600px;
  margin: auto;
  background-color: #2F4A6D;
}

svg {
  width: 100%;
  height: 100%;
}

.bar {
  fill: #80cbc4;
}

text {
  font-size: 12px;
  fill: #fff;
}

path {
  stroke: gray;
}

line {
  stroke: gray;
}

line#limit {
  stroke: #FED966;
  stroke-width: 3;
  stroke-dasharray: 3 6;
}

.grid path {
  stroke-width: 0;
}

.grid .tick line {
  stroke: #9FAAAE;
  stroke-opacity: 0.3;
}

text.divergence {
  font-size: 14px;
  fill: #2F4A6D;
}

text.value {
  font-size: 14px;
}

text.title {
  font-size: 22px;
  font-weight: 600;
}

text.label {
  font-size: 14px;
  font-weight: 400;
}

text.source {
  font-size: 10px;
}

  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
  <title>Bar chart with D3.js</title>

  <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">

      <svg />

A: Here's the important bits. You can tweak to your liking
    chart.append('g')
      .attr('transform', `translate(0, ${height})`)
      .classed('axis', true) // class the x axis for selection
      .call(d3.axisBottom(xScale));

    d3.select('.axis')
        .selectAll('text') // select all the text elements
        .each(function(d){
           if(this.getBBox().width > 50) { // getBBox gets bouinding box info on svg elements
            d3.select(this).attr('transform','rotate(45)')
           .style('text-anchor','start')
        }})

redpajama_set_name: RedPajamaStackExchange


text:
Podcast 07 – Alistair Morrison
In this episode I talk to Alistair Morrison of Dervaig.
Al's family holidayed in Dervaig when he was young, and eventually bought a cottage in the village.
I was keen to talk to Al as he's someone who has always longed to be here.
His experiences in childhood and throughout his teenage years here left such a mark on him that he always wanted to come and live on the island.
We talk about how music and culture affect who we are, teenage adventures, memories of the village in the past, and a little about his work as a postman in Salen.
We also talk about one of my favourite events on Mull, the Box Ball. The box balls were fancy dress parties in Dervaig at the old hall, where Dougie's shop is now.
I'm very pleased to say that this episode has been sponsored by Treshnish & Haunn Cottages. Have a look at their remarkable cottages here.
You can also find Treshnish on Instagram, Twitter and Facebook on @treshnish
Guthan Nan Eilean / Island Voices can be found here. It's an amazing resource!
Podcast 06 – Alasdair MacLean
Episode 08 – Roc Sandford


Legal services; conveyancing services; security services for the protection of property and individuals; social work services; consultancy services relating to health and safety; consultancy services relating to personal appearance; provision of personal tarot readings; dating services; funeral services and undertaking services; fire-fighting services; detective agency services.
2445269 " PLAIN SPEAKING LEGAL ADVICE "
2310951 "chillout in the sun!"
2542462 "Delivering Excellent Housing Services"
2411904 "Hindsight...is prerequisite to foresight..."
2562655 "The Family Concern, Concerned about Families"
2525826 "whatever they call you call us"


text:
Q: Proving that $a_n$ is not monotonically increasing if $a_n\ge 0$ and $\lim a_n=0$ Had an exam today and there was the following question:

Let $a_n$ be a sequence such that for all $n\in \mathbb N$ we have $a_n \geq 0$ and $\lim a_n = 0$. Prove that $a_n$ is not monotonically strictly increasing.

It feels like an easy question but I have no idea how to prove it.

A: If it is increasing, then, for every $n\ge 3$,
$$|a_n|>a_2>0$$
which contradicts the condition that $\lim a_n=0$.

A: Let $(x_n)_{n\ge 0}$ be a stictly increasing sequence that converges to $L$.
Then $L = \text{sup}(x_n)$ and for any integer $k \ge 0$, $\;x_k \lt L$.
So if $(x_n)_{n\ge 0}$ is strictly increasing, converges to $L$, and all $x_n \ge 0$, then $L \gt 0$.

A: As of $\lim\limits_{n\to\infty}a_n=0$ we have $\forall\epsilon>0\exists N(\epsilon):|a_n|<\epsilon$ $\forall n\in\mathbb{N}$ with $n>N(\epsilon)$
Now assume $(a_n)_{n\in\mathbb{N}}$ is monotonically strictly increasing:
By definition we get $a_{n+1}=a_n+x_n$ where $x_n\in\mathbb{R}$ and $x_n>0$.
Because of $a_n\geq0$ $\forall n\in\mathbb{N}$ and $x_n>0$ $\forall n\in\mathbb{N}$ we get $0<a_1+x_1=a_2$.
Therefore $\forall n\in\mathbb{N}$ with $n\geq2$ we have $0<a_n$ or rather $0\leq a_n-x_1\Leftrightarrow x_1\leq a_n$.
If we now set $\epsilon:=\frac{x_1}{2}$ we get $|a_n|=a_n>\epsilon$ $\forall n\in\mathbb{N}$ with $n\geq2$ which means $(a_n)_{n\in\mathbb{N}}$ can not be monotonically strictly increasing as it would hurt the requirement $\lim\limits_{n\to\infty}a_n=0$.
I know it's a lot of text but I hope it's helpful :)


text:
Michał Żułkiewicz (ur. 1844, zm. 1905) – polski nauczyciel.

Życiorys
Od 1888 do śmierci był dyrektorem C. K. Gimnazjum w Bochni. Na początku XX wieku był także pomysłodawcą i został dyrektorem tamtejszej Bursy gimnazjalnej im. Mickiewicza.

Po śmierci (zm. 11 kwietnia 1905) została odsłonięta tablica upamiętniająca jego osobę w gmachu bocheńskiej bursy. W 2004 ustanowiono w Bochni ulicę Michała Żułkiewicza.

Przypisy

Galicyjscy nauczyciele
Ludzie związani z Bochnią
Urodzeni w 1844
Zmarli w 1905

redpajama_set_name: RedPajamaWikipedia


text:
Author: Reuters
Australian government set to secure support for $110 billion tax cut plan
04/07/2019 Reuters 722 Views 0 Comments
Prime Minister of Australia Scott Morrison reacts during the APEC CEO Summit 2018 at the Port Moresby, Papua New
Alert level raised for Hawaii volcano due to rumbles, quakes
The Mauna Loa volcano in Hawaii has been hit by at least 50 small earthquakes since October of last year, scientists said on Tuesday, prompting U.S. geologists to raise its alert level to yellow. An eruption of Mauna Loa, the world's largest active volcano, did not appear to be imminent. The increased seismic activity indicated a shift in the "shallow magma storage system" under the mountain, the Hawaii Volcano Observatory (HVO) said in an advisory.
Indonesia's parliament delays approval for levy on plastic bags
03/07/2019 Reuters 628 Views 0 Comments Plastic Pollution
JAKARTA (Reuters) – Indonesian members of parliament have decided to delay confirmation of a government plan for a levy on plastic bags, but the finance minister said she was optimistic the legislation was on track to be adopted this year. The archipelago of 17,000 islands churns out 9.85 billion of the bags each year, making it the world's second-biggest contributor of plastic pollutants in the oceans, Sri Mulyani Indrawati told members of parliament.
Japan, hit by torrential rains, orders 800,000 to evacuate
TOKYO (Reuters) – Japan ordered nearly 800,000 people on the southern island of Kyushu to take shelter in evacuation centers and other safe areas on Wednesday as heavy rains threatened to trigger landslides and cause other damage.
'Help, 40 days here': Photos show migrants crammed into U.S. border facilities
03/07/2019 Reuters 411 Views 0 Comments U.S. border
Government investigators warned of dangerous overcrowding at more migrant facilities on the southwest U.S. border, publishing photos on Tuesday of packed cells in Texas' Rio Grande Valley where some children have no access to showers or hot meals.
International News Pacific
Tiny nations challenge Australia's carbon 'carryover credits'
Nations from Senegal to Tuvalu have used a United Nations climate conference to challenge the Morrison government's use of carbon "carryover credits" to virtually halve Australia's abatement ambition out to 2030.
Europe's heatwave burns on, but eases from record highs
PARIS/MADRID (Reuters) – A four-day heatwave across western Europe that killed seven people began to ease slightly on Sunday, as temperature alerts were cut back and wildfires slowly brought under control.
Hong Kong on edge as protests erupt ahead of handover rally
HONG KONG (Reuters) – Thousands of demonstrators faced off with riot police early on Monday, the anniversary of Hong Kong's return to Chinese rule,as authorities braced for more mass protests amid widespread anger over a controversial extradition bill. More than a million people have taken to the streets at times over the past three weeks to vent their anger and frustration at Hong Kong's Beijing-backed leader Carrie Lam, posing the greatest popular challenge to Chinese leader Xi Jinping since he came to power in 2012.
Ships set off in Japan's first commercial whale hunt in more than 30 years
01/07/2019 Reuters 319 Views 0 Comments Japan, whaling
Whaling ships which are set to join the resumption of commercial whaling are seen before they sail out at a
Points proven, World Cup heads into grand finale
30/06/2019 Reuters 455 Views
Television audience records have been smashed, global media coverage has been unprecedented and the quality of football has won over many sceptics — now the women's World Cup heads into its final week, the business end of the tournament. The United States, the defending champions and three-times World Cup winners, remain favourites to lift the trophy in Lyon on Sunday but first they must deal with a confident England side in Tuesday's semi-final.
Cricket Sport
India hand Pant debut, Roy returns for England
Rishabh Pant was handed his World Cup debut on Sunday after being named in the India team to face an England side who welcomed back opener Jason Roy for a contest crucial to their hopes of reaching the semi-finals.
Emergency Featured News Papua New Guinea
Papua New Guinea volcanic eruptions force 15,000 from their homes
30/06/2019 30/06/2019 Reuters 547 Views
Volcanic eruptions in Papua New Guinea (PNG) have forced 15,000 villagers in the country's northeast to flee their homes, aid agencies said on Sunday. Mount Ulawun on PNG's northeastern island of New Britain exploded suddenly on Wednesday, shooting an ash column 18 km (11.18 miles) into the air, while nearby Manam erupted on Friday, sending dangerous pyroclastic flows down its slopes.
Business International
G20 stops short of denouncing protectionism, warns of global slowdown
Leaders of the Group of 20 major economies warned on Saturday of growing risks to the global economy but stopped short of denouncing protectionism, calling instead for a free, fair trade environment after talks some members described as difficult.
Entertainment International
Rapper Nipsey Hussle and accused killer talked about snitching before shooting
Rapper Nipsey Hussle and the man accused of killing him talked about "snitching" before the rap star was shot dead, according to court documents released Thursday, media reports said.
Finance International News
Oil prices ease, but Middle East tanker attacks support
14/06/2019 14/06/2019 Reuters 798 Views 0 Comments
FILE PHOTO: Pump jacks operate at sunset in an oil field in Midland, Texas U.S. August 22, 2018. REUTERS/Nick


The online shopping is useful. It save time, travel expenditure, tiredness etc. I use to shop online a lot. I used to make price comparison before online shopping. But many people are not sure to do so. May be this post can help them to know more about online shopping websites and how to make compare price from various websites in one go and under one umbrella.
Many online shopping websites have been introduced where Flipcart and Snapdeal have got good appreciation in market of India. You may compare the price of any item before shopping. We have seen that few items are very cheaper than local retailer and you are getting a huge discount on the same. If you want to compare a price of any item over various websites then you may do it easily through Junglee.com. This is one of the websites which is used to compare the price and display price amount of various top shopping websites. More than 2000 shopping websites listed worldwide in junglee.com. The various websites are offering huge discount which you can avail.
I have listed below few websites to Shop Online through internet, You may enjoy shopping online right now.
This entry was posted in Online Shopping on November 10, 2014 by Yogesh Bajpai.


Sale Apply Savings Up to 55 on base layers Lock in warmth for less when you shop Cabela's Base Layer Sale! Comment (0) Expired Cabelas Coupons Want us to automatically try all 20 coupons, to find the best savings? Offer available only for club Visa members. Code Save Show Code 10 OFF free Shipping W/ club Visa Card Expired: Sep 14, 2017 Details: Use this code to get 10 OFF free Shipping W/ club Visa Card at Cabelas! Comment (0) Related Cabelas Coupons Second Ascent coupons free Shipping.95 Promo : Get Deal Get free Shipping on Orders Over.95 at Second Ascent. OFF, blow Out Sale, promo : Get Deal, enjoy up. Using my Cabela's club Visa/Rewards points. Save up to 60 today at Cabela's! Shop for camping gear, hunting and fishing products, and more!
Off, customer Appreciation Sale. Enjoy 20 off, 20 off 150 on outdoor gear purchase with. Find the lastest Cabela s 20 off 150 purchase in store online 2019, Cabelas free shipping coupon codes, promotion codes now! Whatever your question, problem, or comment, Cabela s Customer Service is here to help. There are four quick, easy ways to call on us, so you can choose what works best for you.
Sale, apply Savings, added 1 month ago, up. Sale Apply Savings Up to 70 Off on Hot Buys Save up to 70 on Hot Buys Free Shipping on 99 with promo code at Cabela's. Find tents, trail cameras, coolers, boots, clothing, fishing gear and more at great prices and good quality. These are the answers to the questions we hear most often. Sale Apply Savings free shipping 10 Off on Coolers Save an Extra 10 on Coolers your entire order ships for.01 at Cabelas.com Promo Code 17coolers Reveal Code free shipping Up to 30 Off on select Cabela's Rods Save up to 30 on select Cabela's Rods!
It's a wise decision to choose us and spend much less on your favorite items with Jiffy Lube promo codes that we offer. Enjoy fantastic savings with..
M only offers its services and products where it is allowed to do so, therefore, not all of our securities, products or services may be available to..
OUR goal IS TO give yoreat food AT reasonable prices. Food Types, bar, gastro Pub, wine Bar. View restaurant information, deals, hours, and a map for. This..


The English Springer Spaniel is an intelligent and highly energetic dog breed that enjoys hunting on land as well as traipsing through water and brush. In addition to being a great hunting, retrieving and bird dog, the breed's generally even-tempered, gentle and sociable manner makes it a great companion for families.
Use: The English Springer Spaniel is an intelligent and highly energetic dog breed that enjoys hunting on land as well as traipsing through water and brush.
History: The English Springer Spaniel dog breed is the first of English hunting spaniels. Derived from the same breed as the Cocker Spaniel when first bred in England during the Renaissance, these dogs were the bigger of the litter and used in hunting to "spring" on game. The breed became popular in the United States in the 18th century, and several other breeds developed from it.
Conformation: The English Springer Spaniel is a medium-sized dog with a compact body. It has a long, flat or wavy outercoat with a soft, dense undercoat. It comes in white and black or liver, roan and blue or liver, or tricolor. It stands at about 18 to 21 inches in height at the shoulder and weighs 40 to 50 pounds. It has close-lying ears that need to be checked regularly, as they are prone to injury or infection.
Special Considerations/Notes: Owners need to possess authority over the English Springer Spaniel dog breed because of its strong will. The breed's life expectancy is 10 to 15 years. Be sure to brush its coat regularly so it doesn't become matted.


text:
Campaign for the Essential Services Commission
It's Your Energy
Putting power back into consumers' hands
New stresses and economic uncertainty
Now more than ever, stresses surrounding energy bills are high. COVID-19 has introduced an enormous amount of uncertainty into the world, and the economic impacts are only just beginning to be felt. That's why it's crucial everyone understands their rights and options when it comes to accessing essential services, and are getting the best deal possible.
In response to public concerns around bills rising, and in anticipation of a challenging economic landscape, the Essential Services Commission tasked Icon Agency with executing the next iteration of the 'It's Your Energy' communications campaign, with a focus on driving action.
Looking out for consumer rights
Established in 2001, the Essential Services Commission (ESC) has one goal: to promote the long-term interests of consumers in Victoria, with respect to essential services such as energy, water and transport. This includes ensuring essential services are reliable and of high quality, that they are affordable and that consumers understand their rights and options in respect to these services.
Icon has been working with ESC since 2019 on the 'It's Your Energy' creative communications campaign, the aim of which has been to inform Victorians of recent changes to energy rights, and encourage them to seek better deals.
The newly vulnerable
A large cohort of our audience were what we would consider 'newly vulnerable'. These were people who typically don't have to worry about energy and water, but the personal, economic or mental strains of COVID-19 have put them in an unfamiliar and uncomfortable position – not knowing if they can pay their bills. We would need to ensure that our communications were understanding of this foreign situation the audience was in, and reassuring them that there was help out there.
We also had to be mindful of the message we were conveying. The previous two phases of this campaign had established a solid foundation, raising awareness of rights significantly. This third phase would be focused on driving measurable change, and encouraging consumers to take power into their own hands.
Building off of the established campaign visual style and assets, we iterated, developing the tagline 'Now more than ever, It's Your Energy'. Staying true to the original spirit of the campaign, this positioning encapsulates this phase and its goal: inspiring consumers to understand their rights and take action.
Associated visual collateral was created, the feature being a series of short videos that could be shared in their entirety, or as small, 'snack size' pieces. Content was prepared in a variety of languages to be accessible by CALD audiences, and shared through social media, press outlets and over radio, as well as through a digital marketing campaign.
Campaign collateral included:
2 x 15 second videos
Shopper media
Social tiles
Over 12 million (Total People) heard the messaging over the 3-week campaign period. Despite COVID-19 restrictions, radio was still able to provide a strong result for this campaign.
20% uptake in awareness of key messages
10% increase of awareness for 18-24 age group
10% increase in taking action
Services included:
Creative ideation and direction
Campaign planning, strategy and implementation
Creative 2021-08-30T00:59:25.000Z
Sorted Waste – community engagement campaign
Helping support Victorians' mental health wellbeing


text:
Q: cmake : Boost, plog and other packages not found. Packages installed via vcpkg I am building a cross-platform project using cmake in Visual Studios 2022 Community Edition.
I am unable to include library headers files and linker files.
Error
1> [CMake]   Could NOT find Boost (missing: Boost_INCLUDE_DIR)

Top-level CMake project file
# CMakeList.txt : Top-level CMake project file, do global configuration
# and include sub-projects here.
#
cmake_minimum_required (VERSION 3.8)
# Set vcpkg library path
set(CMAKE_TOOLCHAIN_FILE C:/vcpkg/scripts/buildsystems/vcpkg.cmake)
project ("Test")

# Include sub-projects.
add_subdirectory ("Test")

CMake project for Test
# CMakeList.txt : CMake project for Test, include source and define
# project specific logic here.
#
# Set to C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_BUILD_TYPE debug)
# Set to C17 standard
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
#add library packages
set(Boost_USE_STATIC_LIBS        ON)  # only find static libs
set(Boost_USE_DEBUG_LIBS        OFF)  # ignore debug libs and
set(Boost_USE_RELEASE_LIBS       ON)  # only find release libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
set(BOOST_INCLUDEDIR "C:\\vcpkg\\installed\\x64-windows-static\\include\\boost")
find_package(Boost REQUIRED)
if(Boost_FOUND)
    message(${Boost_VERSION_STRING})
    include_directories(${Boost_INCLUDE_DIR})
    target_link_libraries(Test ${Boost_LIBRARIES})
endif()
find_package(pystring REQUIRED)
find_package(plog REQUIRED)
# Add source to this project's executable.
add_executable (Test  main.cpp common.cpp MqttClient.cpp Protocol.cpp SerialPort.cpp)

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET Test PROPERTY CXX_STANDARD 20)
endif()

# TODO: Add s and install targets if needed.


Place the dates into a large bowl. Bring the water to a gentle boil, then pour it over the dates. Allow them to soak for 20 minutes (or up to an hour).
Drain the dates, reserving 1/2 cup of the soak water. Add them to a blender with the reserved water, the vanilla, and the salt. Blend till the mixture is totally smooth.
Date paste can be stored in an airtight container in the fridge for up to a week.
Can you freeze this paste successfully?
I wonder if you could do this with prunes. Dates are not always available where I live.