RavenDB - Smuggler - Move Data Between Databases

Octopus.Script exported 2015-11-15 by timhunt303 belongs to ‘RavenDB’ category.

To move data directly between two instances (or different databases in the same instance) using the between option introduced in Smuggler version 3.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Raven Smuggler Path

ravenSmugglerPath =

Full path to the Smuggler EXE.

For example C:\RavenDB\Smuggler\Raven.Smuggler.exe

Source Database URL

sourceDatabaseUrl = http://localhost:8080/

The URL of the Raven database, where the Source Database is located.

For example http://localhost:8080/

Name of the Source Database

sourceDatabaseName

Name of the Source Database in Raven.

API Key for the Source Database

sourceDatabaseApiKey

API Key needed to access the Source Database.

If key is not provided, anonymous authentication will be used.

For more information: http://ravendb.net/docs/article-page/3.0/csharp/studio/accessing-studio

Destination Database URL

destinationDatabaseUrl = http://localhost:8080/

The URL of the Raven database, where the Destination Database is located.

For example http://localhost:8080/

Name of the Destination Database

destinationDatabaseName

Name of the Destination Database in Raven.

API Key for the Destination Database

destinationDatabaseApiKey

API Key needed to access the Destination Database.

If key is not provided, anonymous authentication will be used.

For more information: http://ravendb.net/docs/article-page/3.0/csharp/studio/accessing-studio

Operate on Documents

OperateDocuments = True

With Raven backup, you can choose which types are operated during the backup.

Unselect this option to exclude Documents from the copying process.

Operate on Attachments

OperateAttachments = True

With Raven backup, you can choose which types are operated during the backup.

Unselect this option to exclude Attachments from the copying process.

Operate on Indexes

OperateIndexes = True

With Raven backup, you can choose which types are operated during the backup.

Unselect this option to exclude Indexes from the copying process.

Operate on Transformers

OperateTransformers = True

With Raven backup, you can choose which types are operated during the backup.

Unselect this option to exclude Transformers from the copying process.

Timeout

timeout = 300000

The timeout (in milliseconds) to use for requests.

Wait for Indexing

WaitIndexing = True

Wait until all indexing activity has been completed (Import Only).

Script body

Steps based on this template will execute the following PowerShell script.


# Variables

#Location of the Raven Smuggler exe
$ravenSmugglerPath = $OctopusParameters["ravenSmugglerPath"]


#--------------------------------------------------------------------
# Source Database Variables

#URL of RavenDB that is being backed up 
$sourceDatabaseURL = $OctopusParameters["sourceDatabaseURL"]

#name of the RavenDB that is being backed up
$sourceDatabaseName = $OctopusParameters["sourceDatabaseName"]

#API Key for the Source Database
$sourceDatabaseApiKey = $OctopusParameters["sourceDatabaseApiKey"]


#--------------------------------------------------------------------
#Destination Database Variables

#URL of destination RavenDB 
$destinationDatabaseURL = $OctopusParameters["destinationDatabaseURL"]

#Name of the destination RavenDB
$destinationDatabaseName = $OctopusParameters["destinationDatabaseName"]

#API Key for the Destination Database
$destinationDatabaseAPIKey = $OctopusParameters["destinationDatabaseAPIKey"]



#------------------------------------------------------------------------------
# Other Variables retrieved from Octopus

#Limit the back up to different types in the database
#Get document option (true/false)
$operateOnDocuments = $OctopusParameters["operateOnDocuments"]

#Get attachments option (true/false)
$operateOnAttachments = $OctopusParameters["operateOnAttachments"]

#Get indexes option (true/false)
$operateOnIndexes = $OctopusParameters["operateOnIndexes"]

#Get transformers option (true/false)
$operateOnTransformers = $OctopusParameters["operateOnTransformers"]

#Get timeout option 
$timeout = $OctopusParameters["timeout"]

#Get wait for indexing option (true/false)
$waitForIndexing = $OctopusParameters["waitForIndexing"]


#--------------------------------------------------------------------

#checks to see if the entered database exists, return a boolean value depending on the outcome
function doesRavenDBExist([string] $databaseChecking, [string]$URL)
{
    #retrieves the list of databases at the specified URL
    $database_list = Invoke-RestMethod -Uri "$URL/databases" -Method Get
    #checks if the database is at the specified URL
    if ($database_list -contains $databaseChecking.ToString()) 
    {
        return $TRUE
    }
    else 
    {
        return $FALSE
    }

    
}#ends does ravenDB exist function

Write-Output "`n-------------------------`n"

#--------------------------------------------------------------------
#Checking the versions of Raven Server of both databases to see if they are compatible 

Write-Output "Checking that both $sourceDatabaseName and $destinationDatabaseName are running the same version of RavenDB"

#Getting Source Database's build version
$sourceVersionURL = "$sourceDatabaseURL/databases/$sourceDatabaseName/build/version"

$sourceDatabaseVersion = Invoke-RestMethod -Uri $sourceVersionURL -Method Get

#Getting destination Database's build version
$destinationVersionURL = "$destinationDatabaseURL/databases/$destinationDatabaseName/build/version"

$destinationDatabaseVersion = Invoke-RestMethod -Uri $destinationVersionURL -Method Get

#Checks to see if they are the same version and build number
if(($sourceDatabaseVersion.ProductVersion -eq $destinationDatabaseVersion.ProductVersion) -and ($sourceDatabaseVersion.BuildVersion -eq $destinationDatabaseVersion.BuildVersion))
{
    
    Write-Output "Source Database Product Version:" $sourceDatabaseVersion.ProductVersion 
    Write-Output "Source Database Build Version:" $sourceDatabaseVersion.BuildVersion
    Write-Output "Destination Database Version:" $destinationDatabaseVersion.ProductVersion 
    Write-Output "Destination Database Build Version:" $destinationDatabaseVersion.BuildVersion
    Write-Output "Source and destination Databases are running the same version of Raven Server"
    
}
else 
{
    Write-Warning "Source Database Version: $sourceDatabaseVersion"
    Write-Warning "Destination Database Version: $destinationDatabaseVersion"
    Write-Warning "The databases are running different versions of Raven Server"
}

Write-Output "`n-------------------------`n"

#--------------------------------------------------------------------

#Check path to smuggler
Write-Output "Checking if Smuggler path is correct`n"

$smugglerPath = "$ravenSmugglerPath"

$smuggler_Exists = Test-Path -Path $smugglerPath



#if the path is correct, the script continues, throws an error if the path is wrong
If($smuggler_Exists -eq $TRUE)
{
    Write-Output "Smuggler exists"

}#ends if smuggler exists 
else
{
    Write-Error "Smuggler can not be found `nCheck the directory: $ravenSmugglerPath" -ErrorId E4
    Exit 1
}#ends else, smuggler can't be found

Write-Output "`n-------------------------`n"

#--------------------------------------------------------------------
#Checking the version of smuggler

$SmugglerVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ravenSmugglerPath).FileVersion

if($SmugglerVersion -cgt "3")
{
    Write-Output "Smuggler Version: $SmugglerVersion"
}
else
{
    Write-Error "The version of Smuggler that is installed can NOT complete this step `nPlease update Smuggler before continuing" -ErrorId E4
    Exit 1
}
Write-Output "`n-------------------------`n"





#--------------------------------------------------------------------


#Checks if both Source database and destination database exist
Write-Output "Checking if both $sourceDatabaseName and $destinationDatabaseName exist`n"

$sourceDatabase_exists = doesRavenDBExist -databaseChecking $sourceDatabaseName -URL $sourceDatabaseURL 

$destinationDatabase_exists = doesRavenDBExist -databaseChecking $destinationDatabaseName -URL $destinationDatabaseURL


#if both database exist a backup occurs
if(($sourceDatabase_exists -eq $TRUE) -and ($destinationDatabase_exists -eq $TRUE))
{

    Write-Output "Both $sourceDatabaseName and $destinationDatabaseName exist`n"

}#ends if 
#if the source database doesn’t exist an error is throw
elseIf(($sourceDatabase_exists -eq $FALSE) -and ($destinationDatabase_exists -eq $TRUE))
{

    Write-Error "$sourceDatabaseName does not exist. `nMake sure the database exists before continuing" -ErrorId E4
    Exit 1

}
#if the destination database doesn’t exist an error is throw
elseIf(($destinationDatabase_exists -eq $FALSE) -and ($sourceDatabase_exists -eq $TRUE))
{

    Write-Error "$destinationDatabaseName does not exist. `nMake sure the database exists before continuing" -ErrorId E4
    Exit 1

}#ends destination db not exists
else
{

    Write-Error "Neither $sourceDatabaseName or $destinationDatabaseName exists. `nMake sure both databases exists" -ErrorId E4
    Exit 1

}#ends else

Write-Output "`n-------------------------`n"

#--------------------------------------------------------------------
#changing the types to export/import

$operateTypes = @()


if($operateOnDocuments -eq $TRUE)
{
    $operateTypes += "Documents"
}
if($operateOnIndexes -eq $TRUE)
{
    $operateTypes += "Indexes"
}
if($operateOnAttachments -eq $TRUE)
{
    $operateTypes += "Attachments"
}
if($operateOnTransformers -eq $TRUE)
{
    $operateTypes += "Transformers"
}

$Types = $operateTypes -join ","

if($Types -ne "")
{
    Write-Output "This back up is only operating on $Types"

    Write-Output "`n-------------------------`n"
}


#--------------------------------------------------------------------
#check if wait for indexing is selected
$Indexing = ""

if($waitForIndexing -eq $TRUE)
{
    $Indexing = "--wait-for-indexing"
}

#--------------------------------------------------------------------
#backing up source database into the destination database

try
{
    Write-Output "Attempting Backup up now"
    Write-Output "`n-------------------------`n"
    & $ravenSmugglerPath between $sourceDatabaseURL $destinationDatabaseURL --database=$sourceDatabaseName --database2=$destinationDatabaseName --api-key=$sourceDatabaseApiKey --api-key2=$destinationDatabaseAPIKey --timeout=$Timeout $Indexing 
    Write-Output "`n-------------------------`n"
    Write-Output "Backup successful" 
}#ends try
catch
{
    Write-Error "An error occurred during backup, please try again" -ErrorId E4
    Exit 1
}#ends catch 

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "82f804fe-682e-4e0b-8c2a-a5f289a9cabc",
  "Name": "RavenDB - Smuggler - Move Data Between Databases",
  "Description": "To move data directly between two instances (or different databases in the same instance) using the between option introduced in Smuggler version 3.",
  "Version": 10,
  "ExportedAt": "2015-11-15T22:01:49.385+00:00",
  "ActionType": "Octopus.Script",
  "Author": "timhunt303",
  "Parameters": [
    {
      "Name": "ravenSmugglerPath",
      "Label": "Raven Smuggler Path",
      "HelpText": "Full path to the Smuggler EXE. \n \nFor example **C:\\RavenDB\\Smuggler\\Raven.Smuggler.exe**",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "sourceDatabaseUrl",
      "Label": "Source Database URL",
      "HelpText": "The URL of the Raven database, where the **Source Database** is located. \n\nFor example **http://localhost:8080/**",
      "DefaultValue": "http://localhost:8080/",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "sourceDatabaseName",
      "Label": "Name of the Source Database",
      "HelpText": "Name of the **Source Database** in Raven.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "sourceDatabaseApiKey",
      "Label": "API Key for the Source Database",
      "HelpText": "API Key needed to access the **Source Database**. \n\nIf key is not provided, anonymous authentication will be used.\n\nFor more information: http://ravendb.net/docs/article-page/3.0/csharp/studio/accessing-studio",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Name": "destinationDatabaseUrl",
      "Label": "Destination Database URL",
      "HelpText": "The URL of the Raven database, where the **Destination Database** is located. \n\nFor example **http://localhost:8080/**",
      "DefaultValue": "http://localhost:8080/",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "destinationDatabaseName",
      "Label": "Name of the Destination Database",
      "HelpText": "Name of the **Destination Database** in Raven.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "destinationDatabaseApiKey",
      "Label": "API Key for the Destination Database",
      "HelpText": "API Key needed to access the **Destination Database**. \n\nIf key is not provided, anonymous authentication will be used.\n\nFor more information: http://ravendb.net/docs/article-page/3.0/csharp/studio/accessing-studio",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Name": "OperateDocuments",
      "Label": "Operate on Documents",
      "HelpText": "With Raven backup, you can choose which types are operated during the backup.\n\nUnselect this option to exclude **Documents** from the copying process.",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Name": "OperateAttachments",
      "Label": "Operate on Attachments",
      "HelpText": "With Raven backup, you can choose which types are operated during the backup.\n\nUnselect this option to exclude **Attachments** from the copying process.",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Name": "OperateIndexes",
      "Label": "Operate on Indexes",
      "HelpText": "With Raven backup, you can choose which types are operated during the backup.\n\nUnselect this option to exclude **Indexes** from the copying process.",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Name": "OperateTransformers",
      "Label": "Operate on Transformers",
      "HelpText": "With Raven backup, you can choose which types are operated during the backup.\n\nUnselect this option to exclude **Transformers** from the copying process.",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Name": "timeout",
      "Label": "Timeout",
      "HelpText": "The timeout (in milliseconds) to use for requests.",
      "DefaultValue": "300000",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "WaitIndexing",
      "Label": "Wait for Indexing",
      "HelpText": "Wait until all indexing activity has been completed (Import Only).",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "\n# Variables\n\n#Location of the Raven Smuggler exe\n$ravenSmugglerPath = $OctopusParameters[\"ravenSmugglerPath\"]\n\n\n#--------------------------------------------------------------------\n# Source Database Variables\n\n#URL of RavenDB that is being backed up \n$sourceDatabaseURL = $OctopusParameters[\"sourceDatabaseURL\"]\n\n#name of the RavenDB that is being backed up\n$sourceDatabaseName = $OctopusParameters[\"sourceDatabaseName\"]\n\n#API Key for the Source Database\n$sourceDatabaseApiKey = $OctopusParameters[\"sourceDatabaseApiKey\"]\n\n\n#--------------------------------------------------------------------\n#Destination Database Variables\n\n#URL of destination RavenDB \n$destinationDatabaseURL = $OctopusParameters[\"destinationDatabaseURL\"]\n\n#Name of the destination RavenDB\n$destinationDatabaseName = $OctopusParameters[\"destinationDatabaseName\"]\n\n#API Key for the Destination Database\n$destinationDatabaseAPIKey = $OctopusParameters[\"destinationDatabaseAPIKey\"]\n\n\n\n#------------------------------------------------------------------------------\n# Other Variables retrieved from Octopus\n\n#Limit the back up to different types in the database\n#Get document option (true/false)\n$operateOnDocuments = $OctopusParameters[\"operateOnDocuments\"]\n\n#Get attachments option (true/false)\n$operateOnAttachments = $OctopusParameters[\"operateOnAttachments\"]\n\n#Get indexes option (true/false)\n$operateOnIndexes = $OctopusParameters[\"operateOnIndexes\"]\n\n#Get transformers option (true/false)\n$operateOnTransformers = $OctopusParameters[\"operateOnTransformers\"]\n\n#Get timeout option \n$timeout = $OctopusParameters[\"timeout\"]\n\n#Get wait for indexing option (true/false)\n$waitForIndexing = $OctopusParameters[\"waitForIndexing\"]\n\n\n#--------------------------------------------------------------------\n\n#checks to see if the entered database exists, return a boolean value depending on the outcome\nfunction doesRavenDBExist([string] $databaseChecking, [string]$URL)\n{\n    #retrieves the list of databases at the specified URL\n    $database_list = Invoke-RestMethod -Uri \"$URL/databases\" -Method Get\n    #checks if the database is at the specified URL\n    if ($database_list -contains $databaseChecking.ToString()) \n    {\n        return $TRUE\n    }\n    else \n    {\n        return $FALSE\n    }\n\n    \n}#ends does ravenDB exist function\n\nWrite-Output \"`n-------------------------`n\"\n\n#--------------------------------------------------------------------\n#Checking the versions of Raven Server of both databases to see if they are compatible \n\nWrite-Output \"Checking that both $sourceDatabaseName and $destinationDatabaseName are running the same version of RavenDB\"\n\n#Getting Source Database's build version\n$sourceVersionURL = \"$sourceDatabaseURL/databases/$sourceDatabaseName/build/version\"\n\n$sourceDatabaseVersion = Invoke-RestMethod -Uri $sourceVersionURL -Method Get\n\n#Getting destination Database's build version\n$destinationVersionURL = \"$destinationDatabaseURL/databases/$destinationDatabaseName/build/version\"\n\n$destinationDatabaseVersion = Invoke-RestMethod -Uri $destinationVersionURL -Method Get\n\n#Checks to see if they are the same version and build number\nif(($sourceDatabaseVersion.ProductVersion -eq $destinationDatabaseVersion.ProductVersion) -and ($sourceDatabaseVersion.BuildVersion -eq $destinationDatabaseVersion.BuildVersion))\n{\n    \n    Write-Output \"Source Database Product Version:\" $sourceDatabaseVersion.ProductVersion \n    Write-Output \"Source Database Build Version:\" $sourceDatabaseVersion.BuildVersion\n    Write-Output \"Destination Database Version:\" $destinationDatabaseVersion.ProductVersion \n    Write-Output \"Destination Database Build Version:\" $destinationDatabaseVersion.BuildVersion\n    Write-Output \"Source and destination Databases are running the same version of Raven Server\"\n    \n}\nelse \n{\n    Write-Warning \"Source Database Version: $sourceDatabaseVersion\"\n    Write-Warning \"Destination Database Version: $destinationDatabaseVersion\"\n    Write-Warning \"The databases are running different versions of Raven Server\"\n}\n\nWrite-Output \"`n-------------------------`n\"\n\n#--------------------------------------------------------------------\n\n#Check path to smuggler\nWrite-Output \"Checking if Smuggler path is correct`n\"\n\n$smugglerPath = \"$ravenSmugglerPath\"\n\n$smuggler_Exists = Test-Path -Path $smugglerPath\n\n\n\n#if the path is correct, the script continues, throws an error if the path is wrong\nIf($smuggler_Exists -eq $TRUE)\n{\n    Write-Output \"Smuggler exists\"\n\n}#ends if smuggler exists \nelse\n{\n    Write-Error \"Smuggler can not be found `nCheck the directory: $ravenSmugglerPath\" -ErrorId E4\n    Exit 1\n}#ends else, smuggler can't be found\n\nWrite-Output \"`n-------------------------`n\"\n\n#--------------------------------------------------------------------\n#Checking the version of smuggler\n\n$SmugglerVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ravenSmugglerPath).FileVersion\n\nif($SmugglerVersion -cgt \"3\")\n{\n    Write-Output \"Smuggler Version: $SmugglerVersion\"\n}\nelse\n{\n    Write-Error \"The version of Smuggler that is installed can NOT complete this step `nPlease update Smuggler before continuing\" -ErrorId E4\n    Exit 1\n}\nWrite-Output \"`n-------------------------`n\"\n\n\n\n\n\n#--------------------------------------------------------------------\n\n\n#Checks if both Source database and destination database exist\nWrite-Output \"Checking if both $sourceDatabaseName and $destinationDatabaseName exist`n\"\n\n$sourceDatabase_exists = doesRavenDBExist -databaseChecking $sourceDatabaseName -URL $sourceDatabaseURL \n\n$destinationDatabase_exists = doesRavenDBExist -databaseChecking $destinationDatabaseName -URL $destinationDatabaseURL\n\n\n#if both database exist a backup occurs\nif(($sourceDatabase_exists -eq $TRUE) -and ($destinationDatabase_exists -eq $TRUE))\n{\n\n    Write-Output \"Both $sourceDatabaseName and $destinationDatabaseName exist`n\"\n\n}#ends if \n#if the source database doesn’t exist an error is throw\nelseIf(($sourceDatabase_exists -eq $FALSE) -and ($destinationDatabase_exists -eq $TRUE))\n{\n\n    Write-Error \"$sourceDatabaseName does not exist. `nMake sure the database exists before continuing\" -ErrorId E4\n    Exit 1\n\n}\n#if the destination database doesn’t exist an error is throw\nelseIf(($destinationDatabase_exists -eq $FALSE) -and ($sourceDatabase_exists -eq $TRUE))\n{\n\n    Write-Error \"$destinationDatabaseName does not exist. `nMake sure the database exists before continuing\" -ErrorId E4\n    Exit 1\n\n}#ends destination db not exists\nelse\n{\n\n    Write-Error \"Neither $sourceDatabaseName or $destinationDatabaseName exists. `nMake sure both databases exists\" -ErrorId E4\n    Exit 1\n\n}#ends else\n\nWrite-Output \"`n-------------------------`n\"\n\n#--------------------------------------------------------------------\n#changing the types to export/import\n\n$operateTypes = @()\n\n\nif($operateOnDocuments -eq $TRUE)\n{\n    $operateTypes += \"Documents\"\n}\nif($operateOnIndexes -eq $TRUE)\n{\n    $operateTypes += \"Indexes\"\n}\nif($operateOnAttachments -eq $TRUE)\n{\n    $operateTypes += \"Attachments\"\n}\nif($operateOnTransformers -eq $TRUE)\n{\n    $operateTypes += \"Transformers\"\n}\n\n$Types = $operateTypes -join \",\"\n\nif($Types -ne \"\")\n{\n    Write-Output \"This back up is only operating on $Types\"\n\n    Write-Output \"`n-------------------------`n\"\n}\n\n\n#--------------------------------------------------------------------\n#check if wait for indexing is selected\n$Indexing = \"\"\n\nif($waitForIndexing -eq $TRUE)\n{\n    $Indexing = \"--wait-for-indexing\"\n}\n\n#--------------------------------------------------------------------\n#backing up source database into the destination database\n\ntry\n{\n    Write-Output \"Attempting Backup up now\"\n    Write-Output \"`n-------------------------`n\"\n    & $ravenSmugglerPath between $sourceDatabaseURL $destinationDatabaseURL --database=$sourceDatabaseName --database2=$destinationDatabaseName --api-key=$sourceDatabaseApiKey --api-key2=$destinationDatabaseAPIKey --timeout=$Timeout $Indexing \n    Write-Output \"`n-------------------------`n\"\n    Write-Output \"Backup successful\" \n}#ends try\ncatch\n{\n    Write-Error \"An error occurred during backup, please try again\" -ErrorId E4\n    Exit 1\n}#ends catch \n"
  },
  "Category": "RavenDB",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/ravendb-smuggler-move-data-between-database.json",
  "Website": "/step-templates/82f804fe-682e-4e0b-8c2a-a5f289a9cabc",
  "Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRF0Y6OjR8iHx8fW1la0szNmVZZZB8k5crLkIyMwl1evI6QwrCw6uPjsiAh////8/HxjiSEkQAABNlJREFUeNrs24uWmyAUBVBQkKfh//+2gKiYGKMRsWkPnbUmdZLUPfeBEUoe/8gggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggADy/0GceDpgpDSM/SCE9L1SxMweK5swWu/5rdQKlDAUmTCmbZqkYb9UIzZR+p4INxxishlHa1xViBNC7H0Lo5RZvrafBrHDIdY2maUixJ+L2v0W/nxfD41D2cRtsiHtXwAhzz9aQlSMj1CvlDantLYSxPeevRArRHZW/cBymWR0LoJSOirHi51sZ9103lml9GooONssKdUhhszN9CEI2apWn1pJmqdXP7zELtKraVlliHot563ZfQyZJYQo6hV0CtOTpDG1IfRACoqeqrxrJMpwzC0hTVsT4vTTTJFlmf0YHyF8VMIflSZHuWxf7q5iz19Me5F6nNJb7WGQ6LXmVaoRn4P0dIBQStWml8avGFYnL8muUxCjeIIMZeG7G5neMOiG2iKUJsrQ++LZLyXWZBnX+mtlVxWSnzMPTcF/p/NBf+YJEh4FDY/nZw1zbBGT5nW0ByfMryB+Ls8n89hnQ9rwESKIJlE1RSRZxn+ONTuGNJdAyPzbJtkpLdr0CCF0HNPT0t9Xp/i340Aj2A/RMyQ8XOtSU0T0BNFPEP56/bg5zOWQ6YVaE50uYLTiii8hJCReeArNQ2J2Q3b3tP0QwzlfiwhdCU88bS6GUhI0H/xIah2YMc93rfeQsbAHAE8SO3bgDzk1teN9khKQjurt5tz55/jk6sKD4bnyI8R7x8/Hu0r+PKTLIuKzj7+gWKBSLbRW0bIP0kg315J010E0H2b1hxBsmlTyjHqKiJ5IbO880voxPmaXQXhHX++zdP43nkGM9kNYHb8FUghIJD2ao+NTpXwPoZ1YrRe+eE467xSbCInXKe1hyYegfA3xrdV9igjv5kbgg5Ig1L/OfQHZ/oxf9k5jqBeRQ+aI+EcR4r/Mvmo/ll6FIExrsZp+3QTpuoevlvHIV5AtSSGI7jq91hDmiKTrgjH5WPOdxFaFhG71pjR9QM5A3l96FYL4CzGziESn30O6E5C3FX/J0tsWhA6QQxNJm0+N7jaICBcuwy/SshgRsRuyWOmy4VbSu7uTFSBsrItYSmGwfRD/sX3/PYgKq7ozRMgDkINrW1UhKSC7IEfvCteCtNOjXZDjKw4VIFZqqc3cfD9DvrmLWnfnw1wjrGg4akOc8YrmA+TL1Z+6EbGBsQ35dpmh8qaaKSKyULO6CxKLpHl7GX9iUbEyRMfcevdR98zqVWVImEnipXixbnUT5BEiwtch51Z4a0NaHxG5dhf77Jp7bQj3ETErtX56cbc2xPjcYq+1fn43R20Ii93XFi2PWyCuCRfC5sg9xL8T4ud2+bx1q8jeh+qQ1te6u2APR3WIbJaZVWp/UH0IX2QWc78KYSbrWQV3NlaHuCwgsuAe4Bs2+bvy2+fugbTF0+oeiLtgi+ktkLb0/tK7utYV4bhlZi/brG6DyPK74m+BOHnVO+M/iwECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACSM3xR4ABAI1fHCI0qDDgAAAAAElFTkSuQmCC",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Sunday, November 15, 2015